概要
平成も終わろうというのに、初めて LINE bot を作りました。
Slack bot であれば過去に作ったことがあったのですが、それが逆に先入観を生んでしまい、いくつかつまづいたポイントがあったので、それをメモします。逆に、LINE bot の作り方的なことは書きません。
つまづきポイント
bot は非公開にできない
Slack bot はワークスペースに閉じた形で bot を開発できます。その bot を使えるのはそのワークスペースの参加者だけです。それゆえに、社内システムのデプロイなどのセンシティブな機能を bot に持たせることが気軽にできました。
一方、LINE bot は非公開にはできません。bot の ID や友達追加リンクが知られてしまえば、誰でも bot とやりとりできてしまいます。センシティブな機能を実装したい場合は、話者が誰なのかを bot アプリ上で判定して、あらかじめ決められた人の発言にしか反応しないようなプログラムにする必要があります。
逆にいうと、LINE bot は特別なプロセスを経なくても広くいろいろな人に使ってもらうことができます。Slack bot を一般公開したい場合は、App Directory に登録申請を出し、レビューを受ける必要があります。
Webhook をインターネットに公開する必要がある
Slack には Real Time Messaging (RTM) API というものがあり、これを使うことで bot アプリサーバーをグローバルに公開せずに bot を動かすことができます(bot アプリと Slack が websocket で通信する)。一方、LINE bot を作る際は Webhook をインターネットに公開する必要があります。
とはいえ、外部から Webhook を叩いて動かすには適切な署名をリクエストヘッダーに含める必要がある(シークレットさえ漏れなければ第三者がそれを行うのは不可能)ので、Webhook 自体が外部露出していることの危険性はそこまで高くないと言えそうです。また、RTM のような仕組みがある方がレアケースな気もするので、LINE を責める意図は全くありません。念のため。
1つのトークグループに bot は1つまで
LINE bot はグループトークに参加させることもできるのですが、参加できる bot は1つだけです。複数 bot を招待しようとすると、1つが強制退出されてしまうらしいです (参考: https://www.nowsprinting.com/entry/2016/10/02/043410) 。
そのため、1つの bot には小さな機能を持たせて、bot を複数ウヨウヨさせるような戦略はとることができません。やりたいことがたくさんある場合、1つの巨大な bot を開発する必要があります。
bot にメンションを飛ばせない
LINE は Slack と違い、bot に向けて @ボット名
のような形でメンションが飛ばせません(2018/10/24 現在)。そのため、Slack bot でよくある「とりあえずメンションを飛ばしたら反応する、でいいか」という雑な仕様決定ができません。
- bot の機能をトリガーするためのキーワードを独自に決める
- 自然言語解析からの文脈判断を頑張る
といったアプローチが必要になります。
前述した「1つのトークグループに bot は1つまで」という特徴もそうなのですが、LINE bot は1対1で会話するもの、という前提で設計されているような気がしています。開発する際もそういったメンタルモデルで臨む必要がありそうです。