Facebook의 BOT에서 여러 번 같은 응답이 돌아올 때의 대처법
Facebook Messenger의 오류
Facebook Messanger에서 BOT을 개발하기 시작한 화살, 이상한 오류에 오랜 시간이 걸렸다.
이 아래의 이미지가 증거의 이미지이지만, 하나의 메시지의 리퀘스트에 대해서, 일정 시간마다 동일한 응답이 되돌아 버리고 있다.
이 오류를 어떻게 다루는 방법을 공유하고 싶습니다.
작성한 코드
여기가 쓰고 있던 코드의 일부 발췌이다. 겉보기 토큰도 제대로 리퀘스트로 보내져 있거나 하고 확실히 하고 있는 것처럼 보인다.
그러나 위와 같이 여러 번 같은 응답이 돌아왔다.
beforehttp.createServer(function (req, res) {
if (!req.url.match(/\/zip|\/\?hub\.mode/)){
res.statusCode = 404;
res.setHeader('Content-Type', 'text/plain');
res.end('error');
return;
} else if (req.url.match(/\/\?hub\.mode/)){
var param = url.parse(req.url,true);
if (param.query['hub.verify_token'] === '***') {
res.end(param.query['hub.challenge']);
} else {
res.end('Error, wrong validation token');
}
return;
}
if(req.method=='POST') {
var body='';
req.on('data', function (data) {
body +=data;
});
req.on('end',function(){
qs.parse(body);
//決められたテキストや画像や音声を送るメソッド
sendResponse(JSON.parse(body), res);
});
}else if(req.method=='GET') {
res.end('');
}
}).listen(process.env.PORT || 5000);
Facebook 참조를 보면
Stackoverflow 에서 질문해 보았는데, 참조 를 잘 보라라는 말이. (해외 엔지니어의 친절함을 익힙니다)
요컨대, “webhook의 콜백에서는 Facebook으로부터의 응답이 제대로 왔음을 알리기 위해서, 200의 스테이터스 코드를 가지는 응답을 보내야 한다”라고 쓰고 있다.
Response
Your webhook callback should always return a 200 OK HTTP response when invoked by Facebook. Failing to do so may cause your webhook to be unsubscribed by the Messenger Platform.
Facebook으로 보면 언제까지나 제대로 도착했다는 응답이 없기 때문에 같은 메시지가 여러 번 보내지고 있었던 것 같다.
여기가 수정한 코드이다.
afterif(req.method=='POST') {
var body='';
req.on('data', function (data) {
body +=data;
});
req.on('end',function(){
qs.parse(body);
sendResponse(JSON.parse(body), res);
//以下追記したコード
res.statusCode = 200;
res.end('');
});
요약
단 두 줄의 코드가 없기 때문에 약간의 오류가 발생했습니다. BOT 개발에 익숙하지 않기 때문에 조금 당황했다. 곤란하면 레퍼런스로 돌아오는 버릇을 붙여 가려고 재인식했다.
Reference
이 문제에 관하여(Facebook의 BOT에서 여러 번 같은 응답이 돌아올 때의 대처법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kenzo0202/items/dbb1faaf40a3facd9a3b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
여기가 쓰고 있던 코드의 일부 발췌이다. 겉보기 토큰도 제대로 리퀘스트로 보내져 있거나 하고 확실히 하고 있는 것처럼 보인다.
그러나 위와 같이 여러 번 같은 응답이 돌아왔다.
before
http.createServer(function (req, res) {
if (!req.url.match(/\/zip|\/\?hub\.mode/)){
res.statusCode = 404;
res.setHeader('Content-Type', 'text/plain');
res.end('error');
return;
} else if (req.url.match(/\/\?hub\.mode/)){
var param = url.parse(req.url,true);
if (param.query['hub.verify_token'] === '***') {
res.end(param.query['hub.challenge']);
} else {
res.end('Error, wrong validation token');
}
return;
}
if(req.method=='POST') {
var body='';
req.on('data', function (data) {
body +=data;
});
req.on('end',function(){
qs.parse(body);
//決められたテキストや画像や音声を送るメソッド
sendResponse(JSON.parse(body), res);
});
}else if(req.method=='GET') {
res.end('');
}
}).listen(process.env.PORT || 5000);
Facebook 참조를 보면
Stackoverflow 에서 질문해 보았는데, 참조 를 잘 보라라는 말이. (해외 엔지니어의 친절함을 익힙니다)
요컨대, “webhook의 콜백에서는 Facebook으로부터의 응답이 제대로 왔음을 알리기 위해서, 200의 스테이터스 코드를 가지는 응답을 보내야 한다”라고 쓰고 있다.
Response
Your webhook callback should always return a 200 OK HTTP response when invoked by Facebook. Failing to do so may cause your webhook to be unsubscribed by the Messenger Platform.
Facebook으로 보면 언제까지나 제대로 도착했다는 응답이 없기 때문에 같은 메시지가 여러 번 보내지고 있었던 것 같다.
여기가 수정한 코드이다.
afterif(req.method=='POST') {
var body='';
req.on('data', function (data) {
body +=data;
});
req.on('end',function(){
qs.parse(body);
sendResponse(JSON.parse(body), res);
//以下追記したコード
res.statusCode = 200;
res.end('');
});
요약
단 두 줄의 코드가 없기 때문에 약간의 오류가 발생했습니다. BOT 개발에 익숙하지 않기 때문에 조금 당황했다. 곤란하면 레퍼런스로 돌아오는 버릇을 붙여 가려고 재인식했다.
Reference
이 문제에 관하여(Facebook의 BOT에서 여러 번 같은 응답이 돌아올 때의 대처법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kenzo0202/items/dbb1faaf40a3facd9a3b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
if(req.method=='POST') {
var body='';
req.on('data', function (data) {
body +=data;
});
req.on('end',function(){
qs.parse(body);
sendResponse(JSON.parse(body), res);
//以下追記したコード
res.statusCode = 200;
res.end('');
});
단 두 줄의 코드가 없기 때문에 약간의 오류가 발생했습니다. BOT 개발에 익숙하지 않기 때문에 조금 당황했다. 곤란하면 레퍼런스로 돌아오는 버릇을 붙여 가려고 재인식했다.
Reference
이 문제에 관하여(Facebook의 BOT에서 여러 번 같은 응답이 돌아올 때의 대처법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kenzo0202/items/dbb1faaf40a3facd9a3b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)