Teams Phone Agentの通話タイムアウト設定方法|最大時間と切断前メッセージをPowerShellで管理

Teams Phone Agentで「一定時間を超えた通話を自動的に終了したい」場合は、Auto AttendantのコールフローにTimeoutThresholdを設定します。指定できる範囲は15~2400秒で、既定値は240秒、つまり4分です。指定値は最も近い15秒単位に丸められるため、実務では300秒、600秒のように15の倍数を指定すると設定意図が明確になります。

切断前メッセージを独自の文面にする場合は、TimeoutDisconnectPromptTypeをCustomにするだけでは不十分です。TimeoutDisconnectPromptCustomTextにもメッセージ本文を必ず指定します。これらの機能は、現行の公式ドキュメントではVoice Applicationsプライベートプレビュー参加テナント向けとされています。(Microsoft Learn)

目次

Teams Phone Agentの通話タイムアウトで設定できる内容

Teams Phone Agentの通話タイムアウトは、呼び出しへの応答待ち時間や転送先の呼び出し時間ではありません。Teams Phone Agentとの通話全体に設定する最大継続時間です。

設定した時間に達すると切断前メッセージが再生され、その後に通話が終了します。このメッセージが再生されるのは、TimeoutThresholdに到達した場合です。(Microsoft Learn)

主に使用するパラメーターは次の3つです。

パラメーター役割指定値・既定値
TimeoutThresholdTeams Phone Agent通話の最大時間15~2400秒、既定値240秒
TimeoutDisconnectPromptType切断前メッセージの種類DefaultまたはCustom、既定値Default
TimeoutDisconnectPromptCustomText独自の切断前メッセージ文字列。Custom選択時は必須

TimeoutThresholdは整数を受け取りますが、実際には最も近い15秒単位に丸められます。たとえば、10分に設定したい場合は600を指定します。2400秒は40分であり、これが設定可能な上限です。(Microsoft Learn)

Custom選択時だけメッセージ本文が必須になる

Microsoft Learnのパラメーター情報では、TimeoutDisconnectPromptCustomTextが全体として「Mandatory: False」と表示される場合があります。これは、Defaultを使用する場合には不要だからです。

一方、公式ドキュメントの更新内容では、TimeoutDisconnectPromptTypeがCustomの場合にTimeoutDisconnectPromptCustomTextが必須であることが明記されています。つまり、次の2つはセットで扱う必要があります。(GitHub)

-TimeoutDisconnectPromptType Custom
-TimeoutDisconnectPromptCustomText "切断前に読み上げるメッセージ"

設定前に確認しておくべき3つの条件

Voice Applicationsプライベートプレビューに参加しているか

TimeoutThresholdなどのパラメーターは、公式ドキュメント上ではVoice Applicationsプライベートプレビュー向けです。一般提供時期は確定していないと案内されています。(Microsoft Learn)

MicrosoftTeams PowerShellモジュールにパラメーターが表示されていても、テナント側で対象機能が有効とは限りません。次のような状態では、プレビュー参加状況を先に確認します。

  • コマンドは実行できるが設定が反映されない
  • サービス側の検証エラーになる
  • 別のテナントでは動作するが、本番テナントでは動作しない
  • Teams管理センターに該当項目が表示されない

プレビュー機能はPowerShellのみで公開されることもあるため、Teams管理センターに設定画面がないことだけでは利用可否を判断できません。

現在のPowerShell環境に必要なパラメーターがあるか

まずMicrosoft Teamsに接続し、New-CsAutoAttendantCallFlowの構文を確認します。

Connect-MicrosoftTeams

Get-Command New-CsAutoAttendantCallFlow -Syntax

自動的に不足パラメーターを検出する場合は、次のように確認できます。

$command = Get-Command New-CsAutoAttendantCallFlow -ErrorAction Stop

$requiredParameters = @(
    "TimeoutThreshold"
    "TimeoutDisconnectPromptType"
    "TimeoutDisconnectPromptCustomText"
)

$missingParameters = $requiredParameters | Where-Object {
    -not $command.Parameters.ContainsKey($_)
}

