体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

IBM BluemixとNode.jsでお天気通知! – Facebook Messenger Bot(4) / Facebook Messanger Botをデプロイ

今回作るもの

こんにちは、エンジニアのちゃんとくです。テクニカルライターとしてdotstudioに参加しています。

今回は、2016年に公開された話題のMessenger Platformを使ってFacebook Messenger Botを作りIBM Bluemixにホスティングしてみます。

下記のようにお天気を教えてくれるものを想定しています。

dotstudio-01

BotプログラムはNode.jsで作成し、IBM Bluemixで提供されているWeather Company Dataから天気情報を取得してIBM Bluemixにホスティングし運用します。

下記の構成で手順を紹介します。
IBM Bluemixの設定
Botのベースを作成
天気情報を取得
Facebook Messenger Botをデプロイ

今回は2本目で作成したFacebook Messanger Botのベースと3本目で作成した天気情報取得のプログラムを組み合わせ、いよいよBotのデプロイまでやってみましょう!

筆者の環境

OS X El Capitan(v10.11.6)
Node.js v8.2.1

天気を返すBotプログラムを作成する

app.jsは以下のように変更します。トークンや認証情報はBluemix上の環境変数から取得できるようにしておきます。

‘use strict;’

const express = require(‘express’);
const bodyParser = require(‘body-parser’);
const request = require(‘request’);
const app = express();

// facebookの設定
const my_token = process.env.MY_TOKEN;
const access_token = process.env.ACCESS_TOKEN;

// weather apiの設定
const username = process.env.USERNAME;
const password = process.env.PASSWORD;
const LONGITUDE = ‘35.698353’;
const LATITUDE = ‘139.773114’;
const BASE_PATH = `https://${username}:${password}@twcservice.au-syd.mybluemix.net/api/weather/v1/geocode/${LONGITUDE}/${LATITUDE}/forecast/daily/3day.json?language=ja-JP`;

/**
* 天気データを取得
*/
const getWeatherForecast = () => {
return new Promise((resolve, reject) => {
request({
url: BASE_PATH,
method: ‘GET’
}, (e, res, body) => {
if (!e && res.statusCode == 200) {
resolve(body);
} else {
reject(`Error: ${body}`);
}
});
});
}

/**
* いつの予報を返すか判定
* @param {string} text
* @return {number}
*/
const getForecastDay = (text) => {
const day = {‘今日’: 0, ‘明日’: 1, ‘明後日’: 2, ‘明々後日’: 3};
return day[text];
}

/**
* @param {res} data
* @param {number} day
* @return {string}
*/
const dataToMessage = (res, day) => {
return res.forecasts[day].narrative;
}

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

app.set(‘port’, (process.env.PORT || 3000));

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

app.get(‘/’, (req, res) => {
res.send(‘Hello, Facebook Messenger Bot.’);
});

app.get(‘/webhook’, (req, res) => {
if (req.query[‘hub.verify_token’] === my_token) {
res.send(req.query[‘hub.challenge’]);
}
res.send(‘Error, wrong validation token’);
});

1 2次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。