我不是PHP開發人員,但已在JavaScript,node.js中實現了相同的邏輯。我想詳細分享這些步驟以及JavaScript代碼,並希望您能夠弄清楚如何使用它來改善您的生活:P 正如您所說,您正在從api調用接收user_ref。這是正確的。再次閱讀文檔,他們提到用戶選中複選框插件時會收到user_ref。這個user_ref是由你設置的,每當頁面加載時,這個user_ref必須是唯一的,那麼只有複選框插件纔會呈現,如果它不是唯一的,插件不會呈現。這是它背後的完整邏輯。您生成user_ref,當用戶選中複選框時,您會收到此unqiue user_ref,使用此user_ref向用戶發送消息(您可以使用user_ref向用戶發送消息,但是我會建議您使用senderId) 。當你使用user_ref發送消息給用戶時,webhook api會給你一個響應,其中包含用戶的senderId,這實際上是我們通常在我們的應用中使用的psid。這是你需要保存在你的數據庫中。 現在我將把我的代碼放在這裏,我是如何做到的。 接收到user_ref和發送消息給用戶: 我的有效載荷:
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);
}
});
}
現在,在發送消息後,收到在此JSON格式的響應,其中將包括所述用戶的發送者ID:
{"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":":)"}}
在上面收到的json數據中,recipient.id就是你要找的。 這裏爲了讓你明白我在我的聊天機器人中做了什麼,是第一個用戶選擇複選框插件,我收到我的服務器上的電話,如果檢查它是否包含user_ref,如果是的話,我發送文本消息給用戶一個自定義的元數據使用user_ref。當用戶收到消息時,webhook會以上述格式向我發送json數據。爲了確定哪個user_ref我收到了這個響應,我設置了一些自定義的元數據,它是一些字符串+ user_ref的組合。使用這個我確定我以前使用user_ref發送消息的用戶的sender.id。 sender.id是我的pageid和recipient.id您嘗試獲取和使用的用戶標識,我們通常將消息發送給用戶,並且也稱爲psid。
希望這會有所幫助,如果你還在使用,上述方案中得到一些問題,然後做更新吧:)
你會寫你訂閱了哪些頁面領域?您可以在應用程序中找到此信息 - Messenger - 設置 - Webhooks - 編輯事件 – Norbert
@Norbert我檢查了以下字段。消息,messaging_optins,messaging_postbacks –
你訂閱了一個頁面到你的事件? – Norbert