我想展示'欢迎信息',如'嗨罗伯特,欢迎来到我的申请'。 所以我需要发送:
使用第一个请求中的“first_name”,发送“https://graph.facebook.com/v2.6/PAGE_ID/thread_settings?access_token=PAGE_ACCESS_TOKEN”请求以设置“欢迎消息”。
但是,我需要在第一次请求之前知道user_id。
我的问题:
我查看了https://developers.facebook.com/docs/messenger-platform文档,我还有问题。
答案 0 :(得分:6)
因此,您可以使用"get started"按钮进行此操作。仅当用户首次向机器人发送消息时,此按钮才会出现。
使用此命令可以设置按钮:
curl -X POST -H "Content-Type: application/json" -d '{
"setting_type":"call_to_actions",
"thread_state":"new_thread",
"call_to_actions":[
{
"payload":"USER_DEFINED_PAYLOAD"
}
]
}' "https://graph.facebook.com/v2.6/me/thread_settings?access_token=PAGE_ACCESS_TOKEN"
正如您可以看到按下按钮一样,您的Webhook会收到"回发"
这是你得到的回调:
{
"sender":{
"id":"USER_ID"
},
"recipient":{
"id":"PAGE_ID"
},
"timestamp":1458692752478,
"postback":{
"payload":"USER_DEFINED_PAYLOAD"
}
}
因此,您可以从中获取用户ID
现在您可以为此编写一个函数。 我看起来像这样:
function receivedPostback(event) {
var senderID = event.sender.id;
var recipientID = event.recipient.id;
var timeOfPostback = event.timestamp;
// The 'payload' param is a developer-defined field which is set in a postback
// button for Structured Messages.
var payload = event.postback.payload;
console.log("Received postback for user %d and page %d with payload '%s' " +
"at %d", senderID, recipientID, payload, timeOfPostback);
if (payload) {
// When a postback is called, we'll send a message back to the sender to
// let them know it was successful
switch (payload) {
case 'USER_DEFINED_PAYLOAD':
startedConv(senderID);
break;
default:
sendTextMessage(senderID, "Postback called");
}
我的 startedConv()看起来像这样
function startedConv(recipientId){
var name;
request({
url: 'https://graph.facebook.com/v2.6/'+ recipientId +'?fields=first_name',
qs: {access_token: PAGE_ACCESS_TOKEN},
method: 'GET'
}, function(error, response, body) {
if (error) {
console.log('Error sending message: ', error);
} else if (response.body.error) {
console.log('Error: ', response.body.error);
}else{
name = JSON.parse(body);
sendTextMessage(recipientId, "Hello "+ name.first_name+", how can i help you ? ")
}
});
}
答案 1 :(得分:4)
你不需要它。只需按照以下步骤操作即可
1-转到与您的信使api相关的页面。
2-设置(FB页面设置)
3-从选项卡中选择信息
4-在底部的消息传递选项卡中,您将看到"显示Messenger问候语"从" No"改变它到"是"。比你可以自定义它;)
注意:要查看问候留言,您应该使用您设置问候留言的页面删除之前的对话。然后与您应该看到问候语的页面开始新的对话。
答案 2 :(得分:1)
从9月12日起,您可以设置在用户点击“开始使用”之前显示的问候语文本,它包含将在文本呈现时替换的这些标记:
查看Messenger平台文档的这个页面: https://developers.facebook.com/docs/messenger-platform/thread-settings/greeting-text
答案 3 :(得分:1)
此时创建问候语文本并不难。我花了一些时间找出如何做到这一点,结果很简单。我重构了我在样本中找到的POST
请求的方法之一,我正在使用 NodeJS btw。
function createGreetingApi(data) {
request({
uri: 'https://graph.facebook.com/v2.6/me/thread_settings',
qs: { access_token: PAGE_ACCESS_TOKEN },
method: 'POST',
json: data
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log("Greeting set successfully!");
} else {
console.error("Failed calling Thread Reference API", response.statusCode, response.statusMessage, body.error);
}
});
}
然后我有另一种方法,以便我保持代码可读:
function setGreetingText() {
var greetingData = {
setting_type: "greeting",
greeting:{
text:"Hi {{user_first_name}}, welcome!"
}
};
createGreetingApi(greetingData);
}
然后在app.listen
中使用此方法,如下所示:
app.listen(app.get('port'), function() {
console.log('Node app is running on port', app.get('port'));
setGreetingText();
});
答案 4 :(得分:0)
所以我想在信使中这是第一条消息。如果您删除邮件并重新开始,则不会触发此操作。在Facebook消息中,您看到它正常工作。