はじめまして。GMOアドマーケティングのKKです。
昨年からChatBotが流行っていて、Botを使用したAWARDSも開催されていることから期待感が伺えます。
ただ、自身で実装するのは少し大変です。
そこで、各社が提供しているAPIを使用して簡単なモノであればすぐに実装できる環境が用意されています。
今回は基本的なオウム返しをしてくれるものから、簡単な会話を行えるBotを開発していきます。
前提
Pythonインストール済み
djangoインストール済み
HerokuToolbeltインストール済み
Herokuアカウント取得済み
LINEが提供するサービスでMessaging APIを使用していきます。
同じようなAPIでFacebookが提供しているモノもありますが、LINEの方がドキュメントがわかりやすいので、こちらを採用しました。
Messaging APIの役割
LINE BOT作成には下記が必要
・LINE Businessアカウント + LINEの個人アカウント(Businessアカウント取得のため)
・サーバー
・SSL証明書
とりあえず、無料枠でも使えるDeveloper Trialアカウントで行なっていきます。
ビジネスアカウントをまだ持ってない方はこちら
https://business.line.me/ja/services/bot
この段階で基本設定も終えておくと楽です。
Messaging APIの申込みが完了すると、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プロジェクトを作成します。
1 |
$ django-admin startproject chatbot |
動作するかの確認
1 |
$ pyhton manage.py runserver |
次にDjangoアプリケーションを作成していきます。
1 |
$ python manage.py startapp bot |
構成は下記のようになります(イメージ)
※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で返す)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
REPLY_ENDPOINT = 'https://api.line.me/v2/bot/message/reply' def post_text(reply_token, text): header = { "Content-Type": "application/json", "Authorization": "Bearer {ACCESS_TOKEN}" } payload = { "replyToken":reply_token, "messages":[{ "type":"text", "text": text }] } requests.post(REPLY_ENDPOINT, headers=header, data=json.dumps(payload)) |
Herokuにログイン後デプロイしていきます
1 2 3 4 |
$ heroku login $ heroku create $ git push heroku master $ heroku open |
ブラウザで開いたurlをコピーして、LINE developersにアクセスしてWebhook URLに
https://xxxxxxxxx.herokuapp.com/callback
の形で貼り付けます。
※少し前まではhttps://xxxxxxxxx.herokuapp.com:443/callbackみたいにポート番号まで指定する必要があったんですが、今はいらなくなりました
同ページにあるQRコードを読み込んで、友達追加後、メッセを送ってあげれば反応が帰ってきます
完成(雑談API組み込み済み)
ここに機械学習などを組み込こんでみたり、スクレイピングでリクエストに応じたコンテンツを表示することも可能です。
例えば、ユーザーからのリクエスト(テキスト)を解析して、対話行為のような抽象的な表現に置き換えて、対話行為を推定します。
対話行為を推定するには、属性抽出※を行ったりする必要があります。
※対話行為をカテゴライズし、値を示す
ex)ユーザー:新宿辺りで音楽イベントを探して → SCRAPING(localtion=新宿,event=音楽)
この情報から、音楽イベント情報を提供しているサイトなどからデータを持ってきてその値をレスポンスとして表示する
TIPS
下記の写真のように、CarouselやConfirmのようなオプションも充実しているので、アイデア次第で面白いことができそうです。
まとめ
今回はChatBotを実装する上で、必要な環境の構築と実際に会話が返ってくるサンプルを作成しました。
APIの使用方法にフォーカスしたので、大したものはできていませんが、上記の抜粋コードから取得したリクエストとレスポンスををいかに加工するかが重要項目です。
これからの展望が楽しみなChatBotの紹介でした。