ここでは、Chatbot を Facebook Messenger と連携させる手順について説明します。
基本的に、3 つのポイントがあります。API を利用してメッセージを送信するサービス、Facebook ページ、そして Facebook ユーザーです。 メッセージは、Facebook ページ経由で Facebook ユーザーに送信されるため、ページと、メッセージの送信先ユーザーを指定する必要があります。 ページを指定するには、ページ アクセス トークンを使用します。 ユーザーを指定するには、ユーザーを Page-Scoped ID で指定することを検討します。この場合、ユーザーの ID は、ユーザーが操作しているページによって異なります。 Page-Scoped ID (「PSID」または「Recipient ID」とも呼ばれる) は Webhook を通じて取得できます。Webhook は、ユーザーがチャットを操作している間に発生するさまざまなイベントをリッスンします。
Facebook Messenger をチャネルとして使用するには、ユーザー側で設定が必要です。詳細については、「Facebook Messenger の設定」で説明しています。
「Facebook Messenger を使用した Chatbot のサンプル」で「FacebookWebhook」プロシージャーを確認してください。これは一例です。次の点に注意してください:
- FacebookWebhook は、[ Call protocol ] プロパティが HTTP に設定されたメインオブジェクトです。
- SDT「ChannelConfiguration」を使用して、ページ アクセス トークン、チャネル (Channel.FacebookMessenger)、Recipient ID を含む、チャネルに関する情報が格納されます。
FacebookWebhook のコードでは、GetWebhookConfiguration プロシージャーを使用して ChannelConfiguration を探します。サンプルを実行する前に、GetWebhookConfiguration プロシージャーの &AccessToken 変数 (ページ アクセス トークン) に値を指定する必要があります。
&ChannelConfiguration.Channel = Channel.FacebookMessenger
&AccessToken = !"34567899999999999999999999999" //ここで有効な値を設定
for &ChannelConfigurationProperty in &ChannelConfiguration.Properties
if &ChannelConfigurationProperty.Key = FacebookProperties.AccessToken
&ChannelConfigurationProperty.Value = &AccessToken
return
endif
endfor
&ChannelConfigurationProperty = new()
&ChannelConfigurationProperty.Key = FacebookProperties.AccessToken
&ChannelConfigurationProperty.Value = &AccessToken
&ChannelConfiguration.Properties.Add(&ChannelConfigurationProperty)
次に、FacebookWebhook プロシージャーで、HTTP リクエストから Recipient ID を取得し、SetUserIdInConfiguration プロシージャーを呼び出してチャネル設定に追加します。
- その後、CommonChatbots.SendMessageFromChannel プロシージャーを使用してメッセージを Chatbot に送信します。
- 最後に、GeneXusChannels.Message.SendMessage サービスを使用して応答を Messenger に送信します。
Messenger にメッセージを送信する FacebookWebhook のコードは次のとおりです。メッセージのペイロードは、メッセージのタイプに応じて設定します:
CommonChatbots.SendMessageFromChannel(&FromFacebookMessage.entry.Item(1).messaging.Item(1).message.text, &RecipientId, !"TestChannels", &AnalyzeResponse) (*)
for &Response in &AnalyzeResponse.GXOutputCollection
&Message.Text = &Response
if &AnalyzeResponse.Context.GXSetImageResponse
&MediaMessage.URL = &AnalyzeResponse.Context.GXResponseImage.ImageURI
&MediaMessage.Type = MediaTypes.Image
&Message.Payload.Type = PayloadTypes.Media
&Message.Payload.Body = &MediaMessage.ToJson()
endif
//SendMessage サービスを使用して応答を送信GeneXusChannels.Message.SendMessage(&ChannelConfiguration, &Message, &Messages)
endfor
(*) SendMessageFromChannel 呼び出しの 3 つ目のパラメーターとして Conversational Flows オブジェクトの名前を設定する必要がある点に注意してください。この例では、インスタンス名は「TestChannels」です。
ユーザーがページと一度やり取りしたことがあり、Recipient ID がわかっている場合は、Chatbot インスタンスを使用せずに、GeneXusChannels.Message.SendMessage(&ChannelConfiguration, &Message, &Messages) サービスを使用してメッセージを送信できます。
サンプルの SendMessagesFb オブジェクトを確認してください。さまざまなタイプのメッセージを送信できることを示すために、複数のメッセージをユーザーに送信しています。SendMessagesFb プロシージャーは GetConfiguration データプロバイダーを呼び出します。
この例が機能するためには、先にページ アクセス トークンと受信者の有効な値で GetConfiguration データプロバイダーを完成させる必要があります。
ChannelConfiguration
{
Channel = Channel.FacebookMessenger
Properties
{
PropertiesItem
{
Key = FacebookProperties.AccessToken
Value = !"34567899999999999999999999999" //ここで有効な値を設定}
PropertiesItem
{
Key = FacebookProperties.Recipient
Value = !"11111111111111" //ここで有効な値を設定} } }
SendMessagesFb プロシージャーを実行して結果を確認できます。
メッセージのタイプ
Channels API でサポートされているすべてのタイプを送信できます。詳細については、「Facebook Messenger Channels API でサポートされているメッセージタイプ」を参照してください。
GeneXus 16 Upgrade 6 以降で使用できます。
|