Amazon Q in Connect セルフサービスのチャネルが電話の場合のみ、回答後にエラーが発生する原因と解決策

Amazon Q in Connect セルフサービスのチャネルが電話の場合のみ、回答後にエラーが発生する原因と解決策

Clock Icon2025.04.11

困っていること

Amazon Q in Connectのセルフサービスにおいて、チャットと電話で挙動が異なる問題が発生しています。

電話の場合、Amazon Qが回答した後にエラーとなり、連続した質問ができない状況です。

Connectフローでのセルフサービスの処理想定フローは以下の通りです。

  1. [顧客の入力を取得する]ブロックでセルフサービスのLexボットが質問を受ける
  2. セルフサービスがToolのQUESTIONツールを使用して回答し、その後ユーザーは再度質問できる状態になる
  3. セルフサービスがToolのCOMPLETEやESCALATIONを選択すると、[顧客の入力を取得する]ブロックの次のブロックに遷移する

cm-hirai-screenshot 2025-03-28 17.34.57

チャットの場合

チャットでは、質問すると即座に回答が返され、その後も引き続き質問を繰り返すことができます。

回答時には Tool として QUESTION が利用されており、想定通りの動作をしています。

電話の場合

電話では、質問に対して回答は返されるものの、その直後にエラーが発生し次のフローに遷移してしまいます。

これによりチャットのように連続した質問ができず、セルフサービスの使い勝手が損なわれています。

Lexのログ

Lexのログを確認したところ、電話の場合も回答時には Tool として QUESTION が正しく利用されていることが確認できました。

Lexの一部のログ
{
  "messages": [
    {
      "contentType": "PlainText",
      "content": "回答内容"
    }
  ],
  "sessionState": {
    "sessionAttributes": {
      "query": "質問内容( = クエリ内容)",
      "Tool": "QUESTION"

Connectフローログ

しかし、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のセッションタイムアウト設定画面
Lexのセッションタイムアウト設定画面:チャットと電話の両方に適用されるが、電話では無音開始しきい値が先にタイムアウトする

このチャットと音声チャネル間のタイムアウト処理の違いが、今回の問題の根本原因です。

なお、チャットの場合はConnectのチャットタイムアウト設定も別途存在し、必要に応じて調整可能です(設定範囲:最小1分〜最大7日)。

チャットタイムアウト設定画面
Connectのチャットタイムアウト設定画面

対応策:無音開始しきい値の延長

問題を解決するには、「顧客の入力を取得する」ブロックの無音開始しきい値を延長します。具体的な設定手順は以下の通りです

  1. Amazon Connectのフローエディタで「顧客の入力を取得する」ブロックを選択
  2. 「セッション属性の設定」セクションで以下を追加:
    • 宛先キー:x-amz-lex:audio:start-timeout-ms:*:*
    • 値:8000(8秒)程度に設定

セッション属性設定画面
無音開始しきい値を8秒に設定する例

ワイルドカード(:)を使用することで、すべてのインテントとスロットに対してこの設定が適用されます。

デフォルトの3秒は実用上短いため、ユーザーが回答を聞いて次の質問を考える十分な時間を確保するためにも、延長することをお勧めします。

まとめ

今回の問題の根本原因は、電話チャネルでの無音開始しきい値(デフォルト3秒)が実用上短いことにありました。
この値を適切に延長することで、Amazon Q in Connectのセルフサービスを電話で利用する場合でも、チャットと同様に連続した質問応答が可能になります。

特に音声対話では、ユーザーが次の質問を考える時間や、回答内容を理解する時間が必要なため、タイムアウト値の適切な設定が重要です。
この調整により、より自然で使いやすいセルフサービス体験を提供できるようになります。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.