2016-11-25 8 views
2

Facebook의 Send API를 사용하는 봇을 구현하고 있습니다. documentation에 따르면 요청을 사용하여 파일을 보낼 수 있습니다. 이 문서는 URL에 파일을 보내고 다른 하나는 파일을 업로드하는 두 가지 방법을 제공합니다. 구현에 대해 아무 것도 생각하지 않으려는 오픈 소스 라이브러리이므로 파일을 업로드하고 URL을 제공하고 싶지 않습니다.npm의 요청을 사용하여 파일을 업로드하지 않고 Facebook Send API로 파일을 보내려면 어떻게해야합니까?

파일을 직접 업로드하고 싶습니다. 파일을 업로드하는 문서는 예를 들어 cURL을 사용하여 다음과 같이 보입니다 :이 프로그램을 실행할 때 내가받은 다음

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) { 
       //*** 
     }); 

:

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

나의 현재 테이크는이 같은 모양해야한다는 것입니다 응답 : 공식 예제 응용 프로그램은 URL을 통해 파일 업로드하는 기능을

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

당신이 질문에 매우 중요한 뭔가를 놓친 것으로 : 정확히 작동하지 않는 무엇입니까? 당신이 그것을 디버깅 했습니까? 콜백에있는 정보는 무엇입니까? 그것은 불리는가? "이것은 내 해결책이지만 작동하지 않습니다"는 stackoverflow에 대해 너무 광범위합니다. – luschn

+0

지금 추가 중입니다. 고맙습니다. –

답변

-2

: 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"와 예제 코드를의를

이는 관련 기능입니다 섹션. 당신은 "양식"을 사용하고 있습니다.이 양식은 정규 데이터 인 것 같습니다.

+0

나는 파일을 업로드하고 싶지 않다고 분명히 말했다. 이 예제 함수를 사용하려면 파일 URL을 가져야합니다. 파일 URL이 없으므로 직접 업로드하려고합니다. –

+0

파일이 서버에 있어야하므로 대신 url을 사용하지 않는 이유는 무엇입니까? 왜 당신은 URL이 없습니까? 나는 그것을 얻지 않는다. – luschn

+0

왜 당신이 downvoted 모르겠, 난 그냥 쉬운 솔루션을 도와주고 싶었어요. 어쨌든 그것은 잘못된 해결책이 아니며, URL과 함께 작동합니다. 어쨌든 사용자는 파일을 가져 오며, 그렇게하지 않는 이유는 무엇입니까? – luschn

2

받은 오류는 "attachment":{}이 message라는 개체 안에 있어야하기 때문에 발생합니다. facebook send API를 사용하여 message 또는 sender_action 객체를 보내야합니다.

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

       } 

귀하의 코드를 사용하여 보낸 jpg 파일을 표시 할 수 없지만 나중에 Facebook에서 API 호출을 수락해야합니다. 아마도 그것은 귀하의 JSON 파일과 함께 작동합니다