如何在facebook Messenger中显示个性化的“欢迎信息”?

时间:2016-06-22 07:07:24

标签: facebook facebook-graph-api facebook-messenger

我想展示'欢迎信息',如'嗨罗伯特,欢迎来到我的申请'。 所以我需要发送:

  1. https://graph.facebook.com/v2.6/USER_ID?fields=first_name,last_name,profile_pic,locale,timezone,gender&access_token=PAGE_ACCESS_TOKEN

  2. 使用第一个请求中的“first_name”,发送“https://graph.facebook.com/v2.6/PAGE_ID/thread_settings?access_token=PAGE_ACCESS_TOKEN”请求以设置“欢迎消息”。

  3. 但是,我需要在第一次请求之前知道user_id。

    我的问题:

    1. 创建“欢迎信息”的步骤是什么?
    2. 当用户打开facebook messenger窗口时,如何显示“欢迎信息”?
    3. 我查看了https://developers.facebook.com/docs/messenger-platform文档,我还有问题。

5 个答案:

答案 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日起,您可以设置在用户点击“开始使用”之前显示的问候语文本,它包含将在文本呈现时替换的这些标记:

  • {{USER_FIRST_NAME}}
  • {{user_last_name}}
  • {{USER_FULL_NAME}}

查看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消息中,您看到它正常工作。