最近のアクセス:
Chatbot で Facebook Messenger を使用する方法

ここでは、Chatbot を Facebook Messenger と連携させる手順について説明します。

仕組み

基本的に、3 つのポイントがあります。API を利用してメッセージを送信するサービス、Facebook ページ、そして Facebook ユーザーです。
メッセージは、Facebook ページ経由で Facebook ユーザーに送信されるため、ページと、メッセージの送信先ユーザーを指定する必要があります。
ページを指定するには、ページ アクセス トークンを使用します。
ユーザーを指定するには、ユーザーを Page-Scoped ID で指定することを検討します。この場合、ユーザーの ID は、ユーザーが操作しているページによって異なります。
Page-Scoped ID (「PSID」または「Recipient ID」とも呼ばれる) は Webhook を通じて取得できます。Webhook は、ユーザーがチャットを操作している間に発生するさまざまなイベントをリッスンします。

Facebook の設定

Facebook Messenger をチャネルとして使用するには、ユーザー側で設定が必要です。詳細については、「Facebook Messenger の設定」で説明しています。

Webhook の実装

Facebook Messenger を使用した Chatbot のサンプル」で「FacebookWebhook」プロシージャーを確認してください。これは一例です。次の点に注意してください:
  • FacebookWebhook は、[ Call protocol ] プロパティが HTTP に設定されたメインオブジェクトです。
  • SDT「ChannelConfiguration」を使用して、ページ アクセス トークン、チャネル (Channel.FacebookMessenger)、Recipient ID を含む、チャネルに関する情報が格納されます。
イメージ:44595.png

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 プロシージャーを実行して結果を確認できます。
イメージ:44598.png


メッセージのタイプ

Channels API でサポートされているすべてのタイプを送信できます。詳細については、「Facebook Messenger Channels API でサポートされているメッセージタイプ」を参照してください。

使用可能バージョン

GeneXus 16 Upgrade 6 以降で使用できます。


サブページ
Created: 20/12/14 21:41 by Admin Last update: 21/11/11 22:55 by Admin
カテゴリ
Powered by GXwiki 3.0