2016-06-24 1 views
9

Il existe un moyen d'envoyer mon emplacement à facebook-messenger à partir d'un client mobile, mais comment puis-je envoyer un emplacement depuis un robot? (Plate-forme messager api)Comment envoyer l'emplacement depuis la plateforme Facebook Messenger?

Lorsque je tente d'envoyer une structure similaire de bot, je reçois une erreur: (#100) Unsupported attachment type

Est-il possible d'envoyer ma position de bot?

Exemple de message reçu au 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}} 
       }] 
      } 
     }] 
    }] 
} 

J'essaie d'envoyer un message avec pièce jointe comme ceci:

   "attachment": { 
        "type": "location", 
        "payload": {"coordinates": {"lat": 55, "long": 37}} 
       } 
+1

Pouvez-vous nous montrer un [mcve] qui représente la façon dont vous envoyez le message avec les données de localisation intactes? – gravity

+1

Oui. J'ai édité la question. – Dmitry

+0

'" attachment "' est un tableau dans le JSON. Notez le '[' 'et'] 'encapsulant toutes les données (' type', et 'payload')? Essayez d'ajouter les parenthèses '[]' pour indiquer le début et la fin de 'attachment 'et dites-nous si cela a résolu le problème? – gravity

Répondre

19

Il y a solution de contournement. Nous pouvons envoyer le modèle générique avec l'image statique de carte et l'URL à dynamique. Pour l'application cartographique native iOS, nous pouvons utiliser l'adresse http://maps.apple.com/maps (qui redirige tous les utilisateurs non iOS vers Google Maps avec les mêmes paramètres). Sur Android, il ouvre l'application Google Maps.

{ 
    "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" 
        } 
       } 
      } 
     } 
    } 
} 
2

Dmitry, merci pour le hack! FB API a légèrement changé, voici ce qui a fonctionné pour moi dans la section payload:

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=[]) 
     ] 
    ) 
+0

merci .. pour ceux qui recherchent des exemples de Java, il existe un open source java sdk pour facebook api, qui est nommé comme restfb. Et dans restfb, vous pouvez utiliser l'objet GenericItemPayload, qui peut contenir des bulles. Et chaque bulle peut contenir-image_url, item_url et le titre. –