Dialogflow で自動化を追加する

Dialogflow は、ユーザー入力を処理し、既知のインテントにマッピングして、適切な返信を返す自然言語理解(NLU)ツールです。Dialogflow には 2 つのエディションがあります。ビジネス メッセージ エージェントを Dialogflow ES と統合することで、簡単な自動化を簡単に作成してエージェント開発を迅速に開始できます。Dialogflow CX と統合することにより、より複雑な会話のための高度な自動化を作成できます。

ビジネス メッセージ エージェントは、

ビジネス メッセージ エージェントを Dialogflow ES または Dialogflow CX の他の機能と統合するには、各プロダクトのドキュメントをご覧ください。

ユーザーが Dialogflow を統合したエージェントにメッセージを送信すると、ビジネス メッセージはユーザー メッセージを Dialogflow に渡し、メッセージの dialogflowResponse オブジェクトで Dialogflow のレスポンスをエージェントに送信します。Dialogflow のレスポンスをユーザーに自動的に送信するように、エージェントによるアクションを構成することができます。詳細については、自動応答をご覧ください。

Dialogflow との統合

ビジネス メッセージを通じて Dialogflow ベースの自動化を活用するには、まず Dialogflow との統合を有効にする必要があります。

Prerequisites

開始するには、以下が必要です。

  • ビジネス メッセージ エージェント
  • ルート言語が英語(en)の Global リージョンの Dialogflow エージェント

Dialogflow エージェントがない場合は、作成してください。

Dialogflow ES

Dialogflow ES 統合を有効にするには、Dialogflow エージェントのプロジェクト ID が必要です。プロジェクト ID を確認するには:

  1. Dialogflow コンソールに移動します。
  2. ビジネス メッセージに接続する Dialogflow エージェントを選択し、エージェント名の横にある歯車アイコン をクリックします。
  3. [Google プロジェクト] の [プロジェクト ID] の値をメモします。

Dialogflow CX

Dialogflow CX の統合を有効にするには、Dialogflow エージェントのプロジェクト ID とエージェント ID が必要です。ID を確認する手順は次のとおりです。

  1. Dialogflow CX コンソールに移動します。
  2. Dialogflow プロジェクトを選択します。
  3. エージェント セレクタで、Dialogflow エージェントの横にあるオーバーフロー メニュー をクリックします。
  4. [名前をコピー] をクリックします。エージェントの完全な名前が projects/PROJECT_ID/locations/REGION_ID/agents/AGENT_ID の形式でコピーされます。
  5. プロジェクト ID とエージェント ID の値をメモします。

統合を有効にする

  1. Business Communications Developer Console で、[統合] に移動します。
  2. [Dialogflow] で、[Enable integration] をクリックします。
  3. [既存のモデルを接続する] をクリックします。
  4. [Dialogflow エディション] で、有効にするエディションを選択します。
  5. Dialogflow エージェントのプロジェクト ID を入力します。
  6. Dialogflow CX を有効にするには、Dialogflow エージェントのエージェント ID も入力します。
  7. ビジネス メッセージで Dialogflow レスポンスに自動的に回答するには、[自動返信を有効にする] を選択します。
  8. [Next] をクリックします。
  9. サービス アカウントのメールアドレスをコピーします。このアカウントは、ビジネス メッセージと Dialogflow エージェントを接続します。
  10. Google Cloud Console で、Dialogflow プロジェクトを選択します。
  11. IAM 権限に移動します。
  12. [追加] をクリックし、[新しいプリンシパル] のサービス アカウントのメールアドレスを入力します。
  13. [ロールを選択] で、[Dialogflow コンソール エージェント編集者] を選択します。
  14. [別のロールを追加] をクリックして、[Dialogflow API クライアント] を選択します。
  15. [保存] をクリックします。
  16. Business Communications Developer Console で [次へ] をクリックします。
  17. [統合を開始] をクリックします。

ビジネス メッセージと Dialogflow の接続には約 2 分かかります。

統合の更新

  1. Business Communications Developer Console で、[統合] に移動します。
  2. Dialogflow の横にある歯車アイコン をクリックします。
  3. Dialogflow レスポンスを使用してビジネス メッセージをユーザーに自動的に返信するかどうかに応じて、[自動返信を有効にする] を切り替えます。

Dialogflow エディションを切り替える

