2017-09-06 6 views
-1

私はFacebook Checkbox Pluginと一緒に働いていますが、すべてのものがうまくいきますが、facebookは私のwebhook URLに要求を送信しています。チェックボックスの状態を確認した場合には、オプトインのイベントの後FBメッセンジャーボット:Webhookアップデートは配信されません

と述べられているfacebook docsで は、我々はあなたのサーバにウェブフックイベントをポストします。このコールバックはオプトインコールバックと同じフォーマットですが、送信者フィールドの代わりに、user_refフィールドを持つoptinオブジェクトを持っています。

しかし、データは送信されません。ここに私のwebhookコード

if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] == 'verificationtoken') { 
    echo $_REQUEST['hub_challenge'];   
} 
$data = file_get_contents("php://input"); 
$fp = file_put_contents(PROTECH_FBB_DIR.'/data.log', $data); 

私はまた私のWebhookを手動で打つことを試み、それが応答するかどうか見た。それは正常に正常に動作するので、それはFacebookのデータを投稿していないか、多分私は間違って何かをしていますか?

ご協力いただければ幸いです。ありがとう

+0

あなたは、あなたが加入しているページフィールド書くことができますか?この情報は、アプリケーション - メッセンジャー - 設定 - Webhooks - イベントの編集で確認できます。 – Norbert

+0

@Norbert次のフィールドを確認しました。メッセージ、messaging_optins、messaging_postbacks –

+0

あなたのイベントにページを購読しましたか? – Norbert

答えて

1

私はPHPの開発者ではありませんが、javascript、node.js.で同じロジックを実装しています。私は詳細なステップとjavascriptコードを共有したいと思います。あなたの人生をより良くするためにできることを理解することができれば幸いです:P あなたが言ったように、あなたはapi呼び出しからuser_refを受け取ります。そのとおりです。ドキュメントをもう一度読んで、ユーザがチェックボックスのプラグインをチェックしたときにuser_refが受信されることを述べました。このuser_refはあなた自身によって設定され、ページがロードされるたびにこのuser_refは一意でなければならず、チェックボックスのプラグインのみがレンダリングされます。そして、その背後にある完全な論理がここにあります。 user_refを生成すると、ユーザーがチェックボックスをオンにしたときに、このuser_refを使用してuser_refを受け取ると、ユーザーにメッセージを送信します(user_refを使用してユーザーにメッセージを送信できます。ただし、senderIdを使用することをお勧めします) 。 user_refを使用してメッセージを送信すると、webhook apiはユーザーのsenderIdを含むレスポンスを返します。これは実際に私たちのアプリで通常使用するpsidです。これはあなたのdbに保存する必要があります。 ここで私のコードをここに入れます。 user_refを受信して​​、ユーザーにメッセージを送信: マイペイロード:

{"sender":{"id":"xxxxxxx"},"recipient":{"id":"xxxxxWhat you are looking for is this*******"},"timestamp":1504698781373,"message":{"is_echo":true,"app_id":xxxxxxxxxxxxxxx,"metadata":"INVITATION__REPLY__qwe__2017-09-05T02xo20__xxxxxxxx__063__yes","mid":"mid.$cAAGcxxxxxxxxVxuAtJ","seq":120162,"text":":)"}} 

function sendTextMessageRef(user_ref, messageText,md) { 
    var messageData = { 
    recipient: { 
     user_ref: user_ref 
    }, 
    message: { 
     text: messageText, 
     metadata: md 
    } 
    }; 

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

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

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

さて、メッセージを送信した後、私は、ユーザーの送信者IDが含まれます。このJSON形式で応答を受け取ります

受信したjsonデータでは、recipient.idが探しているものです。 ここで私が自分のチャットで何をしたのかを理解するには、最初にチェックボックスのプラグインを選択します。私のサーバでコールを受け取ります。もしuser_refが含まれていればチェックします。 user_refを使用します。ユーザーがメッセージを受け取ると、webhookは上記の形式でjsonデータを送信します。このレスポンスを受け取ったuser_refを特定するために、私はいくつかの文字列+ user_refの組み合わせであるカスタムメタデータを設定します。これを使用して、user_refを使用して以前にメッセージを送信したユーザーのsender.idを特定します。 sender.idは私のpageidで、recipient.idはあなたが取得しようとしているユーザーIDで、通常はユーザーにメッセージを送り、psidとしても知られています。

希望あなたはまだ言及した上記の溶液を使用して、いくつかの問題を得れば、これはそれについて更新しない、助け:)

+0

詳細な答えのためのありがとう男。私はそのロジックを理解していますが、私の問題は:ユーザーがチェックボックスをチェックし、オプトインを確認して「MessengerCheckboxUserConfirmation」イベントを記録するときです。私は私のサーバー上で電話を受けない。私のサーバーはuser_refで電話を受けることになっています。 –

+0

あなたのページが開発モードの場合は、fbアプリを作成したfb idでチェックボックスのプラグインを試していることを確認してください。それでもウェブフックから何も応答がない場合は、ページの最後にあるドキュメント(https://developers.facebook.com/docs/messenger-platform/plugin-reference/)に記載されている実装手順を必ず実行してください。 checkbox-plugin#implementation – Gaurav

関連する問題