チャットボット「でんぱちゃん」の技術的内容

はいさい。シーサーズ・ラボのイェスタデイです。

以前記事で、AWS(Amazon Web Service)を勉強していると
少し書きましたが、今回LINEのチャットボット作ってみました。

↓ですので友達登録お願いします(*´▽`*)
友だち追加

Twitter(@DemDemFox)の方では、想い的な方面からボット紹介をするつもりなので、
こちらでは技術的なエントリーを書いてみようと思います。
長文です。また、今回勉強しながらの作成なので、
間違いもバグもかなりあると思いますが、何かの参考程度に。

まずチャットボットの目的は
「推しアイドルのTwitterの投稿、画像チェックや、公式ページへのリンク一覧の表示など、
 関連情報をまとめてLINEから確認できる「ナビゲータボット」のようなものを作る。」


構成は↓のような感じです。




作成したプログラムは2つあって、
●関数Aは、Twitterアカウントを監視してデータベースへ内容を登録。
●関数Bは、LINEからの送信内容によって、DB、S3に保存されたデータをもとに返信。
です。

流れは、ほぼ上の図ですべてなので、以下、補足的なこと。
ちなみに関数Aも関数Bも、pythonで作成しました。

〇関数A
5分ごとに特定のTwitterアカウントの投稿を見に行って、
投稿の種類(ツイート、リツイート、リプライ、画像添付の有無など)と
投稿時間などをデータベース(Dynamodb)へ登録しています。
画像のサムネイルは、S3へ保存。

なぜこの作業が必要かは後述します。

〇関数B
LINEからメッセージの送信があった場合に呼び出されて、
リプライを作成、返信します。
リプライの内容は、特定のワードを指定して分岐処理しています。

・最新ツイートの表示
 最新ツイート3件を、カルーセル(画像とテキストとボタンが複数セットになったもの)で返します。
 ツイート内容等は、関数Aによって登録されたデータベース、ストレージから取得しています。
 基本的には、リンクでTwitterページを見ることを主機能と考えています。

・画像ツイートのランダム表示
 過去の画像付きツイート5件をランダムに表示。
 こちらも最新ツイート表示とやっていることはほぼ同じです。
 データベースの登録条件の「画像添付あり」のみをランダムで表示しています。

・公式ページ
 公式ページの名称とURLリンクの一覧をLINE上に表示します。
 公式ページ名称とURLは、一覧表をコード中に直で書いています。
 追加・修正があるので、データベースか外部ファイル記入に修正したいと思ってます。

・こんにちわ
 'えいたそ'の'あいさつ'をランダムで一件表示します。
 当初のコンセプトは、今日の占い、みたいなイメージでしたが、
 挨拶ツイートをランダムで表示する、に落ち着きました。
 挨拶判定は、"おは"、”こんにち”などのワードが入っているかで簡易的に判断しています。

この関数Bの機能は、過去のツイートの中から、"画像添付あり"、"あいさつ"などの
条件に一致するものをフィルタリングする必要があります。
つど、Twitterの投稿を参照してもできなくはないのですが、
時間がかかりますし、TwitterAPIの時間内の使用回数制限がある(検索は15分に450回)ため、
回数制限を超える可能性があります。

そのため、関数Aでデータベースを作成し、このデータベースをフィルタリングして
目的のツイートを特定する、という方法をとっています。

なお、関数Bで指定したワードに何も一致しない場合、
Docomoの雑談APIに送信されたテキストを送信して返信を作成しています。
思った以上に、バカっぽい返事が返ってきます。
まぁ。。。しょうがないです。



いったん以上にします。

サーバプログラムも、データベースも今までやったことなかったので
一つずつさぐりさぐりの作業でした。勉強になりました。
感想としては、AWS、Pythonの使いやすさよ、って感じです。
どちらも情報が充実しているので、ネットでの情報が多くかなり助かります。
先人に感謝。
今回、パワープレイでやった部分もかなりあるとは言え、
サーバプログラム、データベースができたので、WEBサービス何か作れないかな、
と考えています。いずれなにか作ってみたいな。。。