ビジネス メッセージ エージェントは、一度に 1 つの Dialogflow 統合のみをサポートできます。ある Dialogflow エディションから別の Dialogflow エディションに切り替えるには、新しい統合を有効にする前に、現在の統合を無効にする必要があります。

統合を無効にする

  1. Business Communications Developer Console で、[統合] に移動します。
  2. Dialogflow の横にある歯車アイコン をクリックします。
  3. [統合を無効にする] をクリックします。
  4. [無効にする] をクリックします。

既存の Dialogflow 統合が無効になるまでに 1 分ほどかかります。

こちらの手順に沿って、新しい Dialogflow 統合を有効にします。

インテント マッチング

ビジネス メッセージ エージェントの Dialogflow 統合を有効にすると、エージェントは Dialogflow プロジェクトで構成されたインテントを使用して、コードを記述することなくユーザーの質問を理解して応答できます。インテントの詳細については、Dialogflow ESDialogflow CX のドキュメントをご覧ください。

自動化によりサポートするすべての会話オプションに対して Dialogflow インテントを構成します。ビジネス メッセージ エージェントは、ユーザー メッセージを理解するために Dialogflow を使用します。

Dialogflow API を呼び出すと、ビジネス メッセージはユーザー メッセージ ペイロードをインテントとフルフィルメント Webhook に渡します。ユーザー メッセージがインテントと一致すると、このペイロードには QueryParameters 内の business_messages_payload フィールドの Struct 形式でアクセスできます。

ペイロードには、ユーザー メッセージから DialogflowResponse を除くすべてのフィールドが含まれています。

Dialogflow CX の場合、ビジネス メッセージによって、google_business_messages という名前の channel というセッション パラメータもインテントに渡され、これを $session.params.channel の形式でエージェント内で参照できます。

このパラメータを使用すると、Dialogflow フルフィルメント条件を追加して、同じ Dialogflow エージェントで複数のチャネルをサポートできます。

クエリ パラメータの詳細については、Dialogflow ESDialogflow CX のリファレンスをご覧ください。

Prerequisites

Dialogflow 内で NLU モデルを作成する場合は、インテントに異なるレスポンス タイプを構成できます。ビジネス メッセージは、次のレスポンスを含むデフォルトのレスポンスをサポートしています。

  • Text
  • カスタム ペイロード
  • ライブ対応のエージェントへの引き継ぎ(Dialogflow CX のみ)

カスタム ペイロードは、有効なビジネス メッセージの JSON メッセージ レスポンス オブジェクトと一致する必要があります。インテントのカスタム ペイロード レスポンスを構成するとき、ビジネス メッセージは次のフィールドを無視します。

  • name
  • messageId
  • representative

次のサンプル レスポンスを参照してください。

候補があるテキスト

{
  "text": "Hello World!",
  "fallback": "Hello World!\n\nReply with \"Hello\" or \"Hi!\"",
  "suggestions": [
    {
      "reply": {
        "text": "Hello",
        "postbackData": "hello-formal"
      }
    },
    {
      "reply": {
        "text": "Hi!",
        "postbackData": "hello-informal"
      }
    }
  ]
}

リッチカード

{
  "fallback": "Hello, world!\nSent with Business Messages\n\nReply with \"Suggestion #1\" or \"Suggestion #2\"",
  "richCard": {
    "standaloneCard": {
      "cardContent": {
        "title": "Hello, world!",
        "description": "Sent with Business Messages.",
        "media": {
          "height": "TALL",
          "contentInfo":{
            "altText": "Google logo",
            "fileUrl": "https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png",
            "forceRefresh": "false"
          }
        },
        "suggestions": [
          {
            "reply": {
              "text": "Suggestion #1",
              "postbackData": "suggestion_1"
            }
          },
          {
            "reply": {
              "text": "Suggestion #2",
              "postbackData": "suggestion_2"
            }
          }
        ]
      }
    }
  }
}
{
  "fallback": "Card #1\nThe description for card #1\n\nCard #2\nThe description for card #2\n\nReply with \"Card #1\" or \"Card #2\"",
  "richCard": {
    "carouselCard": {
      "cardWidth": "MEDIUM",
      "cardContents": [
        {
          "title": "Card #1",
          "description": "The description for card #1",
          "suggestions": [
            {
              "reply": {
                "text": "Card #1",
                "postbackData": "card_1"
              }
            }
          ],
          "media": {
            "height": "MEDIUM",
            "contentInfo": {
              "fileUrl": "https://my.files/cute-dog.jpg",
              "forceRefresh": false
            }
          }
        },
        {
          "title": "Card #2",
          "description": "The description for card #2",
          "suggestions": [
            {
              "reply": {
                "text": "Card #2",
                "postbackData": "card_2"
              }
            }
          ],
          "media": {
            "height": "MEDIUM",
            "contentInfo": {
              "fileUrl": "https://my.files/elephant.jpg",
              "forceRefresh": false
            }
          }
        }
      ]
    }
  }
}

