Amazon Q in Connect セルフサービスのチャネルが電話の場合のみ、回答後にエラーが発生する原因と解決策
困っていること
Amazon Q in Connectのセルフサービスにおいて、チャットと電話で挙動が異なる問題が発生しています。
電話の場合、Amazon Qが回答した後にエラーとなり、連続した質問ができない状況です。
Connectフローでのセルフサービスの処理想定フローは以下の通りです。
- [顧客の入力を取得する]ブロックでセルフサービスのLexボットが質問を受ける
- セルフサービスがToolのQUESTIONツールを使用して回答し、その後ユーザーは再度質問できる状態になる
- セルフサービスがToolのCOMPLETEやESCALATIONを選択すると、[顧客の入力を取得する]ブロックの次のブロックに遷移する
チャットの場合
チャットでは、質問すると即座に回答が返され、その後も引き続き質問を繰り返すことができます。
回答時には Tool として QUESTION が利用されており、想定通りの動作をしています。
電話の場合
電話では、質問に対して回答は返されるものの、その直後にエラーが発生し次のフローに遷移してしまいます。
これによりチャットのように連続した質問ができず、セルフサービスの使い勝手が損なわれています。
Lexのログ
Lexのログを確認したところ、電話の場合も回答時には Tool として QUESTION が正しく利用されていることが確認できました。
{
"messages": [
{
"contentType": "PlainText",
"content": "回答内容"
}
],
"sessionState": {
"sessionAttributes": {
"query": "質問内容( = クエリ内容)",
"Tool": "QUESTION"
Connectフローログ
しかし、Connect フローログには以下のエラーが記録されていました。
{
"Results": "Error",
"ContactId": "2ad793de-9826-4320-a5d3-545487fe37e8",
"ContactFlowId": "arn:aws:connect:ap-northeast-1:111111111111:instance/3ff2093d-af96-43fd-b038-3c07cdd7609c/contact-flow/e9b7c449-5e1f-4a2c-b9af-9d1a4e143dd9",
"ContactFlowName": "cm-hirai-q-in-connect",
"ContactFlowModuleType": "GetUserInput",
"Identifier": "1e79e345-7b31-403f-80ea-9fc535d637ac",
"Timestamp": "2025-03-25T07:17:38.622Z",
"ErrorDetails": {
"ErrorCode": "BadRequestException",
"Message": "The service cannot process the request"
}
}
同じAmazon Q in Connectの設定を使用しているにもかかわらず、なぜチャットと電話で挙動が異なるのでしょうか?
また、電話の場合にのみ「BadRequestException」エラーが発生する根本的な原因は何なのでしょうか?
回答
発生している問題の根本原因は、電話(音声)とチャットでタイムアウト設定が異なることです。
特に電話の場合、「顧客の入力を取得する」ブロックには「無音開始しきい値」というパラメータがあり、デフォルトでは3000ミリ秒(3秒)に設定されています。
この時間が短いため、ユーザーが回答を聞いた後、次の質問を考えている間にタイムアウトしてエラーになってしまいます。
AWS公式ドキュメントには以下のように記載されています:
音声の問い合わせのタイムアウト値を設定するには、Lex ボットを呼び出す [顧客の入力を取得する] ブロックで、次のセッション属性を使用します。
無音開始しきい値
x-amz-lex:audio:start-timeout-ms:[intentName]:[slotToElicit]
顧客は話さないと見なすまでに待つ時間。デフォルト = 3,000 ミリ秒 (3 秒)。https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/get-customer-input.html
実際に検証したところ、電話(音声)で質問に対する回答が返された後、ユーザーが無音状態で約3秒経過すると「BadRequestException」エラーが発生し、フロー内のエラーブランチに処理が遷移することを確認しました。
これがチャットでは発生せず、電話でのみ発生する理由です。
チャットと電話のタイムアウト設定の違い
電話の場合
- 「無音開始しきい値」のデフォルト値は3秒(3000ミリ秒)と短い
- ユーザーが回答を聞いた後、3秒以内に次の発話を開始しないとタイムアウトエラーとなる
- Lexのセッションタイムアウト(デフォルト1分)も設定されているが、無音開始しきい値の方が短いため、こちらが先に作用する
チャットの場合
- 電話特有の「無音開始しきい値」は存在しない
- Lexのセッションタイムアウト(デフォルト1分)が適用される
- ユーザーは1分間応答がなければタイムアウトとなる
Lexのセッションタイムアウト設定画面:チャットと電話の両方に適用されるが、電話では無音開始しきい値が先にタイムアウトする
このチャットと音声チャネル間のタイムアウト処理の違いが、今回の問題の根本原因です。
なお、チャットの場合はConnectのチャットタイムアウト設定も別途存在し、必要に応じて調整可能です(設定範囲:最小1分〜最大7日)。
Connectのチャットタイムアウト設定画面
対応策:無音開始しきい値の延長
問題を解決するには、「顧客の入力を取得する」ブロックの無音開始しきい値を延長します。具体的な設定手順は以下の通りです
- Amazon Connectのフローエディタで「顧客の入力を取得する」ブロックを選択
- 「セッション属性の設定」セクションで以下を追加:
- 宛先キー:
x-amz-lex:audio:start-timeout-ms:*:*
- 値:
8000
(8秒)程度に設定
- 宛先キー:
無音開始しきい値を8秒に設定する例
ワイルドカード(:)を使用することで、すべてのインテントとスロットに対してこの設定が適用されます。
デフォルトの3秒は実用上短いため、ユーザーが回答を聞いて次の質問を考える十分な時間を確保するためにも、延長することをお勧めします。
まとめ
今回の問題の根本原因は、電話チャネルでの無音開始しきい値(デフォルト3秒)が実用上短いことにありました。
この値を適切に延長することで、Amazon Q in Connectのセルフサービスを電話で利用する場合でも、チャットと同様に連続した質問応答が可能になります。
特に音声対話では、ユーザーが次の質問を考える時間や、回答内容を理解する時間が必要なため、タイムアウト値の適切な設定が重要です。
この調整により、より自然で使いやすいセルフサービス体験を提供できるようになります。