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つです。
| パラメーター | 役割 | 指定値・既定値 |
|---|---|---|
TimeoutThreshold | Teams 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免責メッセージなど、タイムアウト以外の設定を失わないように変更前後を比較することが重要です。

コメント