george's ぶろぐ

LINE Messaging APIを使用したLINE Botの作り方

LINEからMessaging APIが公開されたので、それを利用したLINE BOTを作ってみました。
「ハロー」と送信すると「こんにちは」と返ってくるBotです。とりあえずはじめの一歩ということでシンプルに。
f:id:whippet_818:20170206210029j:plain:w350


f:id:whippet_818:20170206235109p:plain

使ったもの

  • LINE ビジネスアカウント
  • LINE Messaging API
  • Heroku
  • node.js

LINE BOT をつくるにはHTTPS でアクセスできる(SSL が利用できる)サーバーを用意する必要があります。自分で構築するかHerokuを使用するかですが、今回はとりあえず動かしたいだけなのでHeroku を利用しました。
※今後、勉強のためにもAWSのEC2を使用してみる予定です。


作成手順

LINE ビジネスアカウントの登録

https://business.line.me/ja/services/botにアクセスし、自分のLINEのIDでログインします。
ログイン後、画面右下の[Developer Trialを始める]をクリックし、必要な情報を入力します。 f:id:whippet_818:20170206212612j:plain:w600


LINE@ MANAGERの設定

LINE ビジネスアカウントの登録後、LINE@ MANAGER の画面へ遷移すると思うので、
左側のメニューから、アカウント設定 > BOT設定 > 「APIを利用する」ボタンをクリック します。

f:id:whippet_818:20170206213025j:plain:w600

リクエスト設定で Webhook送信を「利用する」にチェックを入れます。


LINE Developersでの設定

先ほどの BOT設定 のページで
ステータス > LINE Developersで設定する のリンクより、LINE Developersのページへ移動します。 そこで表示される値はこの後使用するので、メモしておきましょう。またQRコードから自分が持っているLINEアカウントに友達追加しておきましょう。

f:id:whippet_818:20170206225415j:plain:w600


Webhook URL の設定

LINE Botのイベントをリアルタイムで通知するための仕組みとして、Webhookの設定を行います。

f:id:whippet_818:20170206225427j:plain:w600

[EDIT]にてWebhook URLを設定します。アプリ名は自分で決めたものを入力して下さい。
https://アプリ名.herokuapp.com/webhook


Herokuの設定

今回はHerokuを利用したので、以下にてHeroku上にアプリケーションを作成します。

$ heroku apps:create アプリ名

この時作成されたURLが http://アプリ名.herokuapp.com/という形でWebhook URL と同じURLであることを確認します。
これでLINE側のイベントをサーバ側(Heroku)で受け取ることが可能になります。 あとはリモートのGitリポジトリ等の設定します。Herokuについては、情報はいっぱいあると思うので、ここでは詳細を省きます。


Bot本体のプログラム作成

いろいろ公開されている物を参考にほぼパクらせてもらいました。。 作ったらHerokuへデプロイします。

const LINE_CHANNEL_ACCESS_TOKEN = 'Channl Access Token';

var express = require('express');
var bodyParser = require('body-parser');
var request = require('request');
var app = express();

app.post('/webhook', function(req, res, next){
    res.status(200).end();
    for (var event of req.body.events){
        if (event.type == 'message' && event.message.text == 'ハロー'){
            var headers = {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN
            }
            var body = {
                replyToken: event.replyToken,
                messages: [{
                    type: 'text',
                    text: 'こんにちは'
                }]
            }
            var url = 'https://api.line.me/v2/bot/message/reply';
            request({
                url: url,
                method: 'POST',
                headers: headers,
                body: body,
                json: true
            });
        }
    }
});

body-parser モジュールを使用してbody部からデータを取得します。取得したデータを判定して、条件に一致すれば、request モジュールでメッセージを返信するという単純な仕組みです。データの送受信はJSON形式で行っています。

これをHeroku にデプロイ後、「ハロー」と入力して、会話できることを確認してみましょう。


まとめ

プログラムについてはあまり触れませんでしたが、LINE API Referenceには、丁寧なAPIの説明が記載されているので、参照してみて下さい。
この基本的な「会話」さえできれば、あとは形態素解析自然言語処理などを利用して、いろんなパターンの会話ができそうです。
ネタを考えつつ、今後何か作ってみたいと思います。