3

Facebook の Send API を使用するボットを実装しています。ドキュメントによると、リクエストを使用してファイルを送信することが可能です。ドキュメントには、URL をファイルに送信する方法と、ファイルをアップロードする方法の 2 つの方法が記載されています。これは実装について何も想定したくないオープン ソース ライブラリであるため、ファイルをアップロードして URL を付けたくありません。

ファイルを直接アップロードしたい。ファイルをアップロードするためのドキュメントはcURL、例を使用しており、次のようになります。

curl  \
  -F recipient='{"id":"USER_ID"}' \
  -F message='{"attachment":{"type":"file", "payload":{}}}' \
  -F filedata=@/tmp/receipt.pdf \
  "https://graph.facebook.com/v2.6/me/messages?access_token=PAGE_ACCESS_TOKEN"    

私の現在の見解では、次のようになります。

facebook_message.access_token = configuration.access_token;
var fileReaderStream = fs.createReadStream('./sampleData.json')
var formData = {
                "recipient": JSON.stringify({
                  "id":message.channel
               }),
               "attachment": JSON.stringify({
                  "type":"file", 
                  "payload":{}
               }),
               "filedata": fileReaderStream
               }

request({
         "method": 'POST',
         "json": true,
         "formData": formData,
         "uri": 'https://graph.facebook.com/v2.6/me/messages?access_token=' + configuration.access_token
        },
        function(err, res, body) {
               //***
        });

これを実行すると、次の応答が返されます。

{ 
  message: '(#100) Must send either message or state',
  type: 'OAuthException',
  code: 100,
  error_subcode: 2018015,
  fbtrace_id: '***' 
 }
4

2 に答える 2

2

あなたが受け取っているエラーは、"attachment":{}メッセージと呼ばれるオブジェクトの中にある必要があるためです。facebook send API を使用して、メッセージまたは sender_action オブジェクトを送信する必要があります。

var formData = {
                "recipient": JSON.stringify({
                  "id":message.channel
               }),
               "message": JSON.stringify({
               "attachment": {
                  "type":"file",
                  "payload":{}
              }
          }),
               "filedata": fileReaderStream

               }

この後、Facebook は API 呼び出しを受け入れるはずですが、コードを使用して送信された jpg ファイルを表示できませんでした。おそらくあなたのJSONファイルで動作します

于 2016-11-27T20:51:14.623 に答える
0

公式のサンプル アプリには、URL 経由でファイルをアップロードする機能が含まれています: https://github.com/fbsamples/messenger-platform-samples/blob/master/node/app.js

これは関連する関数です:

function sendFileMessage(recipientId) {
  var messageData = {
    recipient: {
      id: recipientId
    },
    message: {
      attachment: {
        type: "file",
        payload: {
          url: SERVER_URL + "/assets/test.txt"
        }
      }
    }
  };

  callSendAPI(messageData);
}

本当に難しい方法でやりたい場合は、リクエスト モジュールのドキュメントを参照してください: https://www.npmjs.com/package/request#forms セクションに「formData」があるサンプル コードを確認してください。通常のデータ用と思われる「フォーム」を使用しています。

于 2016-11-25T22:01:25.453 に答える