if (@($missingParameters).Count -gt 0) {
    throw "必要なパラメーターが見つかりません: $($missingParameters -join ', ')"
}

$command.Parameters.Keys |
    Where-Object { $_ -like "Timeout*" } |
    Sort-Object

必要なパラメーターが表示されない場合は、読み込まれているMicrosoftTeamsモジュールを確認します。

Get-Module MicrosoftTeams -ListAvailable |
    Sort-Object Version -Descending |
    Select-Object -First 1 Name, Version, Path

モジュールを更新するときは、いきなり本番用端末で実施せず、組織の変更管理や検証手順に従ってください。プレビューパラメーターのため、単に古いモジュールが原因とは限りません。

どのコールフローに設定するか

タイムアウトはAuto Attendant全体ではなく、New-CsAutoAttendantCallFlowで作成するコールフロー単位の設定です。

Auto Attendantには、次のような複数のコールフローが存在する場合があります。

  • 通常営業時間のデフォルトコールフロー
  • 営業時間外のコールフロー
  • 休日用コールフロー
  • 特定スケジュール用のコールフロー

公式ドキュメントでは、デフォルトコールフローの優先順位が最も低く、スケジュールに該当するカスタムコールフローが優先して実行されると説明されています。デフォルトコールフローだけを変更しても、営業時間外や休日の通話には反映されない可能性があります。(Microsoft Learn)

TimeoutThresholdの決め方

最大時間は、問い合わせ内容とTeams Phone Agentの設計に合わせて決めます。次の表は設定例であり、Microsoftによる推奨値ではありません。

設定秒数時間想定しやすい用途
240秒4分既定値。短い案内や一次受付
600秒10分一般的な問い合わせや簡単な手続き案内
1200秒20分複数の確認項目がある問い合わせ
1800秒30分比較的長いサポートやヒアリング
2400秒40分設定可能な上限

長く設定すればよいとは限りません。Teams Phone Agentが同じ質問を繰り返した場合や、利用者が通話を終了しない場合に、不要な通話が長時間継続する可能性があります。

最初は利用実績に基づく値を設定し、次の情報を見ながら調整する方法が現実的です。

  • 正常に完了した通話の平均時間
  • タイムアウト直前まで継続した通話の割合
  • タイムアウトによって問い合わせが中断した件数
  • 人への転送が必要になった時点
  • 同じ案内を繰り返している通話の有無

既定の切断前メッセージを使用する方法

まず、コールフローで使用するメニューオブジェクトを用意します。すでにAuto Attendant用のメニューがある場合は、既存のオブジェクトを使用してください。

以下は、説明用の簡略化した作成例です。

$menuPrompt = New-CsAutoAttendantPrompt `
    -TextToSpeechPrompt "お名前またはご用件をお話しください。"

$menu = New-CsAutoAttendantMenu `
    -Name "Teams Phone Agent menu" `
    -Prompts @($menuPrompt) `
    -EnableDialByName

10分でタイムアウトし、Microsoftが用意した既定の切断前メッセージを使用する場合は、次のようにコールフローを作成します。

$callFlow = New-CsAutoAttendantCallFlow `
    -Name "Teams Phone Agent default flow" `
    -Menu $menu `
    -TimeoutThreshold 600 `
    -TimeoutDisconnectPromptType Default

TimeoutDisconnectPromptTypeの既定値はDefaultなので、省略しても既定メッセージが使用されます。ただし、運用スクリプトでは設定意図を明確にするため、明示的にDefaultを指定しておくと分かりやすくなります。(Microsoft Learn)

独自の切断前メッセージを設定する方法

日本語の案内文を管理者側で明示的に決めたい場合は、Customを指定します。

$disconnectText = @"
まもなく通話時間の上限となるため、この通話を終了します。
お手数ですが、必要に応じてもう一度お電話ください。
"@

