因此,您可以使用"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 ? ")
}
});
}