ライブ対応のエージェントへの引き継ぎ

{
  "metadata": {}
}

よくある質問: bot

ビジネス メッセージ エージェントに対して Dialogflow ES の統合を有効にすると、FAQ bot を作成できます。サポート対象のナレッジ ドキュメントとして質問と回答を提供すると、ビジネス メッセージと Dialogflow は、コードを記述することなく、ユーザーの質問を理解して応答するために必要なインフラストラクチャを作成します。

FAQ ボットの実際の動作を確認するため、ビジネス メッセージに関するよくある質問の bot とチャットします。

Prerequisites

FAQ bot を作成する前に、質問と回答をナレッジ ドキュメント(最大 50 MB)として公開する必要があります。これは、一般公開されている HTML ファイルまたは CSV ファイルです。

一般的に、ナレッジ ドキュメントは

  • リッチテキストで指定されているように、回答に限定的なマークダウンを含めることができます。
  • 最大サイズは 50 MB です。
  • 質問と回答のペアは 2,000 個まで。
  • 回答が異なる質問は重複して入力しないでください。

HTML ファイルの場合:

  • 公開 URL からのファイルは、Google 検索インデクサによってクロールされ、検索インデックスに存在している必要があります。これは、Google Search Console で確認できます。インデクサはコンテンツを最新の状態に維持しません。ソース コンテンツが変更されたときに、ドキュメントを明示的に更新する必要があります。
  • Dialogflow は、レスポンスの作成時にコンテンツから HTML タグを削除します。このため、HTML タグの使用は避け、可能であれば書式なしテキストを使用することをおすすめします。
  • 質問と回答のペアが 1 つであるファイルはサポートされていません。

CSV ファイルの場合:

  • ファイルの 1 列目に質問、2 列目に解答を含める必要があります。ヘッダーはありません。
  • ファイルの区切り文字にはカンマを使用する必要があります。

FAQ bot を作成する

  1. Business Communications Developer Console で、[統合] に移動します。
  2. [ナレッジベース(よくある質問)] で [ナレッジベースを作成] をクリックします。
  3. ナレッジベースの名前を入力し、[次へ] をクリックします。
  4. MIME タイプを選択します。
  5. ナレッジ ドキュメントを追加します。
    • [MIME タイプ] に [HTML] を選択した場合は、[URL] に、一般公開されている URL を入力します。
    • [MIME タイプ] で [CSV] を選択した場合は、[アップロード] をクリックして、CSV ファイルを選択します。
  6. [追加して終了] をクリックします。

よくある質問の bot にドキュメントを追加するには、[ドキュメントを追加] ボタンをクリックします。

以下の手順を行うと、ビジネス メッセージでは、エージェントに送信されるユーザー メッセージに dialogflowResponse オブジェクトが追加されます。自動返信を有効にすると、ビジネス メッセージは、ユーザー メッセージとの比較で、matchConfidence スコアが最も高い質問 / 回答のペアでユーザーに応答します。

自動返信

Dialogflow との統合中に自動返信を有効にすると、ビジネス メッセージが Dialogflow を介してユーザーに自動的に応答します。ビジネス メッセージ エージェントは、最も高い信頼度の一致で応答します。Dialogflow ES の統合では、よくある質問の回答とカスタム インテントの両方に一致する場合、ビジネス メッセージは信頼度が最も高い一致で応答します。

ビジネス メッセージでは、すべての自動返信メッセージが BOT の代理人から送信されたものとしてマークされます。エージェントがライブ エージェントをサポートしている場合、ビジネス メッセージは REPRESENTATIVE_JOINED イベントの後に自動返信を一時停止し、REPRESENTATIVE_LEFT イベント後に自動返信を再開します。bot から人間のエージェントへの引き継ぎをご覧ください。

