Messaging APIを使ったLINE Botでアイドル顔画像管理

先日の LINE DEVELOPER DAY 2016 で発表された Messaging API

LINE Developers - Messaging API - Overview

Template Messageという、Botインタラクティブなやりとりができるタイプのメッセージがあり、

https://devdocs.line.me/ja/#template-message

LINE 6.7.0以降の対応ということで iOS版はなかなか使えなかったけど、昨日ついにそれがリリースされ 自分のiPhoneでも使えるようになったので、それを使った自分用Botを作ってみた。

www.youtube.com

Template Message とは

ドキュメントに書いてある通りだけど、"Buttons", "Confirm", "Carousel"という3つのテンプレートが用意されていて、そこに画像URLやActionを指定することで 普通のテキストや画像のみのメッセージとは違う、ちょっとリッチなメッセージを送ることが出来る。

"Confirm"は確認のalertダイアログのようなもの、"Buttons"は画像とテキストを組み合わせたものを表示し、その下に複数のActionボタンを配置できる。"Carousel"はその"Buttons"と同等のものをさらに横に連ねてスクロールで操作できる。

ボタン押下の際のActionには"Postback", "Message", "URI"の3つがあり。"URI"は指定したリンクを開くもの、"Message"は指定されたテキストを発言するもの、そして"Postback"はBot用のPostback Eventを送信するだけ(同時にテキストを送信することもできるけど)、というもの。

入力インタフェースの変化

どういうことかと言うと、自分で何かメッセージを送らなくても その「ボタンを押す」という操作だけでBotに任意の情報を通知できる、ということ。

従来のChat botって、大抵はテキストのメッセージを「コマンド」として利用して、例えばユーザからある文字列を入力された場合だけ(Bot側でそれを正規表現とか使ったif文やswitch文で判別して)指定された動作を行う、という感じだったと思うのだけど そういうのをPostbackを使うとイベント通知で置き換えることが出来るようになるわけで。

ユーザが「(テキストなどの)入力を行う」のではなく「ボタンを押す」という操作だけでBotに対して命令や情報を送ることが出来るようになる、というのがとても便利で面白い。Botとのやり取りをするインタフェースが大きく変わるぞ〜 と思った。

アンケートを取る、とか ユーザに何か選択させるようなものは格段にやりやすくなったんじゃないでしょうか(選択肢が多い場合は厳しいだろうけど)。

個人ツールへの応用

memo.sugyan.com

とか

qiita.com

とか でも書いているけど、いま個人の趣味でやっているアイドル顔画像のデータ収集では、手動でラベル付けするのがあまりにも大変なので、最近はラベル付け済みのデータを使って一通りモデルを学習させて そのモデルに未知の顔画像を推論してもらってそれを確認する、という作業を続けていて。

そのへんもずっと自作のWebアプリを使ってぽちぽちとやっていたのだけど、スマホからだと微妙に操作しづらく、もうちょっと見易く簡単に出来ないかなぁと思っていたところに ちょうど良くLINE Botのインタフェースが使えそうだったので、作ってみた次第。Web操作を代替するための、( 基本的に)自分だけがやり取りするBot

既存のWebアプリにJSON APIとtoken認証の仕組みを加えて、あとはBot用のWebアプリをherokuで動かして繋ぎ込むだけで出来た。

  • 推論結果を取得し、Carouselで同時に5つ表示
    • 情報源となっているURIを開くButton
    • 推論が合っている場合の承認Button
  • 承認ButtonからPostbackを受け取り更新処理
    • 更新結果をConfirmで通知
      • 更新の確認できるURIを開くButton
      • 間違っていた場合の取り消し処理(実装していないので何もしない)

という感じ。

冒頭のデモ動画の通り、起動のトリガーとして任意のテキストメッセージを受け取ったら作動、にしているけど(これは定時Pushとかにしても良いはず) それ以降は自分でメッセージを送信したりすることなく、ボタン操作のみで確認、更新などの作業ができている。 Chat logとして時系列で操作記録も残るし便利!

https://github.com/sugyan/face-manager-linebot

Bot SDK

公式からSDKも提供されているので簡単に作れました。

今回のは諸事情でGoで作ったけど、本日Python版もリリースされたので、例えばTensorFlowで機械学習させたものを動かしつつLINE Botに組み込んで インタラクティブに分類や生成を試したり、とかも出来そうで 夢が拡がりますね!