$callFlow = New-CsAutoAttendantCallFlow `
    -Name "Teams Phone Agent default flow" `
    -Menu $menu `
    -TimeoutThreshold 600 `
    -TimeoutDisconnectPromptType Custom `
    -TimeoutDisconnectPromptCustomText $disconnectText

TimeoutDisconnectPromptCustomTextに指定するのは文字列です。一般的なAuto Attendantのプロンプトとは異なり、このタイムアウト用パラメーターでは音声ファイルオブジェクトではなく、切断時に使用するカスタムテキストを指定します。(Microsoft Learn)

切断前メッセージは短くする

切断前メッセージが長すぎると、利用者は通話終了の理由や次の行動を把握しにくくなります。次の3要素に絞ると伝わりやすくなります。

  • 通話時間の上限に達したこと
  • まもなく通話が終了すること
  • 必要な場合の次の行動

たとえば、次のような文面です。

まもなく通話時間の上限となるため、この通話を終了します。続けてお問い合わせになる場合は、恐れ入りますが、もう一度お電話ください。

「10分経過したため」のように具体的な時間を文面へ入れる場合は注意が必要です。後からTimeoutThresholdだけを変更すると、実際の設定とメッセージが一致しなくなるためです。設定変更が多い環境では、「通話時間の上限」と表現した方が保守しやすくなります。

自動化スクリプトには入力値の検証を入れる

TimeoutThresholdは15~2400秒ですが、運用上は15の倍数だけを受け付けるようにしておくと、丸め処理による認識違いを防げます。

$timeoutThreshold = 600
$promptType = "Custom"
$customText = "まもなく通話時間の上限となるため、この通話を終了します。"

if ($timeoutThreshold -lt 15 -or $timeoutThreshold -gt 2400) {
    throw "TimeoutThresholdは15~2400秒で指定してください。"
}

if (($timeoutThreshold % 15) -ne 0) {
    throw "TimeoutThresholdは15の倍数で指定してください。"
}

if (
    $promptType -eq "Custom" -and
    [string]::IsNullOrWhiteSpace($customText)
) {
    throw "Customを選択した場合は、切断前メッセージの指定が必要です。"
}

この検証を設定変更用スクリプトやCI/CD処理に組み込めば、空のカスタムメッセージや意図しない秒数を本番環境へ反映する事故を減らせます。

作成したコールフローをAuto Attendantへ反映する

New-CsAutoAttendantCallFlowは、Auto Attendantに渡すコールフローオブジェクトを作成するコマンドです。コマンドを実行して$callFlowを作成しただけでは、既存のAuto Attendant設定は変更されません。

新しいAuto Attendantを作成する場合は、New-CsAutoAttendantのDefaultCallFlowなどに作成したオブジェクトを渡します。既存のAuto Attendantを変更する場合は、Get-CsAutoAttendantでオブジェクトを取得し、変更後にSet-CsAutoAttendant -Instanceで反映します。(Microsoft Learn)

既存のデフォルトコールフローを置き換える例

次の例では、既存のメニューと挨拶を引き継ぎながら、デフォルトコールフローへ10分のタイムアウトを追加します。

$aaId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$disconnectText = "まもなく通話時間の上限となるため、この通話を終了します。必要に応じて、もう一度お電話ください。"

$autoAttendant = Get-CsAutoAttendant -Identity $aaId
$currentFlow = $autoAttendant.DefaultCallFlow

$flowParameters = @{
    Name                              = $currentFlow.Name
    Menu                              = $currentFlow.Menu
    TimeoutThreshold                  = 600
    TimeoutDisconnectPromptType       = "Custom"
    TimeoutDisconnectPromptCustomText = $disconnectText
}

if (@($currentFlow.Greetings).Count -gt 0) {
    $flowParameters["Greetings"] = @($currentFlow.Greetings)
}

if ($currentFlow.ForceListenMenuEnabled) {
    $flowParameters["ForceListenMenuEnabled"] = $true
}

if (
    $currentFlow.PSObject.Properties.Name -contains
    "RingResourceAccountDelegates"
) {
    $flowParameters["RingResourceAccountDelegates"] =
        [bool]$currentFlow.RingResourceAccountDelegates
}

if (
    $currentFlow.PSObject.Properties.Name -contains
    "AiDisclaimerType" -and
    -not [string]::IsNullOrWhiteSpace($currentFlow.AiDisclaimerType)
) {
    $flowParameters["AiDisclaimerType"] =
        $currentFlow.AiDisclaimerType

    if ($currentFlow.AiDisclaimerType -eq "Custom") {
        $flowParameters["AiDisclaimerCustomText"] =
            $currentFlow.AiDisclaimerCustomText
    }
}

$newDefaultFlow = New-CsAutoAttendantCallFlow @flowParameters

$autoAttendant.DefaultCallFlow = $newDefaultFlow

Set-CsAutoAttendant -Instance $autoAttendant

既存コールフローを再作成するときは、タイムアウト以外の設定を落とさないことが重要です。変更前に次のコマンドで全プロパティを確認してください。

$currentFlow | Format-List *

将来のモジュール更新で新しいプロパティが追加された場合も、必要な値を新しいコールフローへ引き継ぎます。

営業時間外や休日のコールフローも確認する

DefaultCallFlowを変更しても、営業時間外や休日に別のコールフローが動作する構成では、その時間帯のタイムアウトは変わりません。

対象のAuto Attendantに含まれるコールフローを確認します。

$autoAttendant = Get-CsAutoAttendant -Identity $aaId

$autoAttendant.DefaultCallFlow |
    Format-List Name, Id

$autoAttendant.CallFlows |
    Format-Table Name, Id

各スケジュールとコールフローの関連付けも確認します。

$autoAttendant.CallHandlingAssociations |
    Format-Table Type, ScheduleId, CallFlowId, Enabled

営業時間外と休日にも同じ上限を適用したい場合は、それぞれのコールフローにもタイムアウト設定が必要です。

設定後の確認方法

まずPowerShellから、反映された設定値を確認します。

$updatedAutoAttendant = Get-CsAutoAttendant -Identity $aaId

$updatedAutoAttendant.DefaultCallFlow |
    Format-List `
        Name,
        TimeoutThreshold,
        TimeoutDisconnectPromptType,
        TimeoutDisconnectPromptCustomText

