Facebook Messsenger,如何处理发送的位置

Facebook Messsenger, how to handle sent location

本文关键字:位置 处理 Messsenger 何处理 Facebook      更新时间:2023-09-26

根据本指南,它向我们描述了如何发送消息和处理按钮文本等。

但是,当用户向机器人发送其geolocation时,我的 webhook 接收它如下:

{ sender: { id: 99999999999999},
  recipient: { id: 99999999999999 },
  timestamp: 99999999999,
  message:
    { mid: 'mid.9999999:999999999',
      seq: 231,
      attachments: [ [Object] ] } }

位置作为数组中的某种对象发送到 webhook attachments

在我的代码中,我尝试像这样获取它们:

event.message.attachments[0].longitude
event.message.attachments[0].latitude

我得到undefined.

如何获取用户发送的位置的经度和纬度?文档中没有对此进行描述。

更新

经过一番尝试,我能够获得它的所有属性。当用户发送他们的位置时,我在这个结构中得到它:

{url: https://www.facebook.com/l.php?u=https%3A%2F%2Fwww.bing.com%2Fmaps%2Fdefault.aspx%3Fv%3D2%26pc%3DFACEBK%26mid%3D8100%26where1%3D43.230507%252C%2B76.945031%26FORM%3DFBKPL1%26mkt%3Den-US&h=vAQHe08Kz&s=1&enc=AZPRe3VQFnThq3_jdPFg8R4WWUZxWJA1XjbVvVua4fD0PNpt2u26hvS-noUEU55qQNC6Wm9hNGwpGntrUgu1nx7KsSIKRbGQyKEXueAImV3Kyg}

它是巨大的网址。如果您通过浏览器打开此链接,它将打开 Bing 地图并显示此位置。

很难

处理这些数据。它强制用户编写自己的解析器。

纬度和经度在 URL 中:

。其中1%3D 43.230507%252C%2B76.945031%26FORM...

因此,一种方法是将URL转换为文本,然后解析此文本以获取Lat和Long。

更新现在,可以从附件 JSON 直接访问 lat 和 lng:

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