RBM エージェントは、Webhook を介してメッセージとイベントを受信します。ユーザーがエージェントにメッセージを送信すると、Google の RBM サービスはそのメッセージを構成済みの Webhook に送信します。エージェントはメッセージをデコードして処理し、ユーザーにレスポンスを発行できます。
ユーザーは、RCS クライアントで許可されているテキスト、場所、ファイルをすべて送信できます。 エージェントは、ユーザーが送信する可能性のあるテキスト、場所、ファイル、およびそれらのメッセージによってトリガーされる可能性のあるエラー状態を処理する必要があります。
着信メッセージを処理する
エージェントがユーザーからのメッセージをどのように処理し、それに応答するかは、ビジネス ロジックに大きく依存します。ただし、ユーザー メッセージに応答する手順は一貫しています。
ステップ 1: ユーザーが送信したメッセージの種類を特定する
ユーザーは次の 4 種類のメッセージを送信できます。
- テキスト メッセージは自由形式のレスポンスです。
- 候補メッセージには、ポストバック データと、ユーザーがタップした推奨アクションまたは推奨返信のテキストが含まれます。
Location メッセージには緯度と経度の値が含まれます。
File メッセージには、ファイルの URI と関連データの URI が含まれます。
ステップ 2: メールの内容を処理する
ユーザー メッセージの内容は、エージェントのロジックと会話での次のレスポンスの指針となる必要があります。
ユーザーの意図を特定する最も簡単な方法は、提案されたリプライや提案されたアクションからのポストバック データを使用することです。提案に関連付けられたテキストに関係なく、ポストバック データは機械で読み取り可能です。
ユーザーがテキスト メッセージを送信すると、エージェントはサポートされているキーワードに関するレスポンスを解析したり、NLU(Dialogflow など)を使用してユーザーのメッセージを処理し、進むパスを特定することがあります。
ロケーション メッセージとファイル メッセージにはテキスト データやポストバック データが含まれないため、エージェントは応答する前に会話と最近のメッセージのコンテキストを考慮する必要があります。
ユーザーのメッセージに応答する方法がわからない場合、エージェントはエラー状態で応答し、ユーザーに追加情報を求めるか、別の方法で入力を求めるか、またはエージェントが応答する方法を知っている返信の候補や推奨されるアクションを提示して、会話を継続する必要があります。
ステップ 3: インタラクションのビジネス ロジックを実行する
エージェントは、ユーザーのメッセージに対する正しいレスポンスを特定すると、インフラストラクチャから必要な情報を収集し、必要に応じて他のシステムと連携して、やり取りのビジネス ロジックを実行します。
ステップ 4: お客様に返信する
エージェントはインタラクションのビジネス ロジックを実行した後、別のメッセージを送信し、ユーザーとの会話を続行します。
例
次のコードは、エージェントがメッセージを受信する方法を示しています。形式と値の情報については、UserMessage をご覧ください。
エージェントがテキスト メッセージを受け取る
{ "agentId": "AGENT_ID", "senderPhoneNumber": "PHONE_NUMBER", "messageId": "MESSAGE_ID", "sendTime": "2018-12-31T15:01:23.045123456Z", "text": "Hello, world!" }
エージェントが提案からメッセージを受信する
{ "agentId": "AGENT_ID", "senderPhoneNumber": "PHONE_NUMBER", "messageId": "MESSAGE_ID", "sendTime": "2018-12-31T15:01:23.045123456Z", "suggestionResponse": { "postbackData": "suggestion_1", "text": "Suggestion #1" } }
エージェントがビジネス情報を受け取る
{ "agentId": "AGENT_ID", "senderPhoneNumber": "PHONE_NUMBER", "messageId": "MESSAGE_ID", "sendTime": "2018-12-31T15:01:23.045123456Z", "location": { "latitude": 37.422000, "longitude": -122.084056 } }
エージェントがファイルを受信する
{ "agentId": "AGENT_ID", "senderPhoneNumber": "PHONE_NUMBER", "messageId": "MESSAGE_ID", "sendTime": "2018-12-31T15:01:23.045123456Z", "userFile": { "category": "IMAGE", "thumbnail": { "mimeType": "image/jpeg", "fileSizeBytes": 1280, "fileUri": "https://storage.googleapis.com/copper_test/77ddb795-24ad-4607-96ae-b08b4d86406a/d2dcc67ab888d34ee272899c020b13402856f81597228322079eb007e8c8", "fileName": "4_animated.jpeg" }, "payload": { "mimeType": "image/gif", "fileSizeBytes": 127806, "fileUri": "https://storage.googleapis.com/copper_test/77ddb795-24ad-4607-96ae-b08b4d86406a/d2dcc67ab888d34ee272899c020b13402856f81597228322079eb007e8c9", "fileName": "4_animated.gif" } } }
受信イベントを処理する
エージェントは、ユーザーに送信するメッセージが配信されて既読になると、通知を受信します。
次のコードは、エージェントがメッセージを受信する方法を示しています。形式と値の情報については、UserEvent をご覧ください。
ユーザーにメッセージを配信しました
{ "agentId": "AGENT_ID", "senderPhoneNumber": "PHONE_NUMBER", "messageId": "MESSAGE_ID", "eventId": "EVENT_ID", "sendTime": "2018-12-31T15:01:23.045123456Z", "eventType": "DELIVERED" }
ユーザーがメッセージを読みました
{ "agentId": "AGENT_ID", "senderPhoneNumber": "PHONE_NUMBER", "messageId": "MESSAGE_ID", "eventId": "EVENT_ID", "sendTime": "2018-12-31T15:01:23.045123456Z", "eventType": "READ" }
ユーザーが入力中です
{ "senderPhoneNumber": "PHONE_NUMBER", "eventType": "IS_TYPING", "eventId": "EVENT_ID", "sendTime": "2018-12-31T15:01:23.045123456Z", "agentId": "AGENT_ID" }