続いて、実際の電話番号を使用してエンドツーエンドの通話テストを行います。

確認項目は次のとおりです。

  • テスト時刻に目的のコールフローが選択されているか
  • 指定した時間までTeams Phone Agentとの通話が継続するか
  • タイムアウト到達時に切断前メッセージが再生されるか
  • Custom指定時に意図した日本語が読み上げられるか
  • メッセージ再生後に通話が終了するか
  • 営業時間外や休日でも期待した設定になるか

本番の代表電話でいきなり試すのではなく、検証用Auto Attendantまたは影響の少ない時間帯で確認するのが安全です。

Teams Phone Agentの通話タイムアウトで失敗しやすいポイント

症状主な原因対処
TimeoutThresholdが認識されない読み込まれているモジュールにパラメーターがないGet-Commandで構文を確認する
パラメーターはあるが反映されないテナントが対象プレビューに参加していない可能性Voice Applicationsプレビューの有効化状況を確認する
Custom指定時にエラーになるTimeoutDisconnectPromptCustomTextが未指定または空Custom本文を同時に指定する
設定時間が想定とずれる15の倍数ではない値が丸められた15の倍数を使用する
日中は動くが夜間は動かない営業時間外用の別コールフローが選択されている対象スケジュールのコールフローにも設定する
コマンド実行後も設定が変わらないコールフローオブジェクトを作っただけでAuto Attendantへ反映していないNew-CsAutoAttendantまたはSet-CsAutoAttendantで反映する
切断案内が聞き取りにくい文面が長い、略語や記号が多い1~2文の平易な文章に修正して通話テストする

まず実施するべき設定手順

Teams Phone Agentの通話タイムアウトを安全に設定するには、最初にプレビュー参加状況とPowerShellパラメーターを確認します。次に、15~2400秒の範囲から15の倍数で最大通話時間を決めます。

既定メッセージを使う場合はTimeoutDisconnectPromptType Default、独自メッセージを使う場合はCustomとTimeoutDisconnectPromptCustomTextをセットで指定してください。

最後に、作成したコールフローを正しいAuto Attendantへ反映し、デフォルト、営業時間外、休日の各コールフローを実通話で確認します。特に既存コールフローを置き換える場合は、メニュー、挨拶、AI免責メッセージなど、タイムアウト以外の設定を失わないように変更前後を比較することが重要です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次