よくある質問の回答を自動返信する

Dialogflow ES の統合では、よくある質問の回答の信頼度が最も高い場合、ビジネス メッセージによって回答がテキスト メッセージにマッピングされます。関連があるものの別の回答がある場合は、メッセージに「別の回答を表示」の提案が表示されます。表示されていない場合は、メッセージに質問が含まれており、メッセージがユーザーのリクエストを満たしているかどうかを尋ねる返信が返されます。

インテント レスポンスで自動応答

インテント レスポンスには、次のレスポンスを 1 つ以上含めることができます。

インテント レスポンスの信頼度レベルが最も高い場合、以下が適用されます。

  • レスポンスに少なくとも 1 つのテキスト値がある場合、ビジネス メッセージはこの値をテキスト メッセージにマッピングします。
  • 有効なビジネス メッセージの JSON オブジェクト構造を持つカスタム ペイロードがレスポンスに少なくとも 1 つある場合、ビジネス メッセージは指定された JSON オブジェクトを使用してメッセージを作成します。
  • レスポンスに少なくとも 1 つのライブ エージェント ハンドオフ レスポンスがある場合は、ライブ エージェント リクエストによる自動返信をご覧ください。

Dialogflow では 1 つのインテントの一致内に複数のレスポンスを含めることができるため、ビジネス メッセージは各テキスト、カスタム ペイロード、ライブ エージェントのハンドオフ レスポンスを個別のメッセージとして送信します。インテントに一致するメッセージが複数あるが、その一部が異常な場合は、ビジネス メッセージによって有効なメッセージのみが自動応答として送信されます。

人間のエージェントからのリクエストで自動返信

Dialogflow CX は、人間のエージェントへの引き継ぎのレスポンスをサポートしています。これは、会話を人間の担当者に渡す必要があることを示し、ハンドオフ手順のためにカスタム メタデータを渡すことができます。インテント レスポンスの信頼度レベルが最高で、ライブ エージェントのハンドオフが含まれている場合、ビジネス メッセージはライブ エージェントにリクエストされたイベントを Webhook に送信します。このイベントを処理する方法については、bot から人間のエージェントへの引き継ぎをご覧ください。

フォールバック メッセージで自動応答

Dialogflow が信頼度の高い一致を取得できない場合、ビジネス メッセージはフォールバック レスポンスを送信します。Dialogflow ES と Dialogflow CX では、フォールバックの処理方法が異なります。

Dialogflow ES

「よくある質問」bot の場合、よくある質問の回答と一致しない場合、ビジネス メッセージは、回答が見つからなかったというフォールバック メッセージを送信します。

構成済みインテントの場合、インテント レスポンスに一致するものがない場合、ビジネス メッセージはフォールバック インテント レスポンスを送信します。Dialogflow が提供する代替テキストを使用することも、テキストとカスタム ペイロードを追加して構成することもできます。

Webhook が受信できるフォールバック インテント レスポンスの例を次に示します。

{
  "intentResponses": [
    {
      "intentName": "projects/df-integration/agent/intents/12345",
      "intentDisplayName": "Default Fallback Intent",
      "intentDetectionConfidence": "1.0",
      "fulfillmentMessages": [
        {
          "text": "One more time?"
        }
      ]
    }
  ]
}

Dialogflow では、intent_nameintent_display_name が事前入力されます。

Dialogflow CX

Dialogflow CX はフォールバック インテント レスポンスを組み込みイベントとして処理します。インテント レスポンスに一致するものがない場合、ビジネス メッセージは Dialogflow の no-match デフォルト イベントからフォールバック メッセージを送信します。Dialogflow が提供するフォールバック テキストを使用することも、追加のテキスト、カスタム ペイロード、人間のエージェントへの引き継ぎオプションを含むフォールバックを構成することもできます。

Webhook が受信できるフォールバック インテント レスポンスの例を次に示します。

{
  "intentResponses": [
    {
      "intentName": "sys.no-match-default",
      "intentDisplayName": "Default Fallback Intent",
      "intentDetectionConfidence": "0.3",
      "fulfillmentMessages": [
        {
          "text": "I missed that, say that again?"
        }
      ]
    }
  ]
}

ビジネス メッセージは intent_nameintent_display_name をハードコードします。

Dialogflow 固有のフィールド

