Forum Discussion

AP_TC_ECASD's avatar
AP_TC_ECASD
Brass Contributor
Sep 30, 2025

New-MgBookingBusinessService | Turn Customer Information Questions Off

I'm trying to turn off the stock Customer information questions except for customer email but cannot find how to do it?  Any support is much appreciated.  Below is what I've recently tried...

# Prompt for Booking Business ID
$bookingBusinessId = Read-Host "Enter the Booking Business ID (e.g., email address removed for privacy reasons)"

# Prompt for default duration in minutes
$defaultDurationMinutes = Read-Host "Enter default appointment duration in minutes (e.g., 15)"
$defaultDuration = [TimeSpan]::FromMinutes([double]$defaultDurationMinutes)

# Post-buffer stays at 5 minutes
$postBuffer = [TimeSpan]::FromMinutes(5)

# Hardcoded Excel file path
$excelFilePath = "C:\Users\apettit\OneDrive - Eau Claire Area School District\Downloads\adamtestconferencedata.xlsx"

# Prompt for worksheet/tab name
$sheetName = Read-Host "Enter the worksheet/tab name to read data from"

# Import Excel data using Import-Excel (requires ImportExcel module)
if (-not (Get-Module -ListAvailable -Name ImportExcel)) {
    Install-Module -Name ImportExcel -Scope CurrentUser -Force
}
Import-Module ImportExcel

$staffEmails = Import-Excel -Path $excelFilePath -WorksheetName $sheetName

# Retrieve all staff members for the booking business
Write-Host "Fetching all staff members for booking business ID: $bookingBusinessId"
$allStaff = Get-MgBookingBusinessStaffMember -BookingBusinessId $bookingBusinessId

if (-not $allStaff) {
    Write-Error "No staff members found for the booking business ID: $bookingBusinessId"
    return
}

# Retrieve all custom questions
Write-Host "Fetching all custom questions for booking business ID: $bookingBusinessId"
$allCustomQuestions = Get-MgBookingBusinessCustomQuestion -BookingBusinessId $bookingBusinessId

if (-not $allCustomQuestions) {
    Write-Error "No custom questions found for the booking business ID: $bookingBusinessId"
    return
}

# Loop through each staff member from Excel automatically
Write-Host "Creating individual booking services for each staff member..."
foreach ($row in $staffEmails) {
    $email = $row.emailAddress.Trim().ToLower()

    # Automatically match staff from Booking Business
    $matchingStaff = $allStaff | Where-Object {
        $_.AdditionalProperties["emailAddress"] -and ($_.AdditionalProperties["emailAddress"].Trim().ToLower() -eq $email)
    }

    if ($matchingStaff) {
        $staffId = $matchingStaff.Id
        $displayName = $matchingStaff.AdditionalProperties["displayName"]
        Write-Host "Automatically creating service for: ${displayName} ($email)" -ForegroundColor Cyan

        try {
            # Prepare custom questions
            $customQuestions = $allCustomQuestions | ForEach-Object -Begin { $isLast = $false } -Process {
                $isLast = ($_.Id -eq $allCustomQuestions[-1].Id)
                $questionAssignment = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphBookingQuestionAssignment
                $questionAssignment.QuestionId = $_.Id
                $questionAssignment.IsRequired = if ($isLast) { $false } else { $true }
                $questionAssignment
            }

            # Prepare the reminder
            $defaultReminder = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphBookingReminder
            $defaultReminder.Message = "Don't forget! Family Teacher Conferences are tomorrow, and we are excited to visit with you! If you wish to change the meeting type (virtual, in-person, hybrid, or phone), please let the teacher know as soon as possible!"
            $defaultReminder.Offset = [TimeSpan]::FromDays(1)
            $defaultReminder.Recipients = @("customer")

            # Prepare service parameters
            $serviceParams = @{
                BookingBusinessId = $bookingBusinessId
                DisplayName = "${displayName} Family Conference"
                Description = "Family Teacher Conference with ${displayName}"
                StaffMemberIds = @($staffId)           # Assign specific staff member
                DefaultDuration = $defaultDuration
                DefaultPrice = 0.00
                DefaultPriceType = "free"
                CustomQuestions = $customQuestions
                PostBuffer = $postBuffer
                IsLocationOnline = $true
                IsCustomerAllowedToManageBooking = $true
                DefaultReminder = $defaultReminder
                AdditionalInformation = @"
Please arrive on time for your conferences as we will be sticking to a tight schedule.
If you wish to change the meeting type (virtual, in-person, hybrid, or phone), please let the teacher know as soon as possible.

If you require a translator, please submit a request at this form: https://forms.office.com/r/
"@  # Appears in the customer confirmation email
            }

            # Log service parameters
            Write-Host "Service Parameters for ${displayName}:" -ForegroundColor Blue
            $serviceParams.GetEnumerator() | ForEach-Object { Write-Host "$($_.Key): $($_.Value)" }

            # Create the booking service
            New-MgBookingBusinessService @serviceParams
            Write-Host "Booking service successfully created for ${displayName}!" -ForegroundColor Green
        } catch {
            Write-Error "Failed to create booking service for ${displayName}: $_"
        }
    } else {
        Write-Warning "No match found for email: $email"
    }
}

 

2 Replies

Resources