##BOT概要
LINEmessagingAPIを使った雑談(乱入)用BOTです。
LINE内のすべてのトーク(1:1トーク/グループ/トークルーム)に招待できます。
LINEといえばグループで会話することが多いと思うので、グループ内に招待しておくことで会話が楽しくなるようなBOTを目指して作りました。
もちろん1:1トークでの雑談対話APIを使ったBOTとの会話も可能です。
##主な機能
- 雑談
- 乱入 & 地図表示
特定の言葉の場合には反応し、世界地図で場所を教えてくれます。
ちなみに地図をタッチするとgoogle mapが開きます。
##乱入について
基本的には某宇宙海賊様のネタの場合に反応します。
また、世界の首都の座標データをASTI アマノ技研様のページよりお借りいたしました。
これにより約200の国名に近い言葉がメッセージ内に入っていた場合に容赦なく乱入可能になりました。
念のため日本の都道府県も対象にしました。
まだ検知率が低いので、今後なにか増やすかもしれません。
##モード
- サイレントモード
- トークモード
グループおよびトークルーム内にBOTを招待するとモードの切り替えができます。
モード名をそのままメッセージとして送信することでモード切替が行えます。
サイレントモードでは乱入検知のみを行い、雑談対話を行いません。
普段と変わらない会話の中に突然乱入されたい時に最適です。
グループやトークルームに招待した時の初期設定はこのサイレントモードです。
トークモードではメッセージに対して雑談対話APIを通して全レスします。
1:1トークの場合は常にトークモードになっています。
##雑談対話時の口調
- デフォルトキャラ
- 関西弁キャラ
- 赤ちゃんキャラ
雑談対話時のBOTの口調を変更できます。
この機能は後述の外部APIが提供している機能になります。
モードと口調は1:1トーク時のメニューからも変更出来ます。
##しりとり
雑談対話時に「しりとり」もしくは「しりとりしよう」というメッセージを送信するとしりとりモードになるようです。
この機能も雑談対話APIが提供している機能です。
##使用API
- NTT docomo 雑談対話API
- Google Static Maps
##問題点
- 雑談対話APIが返したメッセージも乱入チェックしているので、雑談対話APIが変な単語を覚えてしまうと無限ループっぽくなる仕様。
- 「タイ」「マリ」「滋賀」「三重」「奈良」などの文字数が少ないもののヒット率が高い
- グループおよびトークルーム内でBOT以外の入室があった場合にjoinイベントが飛んでくる(?)(確認中)
##その他、技術的なこととか
サーバはさくらのレンタルサーバを使っています。
基本的な構成はphpとnode.jsです。
メッセージイベント
↓
mecabで形態素解析してカタカナに変換
↓
正規表現で国名にマッチするかチェック
↓
マッチしたらnode.jsから指定時間後に返信するように指示
↓
マッチしなかったらそのままphpで返信
という流れです。
時間差でメッセージを送りたいがためだけにnode.jsを使いました。
node.js側ではsqlite3でリクエストを保存しながらsettimeoutで指定時間後にpostリクエストを返しています。
作り方が甘く、たまにメモリ不足(?)で落ちているときがあって、メッセージの順番が前後するときがあります。
もっといい方法があればどなたか教えてください。
また、Push APIは普通に使うと高額なため、このBOTはBot Award中の無料期間が終われば削除する予定です。
###雑感
LINEmessagingAPIはグループおよびトークルーム内のメンバーの情報やグループ内に何人いるとかグループ名とかが取得できないのが辛かった。
この辺が改善されればゲームなんかが作りやすくなりそう。
あと、1:1トーク画面じゃないとメニューが出てこないっていう仕様も辛い。
メニューを押してもメッセージ送信とかURL開くとかしか出来ないのでそこまで問題にならないのだけれど、せっかくPostback eventが実装されたのだからメニューとかImagemapからも使わせて欲しかった。
##最後に
ネタ的なBOTなので怒られそうな場合には即刻削除します。