2017-04-25 18 views
1

からの応答で応答するために私のFacebookのメッセンジャーボットを取得できません。私はそれに書き込むときは、スラックとFacebook Messengerの両方のためにApi.Aiで設定した応答で答えますが、Api.Aiは私のサービスへの呼び出しを行う履行部分に、それはスラックで正常に動作しますが、私は取得しますFacebook Messengerからの応答はありません。は、私がApi.Aiボットを作り、スラックやFacebook Messengerの両方でそれを統合している私のサービス

私は私のサービスから返すメッセージのフォーマット:

{ 
"contextOut": [ 
    { 
     "lifespan": 2, 
     "name": "weather", 
     "parameters": { 
      "city": "Rome" 
     } 
    } 
], 
"data": { 
    "facebook": { 
     "message": { 
      "text": "Great success!" 
     }, 
     "recipient": { 
      "id": "1454102654663349" 
     } 
    }, 
    "slack": { 
     "attachments": [ 
      { 
       "color": "#00A399", 
       "title": "Hello world!", 
       "title_link": "https://www.mywebsite.se" 
      } 
     ], 
     "text": "Horray! Great success! :)" 
    } 
}, 
"displayText": "Whatever!!", 
"followupEvent": { 
    "followupEvent": { 
     "data": { 
      "parameter": "<parameter_value>" 
     }, 
     "name": "<event_name>" 
    } 
}, 
"source": "mywebsite.se", 
"speech": "Whatever!?" 
} 

Facebookの受信者IDが私のサービスに対して行ったリクエストから来ています。

request.result.contexts[0].parameters.Facebook_sender_id 

私はFacebookアプリの製品設定タブでウェブフックを確認しました。
ページアクセストークンを使用してページに自分のアプリを登録しました。
私はウェブフックの下に以下のイベントがチェックしている:メッセージ、messaging_postbacks
のFacebookにボットをしようとしたとき、私は、アプリの管理者ユーザーとしてログインしています。

私はアイデアの出だけど、私が見逃している何かがなければなりませんか?

編集:私はテスト目的のための私のウェブフックとしてAzureの機能を設定して 。

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) 
{ 
    var request = await req.Content.ReadAsAsync<ApiAiMessage>(); 

    log.Info($"Incoming: {JsonConvert.SerializeObject(request)}"); 

    var slack_message = new { 
     text = $"Horray! Great success! :)", 
     attachments = new[] { 
      new { 
        title = "Hello world!", 
        title_link = "https://www.mywebsite.se", 
        color = "#00A399" 
       } 
      } 
     }; 

    var facebook_message = new { 
      recipient = new { 
       id = $"{request.result.contexts[0].parameters.Facebook_sender_id}" 
       }, 
      message = new { 
        text = "Great success!" 
       } 
      }; 

    var response = new 
    { 
     data = new 
      { 
       facebook = facebook_message, 
       slack = slack_message 
      }, 
     speech = "Whatever!?", 
     displayText = "Whatever!!", 
     contextOut = new[] { 
      new { 
        name = "weather", 
        lifespan = 2, 
        parameters = new { 
         city = "Rome" 
        } 
       } 
      }, 
     source = "mywebsite.se", 
     followupEvent = new { 
      followupEvent = new { 
       name = "<event_name>", 
       data = new { 
        parameter = "<parameter_value>" 
       } 
      } 
     } 
    }; 

    log.Info($"Outgoing: {JsonConvert.SerializeObject(response)}"); 

    return req.CreateResponse(HttpStatusCode.OK, response, new MediaTypeHeaderValue("application/json")); 
} 
+0

どのようにあなたが実際にAPI.ai応答でのFacebookへの要求を行っているように見えるのか?上記のコードは、FBに応答を送信するために貼り付けられていないコードを使用していることが問題であり、それがブレークが発生している場所であれば、問題の診断に役立ちません。 また、郵便配達でテストしましたか?あなたは正しいFBページトークンとパラメータでリクエストを送信していますか? –

+0

郵便配達員とのリクエストの送信はうまく動作し、スラックと同じ動作をします。 Botは私の質問に貼り付けられた応答を返します。私は自分のサービスで発信メッセージを記録し、Facebook Messengerからの要求を送信するときに応答が同じであることを確認できます。唯一の違いはFacebookの受信者IDであることは明らかにFacebook以外のソースからのリクエストを行うときには存在しません。 私が使用しているAzure関数で質問を編集しました。 – mrapan

+0

FBトークンをどこにメッセンジャーに送っていますか? –

答えて

0

ここで実際にAPI.ai応答をFacebook Messengerに送っていますか?これは、 'ページトークン'のようなFB仕様を必要とします。実際にはSlackで動作しますが、FBではないので、このような単純なものとは思えません。ここでは何のJavaScriptの例は、通話が

function callSendAPI(messageData) { 
 
\t request({ 
 
\t \t uri: 'https://graph.facebook.com/v2.6/me/messages', 
 
\t \t qs: { 
 
\t \t \t access_token: config.FB_PAGE_TOKEN 
 
\t \t }, 
 
\t \t method: 'POST', 
 
\t \t json: messageData 
 

 
\t }, function (error, response, body) { 
 
\t \t if (!error && response.statusCode == 200) { 
 
\t \t \t var recipientId = body.recipient_id; 
 
\t \t \t var messageId = body.message_id; 
 

 
\t \t \t if (messageId) { 
 
\t \t \t \t console.log("Successfully sent message with id %s to recipient %s", 
 
\t \t \t \t \t messageId, recipientId); 
 
\t \t \t } else { 
 
\t \t \t \t console.log("Successfully called Send API for recipient %s", 
 
\t \t \t \t \t recipientId); 
 
\t \t \t } 
 
\t \t } else { 
 
\t \t \t console.error("Failed calling Send API", response.statusCode, response.statusMessage, body.error); 
 
\t \t } 
 
\t }); 
 
}

+0

これは、Facebook APIへのPOSTを行うためのフォーマットです。私の問題は、Facebook APIからAPI.AI経由で私のサービスに投稿を受け取り、正しい応答を形成することでした。申し訳ありませんが、私はそれについて不明でした。 – mrapan

関連する問題