Dialogflow 統合を有効にすると、エージェントが受け取るユーザー メッセージには dialogflowResponse オブジェクトが含まれます。Webhook がビジネス メッセージに代わってメッセージに自動的に応答したかどうかにかかわらず、すべてのユーザー メッセージのペイロードを受信します。自動返信を確認するには、autoResponded フィールドの値を確認し、ユーザーに返信する必要があるかどうかを判断します。

Dialogflow ES

...
"dialogflowResponse": {
  "queryText": "TEXT",
  "intentResponse": {
    "intentName": "INTENT_ID",
    "intentDisplayName": "INTENT_NAME",
    "intentDetectionConfidence": "CONFIDENCE_NUMERIC",
    "fulfillmentMessages": [{
      "text": "FULFILLMENT_TEXT",
      "jsonPayload": "JSON",
      "error": "ERROR_STATUS",
    }],
  "faqResponse": {
    "userQuestion": "USER_QUESTION",
    "answers": [{
      "faqQuestion": "FAQ_QUESTION",
      "faqAnswer": "FAQ_ANSWER",
      "matchConfidenceLevel": "CONFIDENCE_LEVEL",
      "matchConfidence": "CONFIDENCE_NUMERIC",
    }],
  },
  "autoResponded": "BOOLEAN",
  "autoRespondedMessages": [{
    "message": "MESSAGE_JSON",
    "responseSource": "SOURCE",
  }],
},
...
フィールド 説明
queryText 元の会話クエリのテキスト。Dialogflow モデルでスペルミスの自動修正が有効になっている場合、queryText には修正されたユーザー入力が含まれます。
intentName 一致したインテントの一意の識別子。
intentDisplayName 一致したインテントの名前。
intentDetectionConfidence queryTextintentName の間の一致の数値信頼度。
text テキスト レスポンス。
jsonPayload カスタム ペイロード レスポンス。この文字列は、Dialogflow で定義されたカスタム ペイロードと一致します。ペイロードに有効なビジネス メッセージの JSON オブジェクト構造がない場合、error はその問題を表します。
error インテント フルフィルメント メッセージを含むエラーの説明。
userQuestion Dialogflow によって解析された、ユーザーが尋ねた質問。
faqQuestion Dialogflow からの質問とユーザーの質問との一致。
faqAnswer Dialogflow からの回答がユーザーの質問に一致する。
matchConfidenceLevel userQuestionfaqQuestion の一致の信頼度。
matchConfidence userQuestionfaqQuestion の間の一致の数値信頼度。
autoResponded Dialogflow からの回答をビジネス メッセージによってユーザーに自動返信したかどうか。
message 自動応答のペイロード。
responseSource 自動返信の送信元。ResponseSource をご覧ください。

Dialogflow CX

...
"dialogflowResponse": {
  "queryText": "TEXT",
  "intentResponse": {
    "intentName": "INTENT_ID",
    "intentDisplayName": "INTENT_NAME",
    "intentDetectionConfidence": "CONFIDENCE_NUMERIC",
    "fulfillmentMessages": [{
      "text": "FULFILLMENT_TEXT",
      "jsonPayload": "JSON",
      "error": "ERROR_STATUS",
      "liveAgentHandoff": {
        "metadata": {}
      }
    }],
  "autoResponded": "BOOLEAN",
  "autoRespondedMessages": [{
    "message": "MESSAGE_JSON",
    "responseSource": "SOURCE",
  }],
},
...
フィールド 説明
queryText 元の会話クエリのテキスト。Dialogflow モデルでスペルミスの自動修正が有効になっている場合、queryText には修正されたユーザー入力が含まれます。
intentName 一致したインテントの一意の識別子。
intentDisplayName 一致したインテントの名前。
intentDetectionConfidence queryTextintentName の間の一致の数値信頼度。
text テキスト レスポンス。
jsonPayload カスタム ペイロード レスポンス。この文字列は、Dialogflow で定義されたカスタム ペイロードと一致します。ペイロードに有効なビジネス メッセージの JSON オブジェクト構造がない場合、error はその問題を表します。
error インテント フルフィルメント メッセージを含むエラーの説明。
liveAgentHandoff 人間のエージェントの引き継ぎ手順のカスタム メタデータ。
autoResponded Dialogflow からの回答をビジネス メッセージによってユーザーに自動返信したかどうか。
message 自動応答のペイロード。
responseSource 自動返信の送信元。ResponseSource をご覧ください。