11
votes

There is a way to send my location to facebook-messenger from a mobile client, but how can I send some location from a bot? (messenger platform api)

When I try to send a similar structure from bot, I get an error: (#100) Unsupported attachment type

Is there a way to send my location from bot?

Example of received message to bot:

{
   "object": "page",
   "entry": [{
       "id": "1719442148306048",
       "time": 1466780344978,
       "messaging": [{
           "sender": {"id": "123456789"},
           "recipient": {"id": "987654321"},
           "timestamp": 1466780344847,
           "message": {
               "mid": "mid.12345698875:c80066d69b6cee1779",
               "seq": 65,
               "attachments": [{
                   "title": "Dmitry's Location",
                   "url": "Link to bing.com through facebook redirect"
                   "type": "location",
                   "payload": {"coordinates": {"lat": 55, "long": 37}}
               }]
           }
       }]
   }]
}

I try send message with attachment like this:

               "attachment": {
                   "type": "location",
                   "payload": {"coordinates": {"lat": 55, "long": 37}}
               }
2
Can you show us a minimal reproducible example that represents the way you're sending the message with the location data intact? - gravity
Yes. I edited question. - Dmitry
"attachment" is an array within the JSON. Notice the [ and ] encapsulating all of the data (type, and payload)? Try adding the [] brackets to indicate the start and end of attachment and let us know if that solved it? - gravity
@gravity adding braces in it not working, can't we send location as messenger send to us without explicitly open it as describing below, i've also checked in the facebook docs but they don't have any location type attachment developers.facebook.com/docs/messenger-platform/… - Rishabh Agrawal

2 Answers

24
votes

There is workaround. We can send generic template with static map image and url to dynamic. For iOS native map app we can use address http://maps.apple.com/maps (which redirects all non iOS users to Google Maps with the same parameters). On Android it opens Google Maps app.

{
    "recipient": {"id": "132456"},
    "message": {
        "attachment": {
            "type": "template",
            "payload": {
                "template_type": "generic",
                "elements": {
                    "element": {
                        "title": "Your current location",
                        "image_url": "https:\/\/maps.googleapis.com\/maps\/api\/staticmap?size=764x400&center="+lat+","+long+"&zoom=25&markers="+lat+","+long,
                        "item_url": "http:\/\/maps.apple.com\/maps?q="+lat+","+long+"&z=16"
                    }
                }
            }
        }
    }
}
4
votes

Dmitry, thanks for the hack! FB API has slightly changed, here's what worked for me in the payload section:

    payload = dict()
    payload['type'] = 'template'
    payload['text'] = dict(
        template_type="generic",
        elements=[
            dict(
                title='{venue} location',
                # subtitle='Test',
                image_url="https://maps.googleapis.com/maps/api/staticmap?size=764x400&center=" + lat + "," + long +
                          "&zoom=15&markers=" + lat + "," + long,  
                default_action=dict(
                    type="web_url",
                    url="http://maps.apple.com/maps?q=" + venue + "&ll=" + lat + "," + long +
                        "&z=15"
                )
            )  # buttons=[])
        ]
    )