首页 文章

如何在Facebook Messenger中显示个性化的'Welcome Message'?

提问于
浏览
4

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

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

我的问题:

  • 创建'Welcome message'的步骤是什么?

  • 当用户打开facebook messenger窗口时如何显示'Welcome message'?

我查看了https://developers.facebook.com/docs/messenger-platform文件,我还有问题 .

5 回答

  • 2

    所以你可以使用"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");
           }
    

    我的startsConv()看起来像这样

    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

    你不需要它 . 只需按照以下步骤操作,

    1-转到与您的信使API相关的页面 .

    2-设置(FB页面设置)

    3-从选项卡中选择信息

    4-在底部的消息传递选项卡中,您将看到“显示Messenger问候语”,将其从“否”更改为“是” . 比你可以自定义它;)

    Note: To see your greeting message you should delete your previous conversation with the page that you set greeting message. Then start new conversation with the page you should see greeting message.

  • 1

    从9月12日起,您可以设置在用户点击“开始使用”之前显示的问候语文本,它包含将在文本呈现时替换的这些标记:

    • {}

    • {}

    • {}

    看一下Messenger平台文档的这个页面:https://developers.facebook.com/docs/messenger-platform/thread-settings/greeting-text

  • 6

    此时创建问候语文本并不难 . 我花了一些时间找出如何做到这一点,结果很简单 . 我重构了我在样本中找到的 POST 请求的方法之一,我正在使用 NodeJS 顺便说一句 .

    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);
    }
    

    然后在_1334926中使用此方法,如下所示:

    app.listen(app.get('port'), function() {
    console.log('Node app is running on port', app.get('port'));
    setGreetingText();
    });
    
  • 0

    所以我想在信使中这是第一条消息 . 如果您删除邮件并重新开始,则不会触发此操作 . 在Facebook消息中,您看到它正常工作 .

相关问题