LINE BOTを試してみる

はじめまして。GMOアドマーケティングのKKです。

昨年からChatBotが流行っていて、Botを使用したAWARDSも開催されていることから期待感が伺えます。
ただ、自身で実装するのは少し大変です。
そこで、各社が提供しているAPIを使用して簡単なモノであればすぐに実装できる環境が用意されています。

今回は基本的なオウム返しをしてくれるものから、簡単な会話を行えるBotを開発していきます。

前提

Pythonインストール済み
djangoインストール済み
HerokuToolbeltインストール済み
Herokuアカウント取得済み

LINEが提供するサービスでMessaging APIを使用していきます。
同じようなAPIでFacebookが提供しているモノもありますが、LINEの方がドキュメントがわかりやすいので、こちらを採用しました。

Messaging APIの役割

msgapi-figure1

LINE BOT作成には下記が必要
・LINE Businessアカウント + LINEの個人アカウント(Businessアカウント取得のため)
・サーバー
・SSL証明書

とりあえず、無料枠でも使えるDeveloper Trialアカウントで行なっていきます。
ビジネスアカウントをまだ持ってない方はこちら
https://business.line.me/ja/services/bot
この段階で基本設定も終えておくと楽です。

Messaging APIの申込みが完了すると、LINE@MANAGERへアクセスできます

LINE MANAGER

Message APIは多様な言語(php,python,goなど)に対応していますが、今回はpythonを使っていきます。理由としては、chatbotは自然言語処理などと相性がいいので、そういった処理が得意なライブラリがpythonは豊富なためです。

Pythonのみでwebアプリケーションを作成するのは少し大変なので、フレームワークであるDjangoを使用していきます。
Pythonは3系、Djangoは1.10.5の環境で構築しています。

サーバーも自身で用意するのは面倒なので、デフォルトでhttps通信が可能なHerokuを使用していきます。
「LINE BOT API の呼び出しにはServer IP Whitelistに接続元IPの指定が必要」だったのですが、Optionalになったので、下記の設定はいらなくなりました。

アドオン(Fixie)を追加して対応してあげます。
$ heroku addons:create fixie:tricycle

まず、最初に任意のディレクトリにDjangoプロジェクトを作成します。

動作するかの確認

次にDjangoアプリケーションを作成していきます。

構成は下記のようになります(イメージ)
※requirements.txt(Herokuに必要)などは適宜追加してください
.
├── LICENSE.txt
├── Procfile
├── README.md
├── chatbot
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py
├── bot
│   ├── __init__.py
│   ├── __pycache__
│   ├── create_answer.py
│   ├── migrations
│   │   ├── __init__.py
│   │   └── __pycache__
│   └── views.py
├── db.sqlite3
├── django.log
├── manage.py
├── requirements.txt
└── runtime.txt

以下のコードはメッセージをオウム返しにします。
※雑談APIなどを使うと会話が行えます(引数のtextをAPIで返す)

Herokuにログイン後デプロイしていきます

ブラウザで開いたurlをコピーして、LINE developersにアクセスしてWebhook URLに
https://xxxxxxxxx.herokuapp.com/callback
の形で貼り付けます。
※少し前まではhttps://xxxxxxxxx.herokuapp.com:443/callbackみたいにポート番号まで指定する必要があったんですが、今はいらなくなりました
同ページにあるQRコードを読み込んで、友達追加後、メッセを送ってあげれば反応が帰ってきます

完成(雑談API組み込み済み)

screenshot_20170217-163024_720

ここに機械学習などを組み込こんでみたり、スクレイピングでリクエストに応じたコンテンツを表示することも可能です。
例えば、ユーザーからのリクエスト(テキスト)を解析して、対話行為のような抽象的な表現に置き換えて、対話行為を推定します。
対話行為を推定するには、属性抽出※を行ったりする必要があります。
※対話行為をカテゴライズし、値を示す
ex)ユーザー:新宿辺りで音楽イベントを探して → SCRAPING(localtion=新宿,event=音楽)
この情報から、音楽イベント情報を提供しているサイトなどからデータを持ってきてその値をレスポンスとして表示する

flow-chart

TIPS
下記の写真のように、CarouselやConfirmのようなオプションも充実しているので、アイデア次第で面白いことができそうです。

msgapi-figure3

まとめ
今回はChatBotを実装する上で、必要な環境の構築と実際に会話が返ってくるサンプルを作成しました。
APIの使用方法にフォーカスしたので、大したものはできていませんが、上記の抜粋コードから取得したリクエストとレスポンスををいかに加工するかが重要項目です。
これからの展望が楽しみなChatBotの紹介でした。