我不是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