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

如何在facebook messenger中显示个性化的“欢迎信息”?,facebook,facebook-graph-api,facebook-messenger,Facebook,Facebook Graph Api,Facebook Messenger,我想展示“欢迎信息”,比如“嗨,罗伯特,欢迎来到我的申请”。 因此,我需要发送: 使用第一个请求中的“first_name”,发送请求以设置“欢迎消息” 但是,在第一次请求之前,我需要知道用户的id 我的问题是: 创建“欢迎信息”的步骤是什么? 当用户打开facebook messenger窗口时,如何显示“欢迎信息”? 我审阅了文档,但仍然有问题。您不需要它。只需按照以下步骤操作 1-转到与messenger api相关的页面 2-设置FB页面设置 3-从选项卡中选择消息 4-在底部的“消息

我想展示“欢迎信息”,比如“嗨,罗伯特,欢迎来到我的申请”。 因此,我需要发送:

使用第一个请求中的“first_name”,发送请求以设置“欢迎消息”

但是,在第一次请求之前,我需要知道用户的id

我的问题是:

创建“欢迎信息”的步骤是什么? 当用户打开facebook messenger窗口时,如何显示“欢迎信息”?
我审阅了文档,但仍然有问题。

您不需要它。只需按照以下步骤操作

1-转到与messenger api相关的页面

2-设置FB页面设置

3-从选项卡中选择消息

4-在底部的“消息”选项卡中,您将看到“显示消息”问候语,将其从“否”更改为“是”。你可以定制它


注意:要查看您的问候语,您应该删除您在设置问候语页面上的先前对话。然后用你应该看到的问候语页面开始新的对话。

,这样你就可以通过按钮进行对话。只有当用户第一次向bot发送消息时,此按钮才会出现

使用此命令,您可以设置按钮:

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");
       }
app.listen(app.get('port'), function() {
console.log('Node app is running on port', app.get('port'));
setGreetingText();
});
我的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 ? ")
          }
      });
}

从2012年9月起,您可以设置在用户点击开始前显示的问候语文本,其中包括在文本呈现时将被替换的标记:

{{user\u first\u name} {{user\u last\u name} {{user\u full\u name} 查看Messenger平台文档的此页:

所以我猜在messenger中,这是第一条消息。如果删除消息并重新开始,则不会触发此操作。在Facebook的消息中,你可以看到它在工作

此时,创建问候语文本一点也不难。我花了一些时间研究如何做,结果很简单。我为一个POST请求重构了其中一个方法,我在示例中找到了该方法,并且我正在使用NodeJS btw

然后我有另一种方法,只是为了让代码保持可读性:

function setGreetingText() {
var greetingData = {
setting_type: "greeting",
greeting:{
text:"Hi {{user_first_name}}, welcome!"
}
};
createGreetingApi(greetingData);
}
然后你在app中使用这个方法。听下面这个:

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");
       }
app.listen(app.get('port'), function() {
console.log('Node app is running on port', app.get('port'));
setGreetingText();
});

谢谢你的回答,我也尝试过这个选项。但这对我不起作用。我把我的信息和设置“是”显示,并点击“保存按钮”。不幸的是,它没有起作用。也许我错过了一些设置?你的应用程序批准了吗?如果现在没有,那么只有管理员、测试人员和开发人员可以看到该消息。如果您可以这样检查,请在messenger应用程序设置中将朋友添加到您的测试组。信息应该在打开对流窗口后出现。您的说明的第一步完全不清楚您的意思。我在开发者的应用面板中搜索了所有页面。facebook。。。我没有找到问候语的设置:例如,我的页面名是:KayzerSoze-1795503650697564,设置url:只需使用页面用户名更改KayzerSoze-1795503650697564即可。@iBobb它不在应用程序仪表板中,而是在FB页面设置中