2016-05-09 15 views
4

Facebook Messenger APIを使用して画像の形式で添付ファイルを受信するにはどうすればよいですか? 文書には、テキストベースのメッセージの受信方法に関する指示のみが記載されています。Facebook Messengerボットで画像を受信する方法

+0

こんにちは、ようこそ。 [こちらを読んでください](http://stackoverflow.com/help/mcve)を確認し、質問を改善してください。他の人がそれを理解しやすくするのに役立ちます。 –

+0

https://developers.facebook.com/docs/messenger-platform/webhook-reference#received_messageには、添付ファイル付きのメッセージのJSONデータ構造の例があります。 – CBroe

答えて

6

ボットのコードに使用している言語はわかりませんが、メッセンジャーコードスニペットのほとんどがnode.jsにあるFacebookのドキュメントを参照しているからです。 これは役に立ちます。

app.post('/webhook/', function (req, res) { 
//Getting the mesagess 
var messaging_events = req.body.entry[0].messaging; 
    //Looping through all the messaging events 
    for (var i = 0; i < messaging_events.length; i++) { 
    var event = req.body.entry[0].messaging[i]; 
    //Checking for attachments 
    if (event.message.attachments) { 
    //Checking if there are any image attachments 
    if(atts[0].type === "image"){ 
    var imageURL = atts[0].payload.url; 
    console.log(imageURL); 
    } 
    } 
    }  
} 
+1

FYIこの回答が古くなったかどうかはわかりません。私はClaudiaJSを使ってfacebookボットを作っています。バックエンドはlambda/api gatewayです。今私にとって、イメージを含むものは 'request.message.attachments [0] .payload.url'です。 – SMT

0

https://developers.facebook.com/docs/messenger-platform/implementation#receive_message

このリンクをチェックしてください。

それは、 "メッセージに画像、ビデオ、または音声の添付ファイルがある可能性があります。

UPDATE:Facebookは最近、多くの内容が不足していると変なふうにダウングレード版で彼らのドキュメンテーションを更新して

上記のリンクが壊れています。

{ 
     "mid": "some mid", 
     "seq": 26, 
     "attachments": [{ 
      "type": "image", 
      "payload": { 
       "url": "some image url" 
      } 
     }] 
    } 

、あなたは多分あなたのサーバーに画像をダウンロードするダウンロード機能を作成することができますコメントで指摘したように、ユーザーが要求を送信すると、サーバーは、このようなJSONを受け取ることになります、詳しく説明し

上記のように、このデータを使用するには、webhookを使用できます。

app.post('/webhook', function (req, res) { 
    var data = req.body; 
    // Make sure this is a page subscription 
    if (data.object == 'page') { 
     console.log(data.entry); 
     // Iterate over each entry 
     // There may be multiple if batched 
     data.entry.forEach(function(pageEntry) { 
     var pageID = pageEntry.id; 
     var timeOfEvent = pageEntry.time; 

     // Iterate over each messaging event 
     pageEntry.messaging.forEach(function(messagingEvent) { 
      receivedMessage(messagingEvent); 
     }); 
     }); 

     // Assume all went well. 
     // 
     // You must send back a 200, within 20 seconds, to let us know you've 
     // successfully received the callback. Otherwise, the request will time out. 
     res.sendStatus(200); 
    } 
    }); 


    function receivedMessage(event) { 
    var senderID = event.sender.id; 
    var recipientID = event.recipient.id; 
    var timeOfMessage = event.timestamp; 
    var message = event.message; 

    if (senderID == PAGE_ID) { 
     console.error("Sender is self."); 
     return; 
    } 

    console.log("Received message for user %d and page %d at %d with message:", 
     senderID, recipientID, timeOfMessage); 
    console.log(JSON.stringify(message)); 

    var messageId = message.mid; 

    // You may get a text or attachment but not both 
    var messageText = message.text; 
    var messageAttachments = message.attachments; 

    if (messageText) { 

     // If we receive a text message, check to see if it matches any special 
     // keywords and send back the corresponding example. Otherwise, just echo 
     // the text we received. 


    } else if (messageAttachments) { 
     messageAttachments.forEach(function(messageAttachment) { 
     var attachmentUrl = messageAttachment.payload.url; 
     console.log("Received Attachment"); 
     download(attachmentUrl); 
    } 
    } 

このコードはFacebookのサンプルコードから取得したものです。

1

2017年2月、私は同じ問題を遭遇し、これを取得して、非常に長い時間稼働させるために苦労しました。実際の添付ファイルがオブジェクト内にある場合、message.attachmentsがオブジェクトとして提供されることがわかります。

構造はこのように書き:

添付ファイル> JSONレスポンス> &ペイロードを入力オブジェクト> URL

app.post('/webhook/', function(req, res) { 

    let messaging_events = req.body.entry[0].messaging 

    for (let i = 0; i < messaging_events.length; i++) { 
    let event = req.body.entry[0].messaging[i] 
    let sender = event.sender.id 

    // Check if it's a message 
    if (event.message) { 

     //Create the attachment 
     let attachment = event.message.attachments 

     // Here we access the JSON as object 
     let object1 = attachment[0]; 

     //Here we access the payload property 
     let payload = object1.payload; 

     // Finally we access the URL 
     let url = payload.url; 

     console.log(url) 
    }   
    else if (event.message && event.message.text) { 
     // Here you can handle the text 
     console.log("Just Text") 
    } 

    }   
    res.sendStatus(200) 
}) 

説明せずに、よりコンパクトなバージョンは、次のようになります。

if (event.message) { 
    let attachment = event.message.attachments 
    console.log(attachment[0].payload.url) 
    } 

追加ボーナスとして、タイプが画像かどうかを確認することもできます。あなたは、この調整を行うこと追加していることを達成することができます

if (event.message &&) { 
    let attachment = event.message.attachments[0] 
    if (attachment.type === "image") { 
     console.log(attachment.payload.url) 
    } 
    } 

を希望Pythonで自分のFacebookのチャットボットの画像添付ファイルを受信して​​保存することが、これは、 ジュリアン

1

を支援作品:

@app.route('/', methods=['POST']) 
def webhook(): # endpoint for processing incoming messaging events 

data = request.get_json() 

if data["object"] == "page": 

    for entry in data["entry"]: 
     for messaging_event in entry["messaging"]: 
      if messaging_event["message"].get("attachments"): 
       attachment_link = messaging_event["message"]["attachments"][0]["payload"]["url"] 
       print("Image received, boss!") 
       print(attachment_link) 

良いチャットボットのこと!PHPで マルコ

0

ボットへのユーザーsentsそれは、レスポンスの下に我々は添付ファイルtypeurl

{ 
    "object": "page", 
    "entry": [ 
    { 
     "id": "000000000000000", 
     "time": 1511956708068, 
     "messaging": [ 
     { 
      "sender": { 
      "id": "000000000000000" 
      }, 
      "recipient": { 
      "id": "000000000000000" 
      }, 
      "timestamp": 1511956707862, 
      "message": { 
      "mid": "mid.$xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
      "seq": 42172, 
      "sticker_id": 369239263222822, 
      "attachments": [ 
       { 
       "type": "image", 
       "payload": { 
        "url": "https:\/\/scontent.xx.fbcdn.net\/v\/t39.1997-6\/851557_369239266556155_759568595_n.png?_nc_ad=z-m&_nc_cid=0&oh=9058fb52f628d0a6ab92f85ea310db0a&oe=5A9DAADC", 
        "sticker_id": 369239263222822 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    ] 
} 

が含まれている取得するとこれは、ユーザーからのメッセージの異なる種類を取得する方法であります

//get the response from user 
$input  = json_decode(file_get_contents('php://input'), true); 

//first check if attachment is present 
$attachment = array_key_exists('attachments', $input['entry'][0]['messaging'][0]['message']); 

//get the attachement type and url 
$type  = $input['entry'][0]['messaging'][0]['message']['attachments'][0]['type']; 
$file_url = $input['entry'][0]['messaging'][0]['message']['attachments'][0]['payload']['url']; 

希望すると、

関連する問題