페이스북에서 메신저에 채팅봇을 붙일 수 있도록 API를 공개했습니다. 이를 통해서 자신이 원하는 봇서비스를 페이스북을 통해서 쉽게 제공이 가능해졌습니다. 영문 문서를 참고하실 수도 있지만, 한글로 간단하게 정리해 보았습니다. (영문주소: https://developers.facebook.com/docs/messenger-platform/implementation)
먼저 기본적으로 아래의 것들이 준비되어 있어야 합니다.
1. webhook을 받을 수 있는 https 로 시작하는 자신만의 도메인 주소
2. 페이스북의 페이지
2번의 페이스북 페이지 개설은 쉽게 하실 수 있기 때문에 여기서 자세한 이야기는 하지 않겠습니다.
1번은 무료로 구글앱엔진, heroku를 사용해서 만들 수 있고, AWS에 무료로 세팅하여 할 수도 있습니다.
대부분의 경우 여러가지 서비스를 이용하려면 비용을 지불해야 하지만, 간단한 수준에서는 무료로 사용할 수 있습니다. 저는 구글앱엔진을 사용하였습니다.
먼저 페이스북에서 앱을 만들어야 합니다. 앱은 몇 가지 유형이 있는데, 여기서는 www 형태의 앱으로 선택을 했습니다.
앱을 만든 이후에는 앱에 '제품'을 추가해 주어야 합니다.
우측에 보면 'Messenger'라고 있고 '시작하기' 버튼을 눌러 추가해 줍니다.
Messenger가 왼쪽 제품 하단에 추가된 것을 보실 수 있습니다. 그리고 Messenger 설정에 들어가면 우측에 있는 화면이 나오고, 토큰 생성 화면에서 제가 처음에 말씀드린 페이스북에 만든 페이지를 선택해 주면 '페이지 액세스 토큰'이 나옵니다.
이 '페이지 액세스 토큰'은 추후 Webhook을 등록할 때 인증용으로 사용됩니다.
페이지를 추가한 후 Webhooks 설정으로 들어가면 위와 같은 화면이 뜨고, 본인이 받아보고 싶은 필드를 선택하고 (일단 모두 선택) webhook을 받을 콜백 URL을 주소에 넣어주고 '확인 및 저장'을 눌러줍니다.
확인 토큰은 나의 콜백 주소가 호출되었는지를 확인해 주기 위한 것으로 자신이 원하는 것을 넣어주면 됩니다. 여기서는 확인 토큰을 facebook_bot_test_verification_token 이라고 임의로 만들어 주었습니다.
그런데 이렇게 하면 URL 옆에 invalid 하다고 나오면서 제대로 처리가 안됩니다.
저는 콜백 주소를 https://facebook-bot-test.appspot.com/webhook 이라는 주소를 사용했는데, 이 주소가 호출될 때에 위에 적은 확인 토큰 'facebook_bot_test_verification_token'을 검증해 주는 코드가 있어야 합니다.
페이스북에서 제공하는 샘플코드는 node.js로 되어 있는데, 저는 구글앱엔진에서 파이썬으로 개발하고 있어 샘플코드를 아래와 같은 파이썬 코드로 수정해 주어야 합니다.
위와 같은 형태로 코드를 써주면 인증이 되면서 '확인 및 저장' 버튼이 활성화 됩니다.
위와 같이 Webhooks 설정이 완료되면, 다시 왼쪽에 '제품'에 '+ 제품 추가'를 통해서 Webhooks를 추가해 줍니다.
왼쪽 제품에 Webhooks가 추가된 것이 보입니다.
설정이 완료되면 위와 같이 페이지에 가서 메시지를 보내면 답장이 옵니다.
메신저에서 답이 오게 하기 위해서는 webhook을 받아서 처리하는 코드가 필요한데, POST로 넘어오기 때문에 post 함수로 해당 데이터를 받습니다.
받은 recipient ID로 답장을 해야 하기 때문에 JSON 형태로 바꾼 후에 recipient 값을 파싱해서 가져온 후에 본문에 있는 JSON 형태의 msg로 변환 후에 POST로 보내줍니다.
Webhook의 API는 다양하게 있고, 위의 예제는 text에만 적용될 뿐 이미지 등을 보낼 때에는 JSON 형태가 달라지기 때문에 문서를 참고해야 합니다.
written by http://www.facebook.com/tech.evangelist
'코드 이야기' 카테고리의 다른 글
[LeetCode] Letter Combinations of a Phone Number - medium level (0) | 2019.07.22 |
---|---|
[LeetCode] String to Integer (atoi) - medium level (0) | 2019.07.18 |
[LeetCode] Add Two Numbers - medium level (0) | 2019.07.15 |
Thrift Server를 이용하여 PHP로 자바 어플리케이션 사용하기 (0) | 2012.02.17 |
java application에 jetty server embedding하기 (0) | 2012.02.17 |