我们想在请求表单的末尾添加facebook messenger复选框插件,以便用户可以通过信使选择加入通知。
当用户选择加入时,我们的webhook会收到我们在表单中设置的user_ref的回调。
我们向此user_ref
发送选择加入确认但我们收到的其他消息,如交付,阅读收据或来自用户的实际消息,确实包含用户引用,但用户ID。
这是facebook的官方文档:
收到回调事件后,您可以调用Send API以使用收件人中的user_ref标识符开始向用户发送消息,如下所示。请注意,此字段与呈现插件之前和确认选择加入之前使用的唯一user_ref参数相同。
如果对Send API的调用成功,则响应将包含recipient_id参数,该参数是您现在可以在将来的API调用中使用的稳定用户ID。
因此,无法在初始消息和新消息之间进行跟踪。有人找到了解决方案吗?
非常感谢你。
答案 0 :(得分:0)
例如,当用户选择使用可选的ref
参数时,您可以发送其他信息。您可以发送我网站上登录用户的用户名:
function confirmOptIn() {
FB.AppEvents.logEvent('MessengerCheckboxUserConfirmation', null, {
'app_id':'APP_ID',
'page_id':'PAGE_ID',
'ref': 'myuser@mywebsite.com',
'user_ref':'UNIQUE_REF_PARAM'
});
您将在webhook活动中收到optin
内的用户名:
{
"recipient":{
"id":"PAGE_ID"
},
"timestamp":1234567890,
"optin":{
"ref":"myuser@mywebsite.com",
"user_ref":"UNIQUE_REF_PARAM"
}
}
然后,您可以调用Send API以使用user_ref
开始向用户发送消息。
如果对Send API的调用成功,则响应将包含recipient_id参数,该参数是您现在可以在将来的API调用中使用的稳定用户ID。
...所以您将收到Messenger ID,您可以将其映射到您已经拥有的网站的用户名。在这里,我从官方开发者网站修改了一些示例,用user_ref
调用send API,并将响应中获得的用户ID映射到我的网站用户名:
function callSendAPICheckbox(messageData, userApplicationId) {
((userApplicationId) => {
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("Map messenger user ID %s with the username of my website %s", recipientId, userApplicationId);
} else {
console.log("Successfully called Send API for recipient %s",
recipientId);
}
} else {
console.error("Failed calling Send API for userId " +
recipientId, response.statusCode, response.statusMessage, body.error);
}
});
})(userApplicationId)
}
答案 1 :(得分:0)
为什么不使用sendTextMessage
的元数据字段。您发送给用户的每条消息,您也发送元数据,当您收到正在传递的消息的响应时,您会在其中找到元数据字段。
以下是我的工作:
当用户选择复选框插件并触发事件时,我会在我的服务器上接收呼叫,检查它是否包含user_ref
。如果是,则使用user_ref
向用户发送带有自定义元数据的文本消息。当用户收到消息时,webhook
会向我发送文档中提到的json
数据。为了确定我收到此响应的user_ref
,我在使用string + user_ref
向用户发送消息之前设置了自定义元数据,该元数据是某些user_ref
的组合。使用此自定义元数据,我使用sender.id
标识我之前发送消息的用户的user_ref
。 sender.id
是我的pageid
和recipient.id
您尝试获取和使用的用户ID,我们通常会向用户发送消息,也称为psid
。
如果只是我经常提到的逻辑部分,则在上面。 对于详细解决方案以及代码,我已经发布了here: