Facebook Messenger Chatbot如何收集他们发送的用户地理位置?

时间:2016-05-17 13:20:33

标签: facebook facebook-php-sdk facebook-messenger

在Facebook Messenger中,有一个图标允许用户发送他们的地理坐标。

Location Sent through Facebook Messenger

这是否可以在Facebook Messenger平台上使用,即如果用户向我发送他们的位置,我的Chatbot是否可以访问它?如果是这样,它是如何完成的,因为我无法在webhook的响应中看到它。

3 个答案:

答案 0 :(得分:21)

您在邮件中将该位置作为附件获取。见下面的示例:

{ mid: 'mid.1463464074086:96b149e1a047e47842',
  seq: 2076,
  attachments: 
    [ { title: 'Anupam\'s Location',
   url: 'https://www.facebook.com/l.php?u=https%3A%2F%2Fwww.bing.com%2Fmaps%2Fdefault.aspx%3Fv%3D2%26pc%3DFACEBK%26mid%3D8100%26where1%3D19.120002%252C%2B72.863715%26FORM%3DFBKPL1%26mkt%3Den-US&h=AAQH523sr&s=1&enc=AZNmEBjv3zHHm0_dYnEIC6j7EDsJNt8PZRZZyaXbIZ6VzjPsQUOOaMIPGtXFH17CevUiNK0_K594CgDQHAMQSru7uS_jjbkxojBWNwBnncqzaw',
   type: 'location',
   payload: [Object] } ] }

从有效负载中,您可以使用以下方式访问纬度和经度

lat = event.message.attachments[0].payload.coordinates.lat
lng = event.message.attachments[0].payload.coordinates.long

答案 1 :(得分:1)

是的,该位置将作为附件发送到邮件中。如果您参考facebook messenger平台文档中给出的示例代码,则可以按如下方式进行修复....(请参阅此处的完整代码https://developers.facebook.com/docs/messenger-platform/quickstart

中的

else if (messageAttachments) {

              console.log(messageAttachments[0].payload.coordinates.lat); //gives you lat

              console.log(messageAttachments[0].payload.coordinates.long); // gives you long
           }

答案 2 :(得分:0)

目前有一个关于获取某些用户位置的错误。

当我的用户在facebook-messenger-bot中分享他们的位置时;

虽然我可以获得用户的位置,如下面的响应;

    { mid: 'mid.1463464074086:96b149e1a047e47842',
      seq: 2076,
      attachments: 
        [ { title: 'Fatih\'s Location',
       url: 'https://www.facebook.com/l.php?u=https%3A%2F%2Fwww.bing.com%2Fmaps%..',
       type: 'location',
       payload: [Object] 
    } ] }

但无法获得其他一些用户的位置,如下面的响应;

   { 
    { mid: 'mid.$cAAD53Ka90kBmfY23q1gTEdy6rrmW', seq: 19104}
   }

Facebook小组仍然在处理这个错误,如果你想浏览这个链接: https://developers.facebook.com/bugs/160926314660178/