이 주제와 관련하여 많은 의견을 찾았지만 실제로는 그렇지 않습니다. 나는 페이스 북 봇을 만들고있다. 지금 말하면 나는 단지 텍스트를 호출자에게 되풀이하기를 원한다. ec2를 사용하여이 작업 예제가 있습니다. 람다로 이동할 때, 그것은 작동하지 않습니다. 여기 내 코드입니다 : 나는 '테스트'버튼을 누르면 경우람다 핸들러에서 요청 약속을 사용하면 통화를 포기합니다.
exports.handler = (event, context, callback) => {
...
} else if (event.httpMethod == 'POST') {
var data = JSON.parse(event.body);
if (data.object == 'page') {
data.entry.forEach(function(pageEntry) {
// Iterate over each messaging event
pageEntry.messaging.forEach(function(messagingEvent) {
if (messagingEvent.message) {
receivedMessage(messagingEvent);
}
});
});
}
//if I only use callback like the documentation states, gateway always says 502, regardless of the message content in second param, or even using no params
//callback(null, JSON.stringify({"statusCode": 200, "headers": {"content-type":"application.json"}, "body": ""}));
//if i answer using succeed, gateway says 200 ok, bot never gets post
context.succeed({"statusCode": 200, "headers": {"content-type":"application.json"}, "body": ""});
}
function receivedMessage(event) {
var senderID = event.sender.id;
var messageText = message.text;
if (messageText) {
var messageData = {
recipient: {
id: senderID
},
message: {
text: messageText,
metadata: "DEVELOPER_DEFINED_METADATA"
}
};
callSendAPI(messageData);
}
}
function callSendAPI(messageData) {
request({
uri: 'https://graph.facebook.com/v2.8/me/messages',
qs: { access_token: PAGE_ACCESS_TOKEN },
method: 'POST',
json: messageData
}).then(function(body) {
console.log('success');
}).catch(function(err) {
console.error("Failed calling Send API", err);
});
}
나는 그 때는 부분적으로 context.succeed를 이동하려고하지만, 게이트웨이 (502)를 얻을 수 aws 람다 콘솔에서 메신저가 메시지를받습니다. 그것은 약속과 함께 존재하는 것으로 보이지만 그것은 촉발되지 않습니다.
주제에 대한 많은 게시물을 읽고 많은 답변을 시도했지만 성공하지 못했습니다. 나는 다른 사람들이 claudiajs를 사용하여 같은 이슈를 가졌음을 알았으며, 클라우디아 약속이 있건 없건간에.
지금은 ec2로 다시 이동하는 것이 좋습니다. 어떤 도움을 주셔서 감사합니다.
이 설명서에서는 컨텍스트를 설정해야한다고 설명합니다. https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple- proxy-for-lambda-output-format –
API 게이트웨이와의 통합을 위해'context.succeed (...)'결과는 지정된 JSON 형식이어야합니다. 필자가 제공 한 예제 코드에서는'callback (null, res)'보다는 "context.succeed (JSON.stringify ({statusCode : 200, body : res}))"가 될 것이다. –
람다 만 사용하는 경우에도 콜백 솔루션을 원본 코드와 동일한 결과로 사용할 수 있습니다. –