Messenger로 간단한 Bot 만들기 (Facebook Messenger Platform from F8)

f8에서 발표된 Facebook Messenger Platform에서 Bot을 만드는 엔트리.

0. 이게 뭐야? 왜 지금 Bot인가?



Microsoft, line에 이어, 1개월에 3사째의 Bot 참가 축제.
왜 이렇게 Bot이 많은가?
그 이유는 Bot이 앱처럼 3rd Party로서 군웅 할거하는 플랫폼이 될 것이라고 각 회사가 예견하고 있기 때문입니다.
Bot은 사용자와 직접 대화하여 정성적인 평가·리액션을 끌어낼 수 있고, 그것을 데이터로서 모은다.
앱이 너무 많아서 화염 속에서 Bot이 뜨겁다.
올해는 Bot의 해, 가까운 장래에, 앱 엔지니어 대신에 Bot 엔지니어가 최강의 프런트 엔드로서 존재하고 있을 것입니다.

1. 우선 Facebook에서 페이지 만들기



웹사이트 또는 Facebook 페이지를 만드는 필요로.
여기에서 사이트 만들기 → htps : //에서 ゔぇぺぺrs. 후세보오 k. 이 m / 쿠이 cks rts /? p t t rm = u b

2. Webhook 설정



우선 사이트를 만들면 다음과 같은 페이지가 나온다.



왼쪽 탭에서 Messenger 를 클릭하십시오. →Getting Start!



이 페이지가 되기 때문에, Setup Webhooks .

그러면 아래 화면에. 여기에서 url과 토큰을 자유롭게 설정할 수 있습니다.



그렇지만, 어플리케이션이 할 수 없기 때문에, 일단 어플리 작성에.

3. 우선 앱 작성



node.js × express로 빨리 만들었기 때문에 그 흐름.
express 명령이없는 사람은npm install express-generator -gnpm이나 node가 없는 사람은 우선 그쪽을 넣자.
또한, 나는 heroku에서 빨리 움직였습니다. 미리 heroku로 앱을 만들 때
$ cd /your/current/path
$ express yourappname
$ cd yourappname
$ git init
$ heroku git:remote -a yourappname
$ git add .
$ git commit -am "make it better"
$ git push heroku master

4. webhook 설정(2번째)



이전 페이지로 돌아가서 heroku의 도메인과 임의로 토큰을 넣고 팔로우 입력란에서 messages에 체크.
저장,,, 할 수 없습니다! !

쿼리로 보내는 내용 반환! 라고 한다. 그래서 편집.
$ vi routes/index.js
/?hub.mode=subscribe&hub.challenge=<value>&hub.verify_token=<validation-token>에 대한 GET 요청이 온다.
다음과 같이 index.js를 수정했습니다.

routes/index.js
var express = require('express'),
    router = express.Router();

router.get('/', function(req, res, next) {
  if (req.query['hub.verify_token'] === '<validation_token>') {
    res.send(req.query['hub.challenge']);
  }
  res.send('Error, wrong validation token');
});

module.exports = router;

커밋하고 다시 푸시!
페이지로 돌아가서 등록하면, 이번은 등록 완료.

5. 액세스 토큰 발행



등록 후 페이지에서 페이지 설정 버튼을 클릭합니다.
그러면 다음과 같이 액세스 토큰이 발행됩니다.



6. 마지막으로 항례의 앵무새 반환 bot 작성



routes에 딱딱하게 쓰고 있지만.
그리고, docs를 참고로 이하와 같이 쓴, , , 하지만, POST할 수 없는 사건. 전에 만든 fb 앱이기 때문에 API 버전 2.5 시대였기 때문에 설은 개미.
여기에서 앞은 또 나중에 추기하려고 생각합니다.

→request 모듈의 넣어 잊고 있다고 하는 잠자리 실수였습니다. .

routes/index.js
var express = require('express'),
    request = require('request'),
    router = express.Router(),
    token = "<your-access-token>";

function sendTextMessage(sender, text) {
  var messageData = {
    text:text
  }
  request({
    url: 'https://graph.facebook.com/v2.6/me/messages',
    qs: {access_token:token},
    method: 'POST',
    json: {
      recipient: {id:sender},
      message: messageData,
    }
  }, function(error, response, body) {
    if (error) {
      console.log('Error sending message: ', error);
    } else if (response.body.error) {
      console.log('Error: ', response.body.error);
    }
  });
}

router.get('/', function(req, res, next) {
  if (req.query['hub.verify_token'] === '<validation_token>') {
    res.send(req.query['hub.challenge']);
  }
  res.send('Error, wrong validation token');
});

router.post('/', function(req, res, next) {
  var messaging_events = req.body.entry[0].messaging,
      replayMessages = [];
  for (i = 0; i < messaging_events.length; i++) {
    event = req.body.entry[0].messaging[i];
    sender = event.sender.id;
    if (event.message && event.message.text) {
      text = event.message.text;

      // アレコレしたいことをどうぞ
      sendTextMessage(sender, text.substring(0, 200));
    }
  }
  res.sendStatus(200);
});

module.exports = router;

package.json
{
  "name": "<your-app-name>",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.13.2",
    "cookie-parser": "~1.3.5",
    "debug": "~2.2.0",
    "express": "~4.13.1",
    "jade": "~1.11.0",
    "morgan": "~1.6.1",
    "request": "2.71.0", //←ココ
    "serve-favicon": "~2.3.0"
  }
}

좋은 웹페이지 즐겨찾기