俺、サービス売って家買うんだ

Swift, Kotlin, Vue.js, 統計, GCP / このペースで作ってればいつか2-3億で売れるのがポっと出来るんじゃなかろうか

FacebookのMessenger PlatformでScreencast必須だと思ったらそうでもなかった話

f:id:ie-kau:20160418150700j:plain:w400


もうね。ホントすいません。。
前々回の記事で、Facebook Messager Platformで遊ぶ程度の場合でもレビュー(Screencast込み)必須だと書いたのですが、今日真面目にシューティングしたらそんなこと全然ありませんでした。。

問題の記事 www.ie-kau.net

Page token is required to start using the APIs. This page token will have all messenger permissions even if your app is not approved to use them yet, though in this case you will be able to message only app admins. You can also generate page tokens for the pages you don't own using Facebook Login.

実際にデベロッパー管理画面のPRODUCT SETTING -> MESSENGERの項目にも「アプリの管理者だったらメッセージ送れる」と書いてあるんですよね。

何がまちがっていたのか

Express 4.xを利用した場合、 「application/json 」でPOSTされたreqをパースするために、body-parserというミドルウェアを利用する必要があるようでした。前回の記事では、それを利用せずに生のreqをのぞきにいってreq.bodyが空と嘆いていたようです。

Express 4.x - API Reference

どうしても、req.bodyが空っぽで、なんでだろうと悩んでいたのですが、どうやらここでFacebook側のレビューが必要なことに気づきました。

私ってホント馬鹿.....

こちらのstack overflowで解決 stackoverflow.com

最終的なデモのコード

const express = require('express');                                                                                                            
const bodyParser = require('body-parser');
const request = require('request');
const app = express();
const jsonParser = bodyParser.json();

app.set('port', (process.env.PORT || 5000));

app.get('/webhook/', (req, res) => {
    if (req.query['hub.verify_token'] === '[verify_token]') {
      res.send(req.query['hub.challenge']);
    }
    res.send('Error, wrong validation token');
  })
  .post('/webhook/', jsonParser, (req, res) => {
    messaging_events = req.body.entry[0].messaging;
    messaging_events.forEach((event)=> {
      sender = event.sender.id;
      if (event.message && event.message.text) {
        text = event.message.text;
        sendTextMessage(sender, 'オラァ!');
      }
    });

    res.sendStatus(200);
  });

const token = '[Page Access Token]';

function sendTextMessage(sender, text) {
  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,
    }
  }, (error, response, body) => {
    if (error) {
      console.log('Error sending message: ', error);
    } else if (response.body.error) {
      console.log('Error: ', response.body.error);
    }
  });
};

app.listen(app.get('port'), () => {
  console.log('Node app is running on port', app.get('port'));
});

とりあえず、何を言っても「オラァ!」と返すオラついたボット完成と。
f:id:ie-kau:20160426002937p:plain

GW中に拡張させます!
(・ω<) オラッオラッ