2016年12月20日火曜日

LogicFlow で LINE Messaging API を利用した BOT を作成する

12/17 の CLR/H で話させてもらったネタのまとめです。単純に受け答えするだけなら、もうコードを書く必要がない時代になっているというのがわかると思います。

アカウントの作成については色々なところで記載されているので割愛。LINE BUSINESS CENTER でアカウントを作成し、Messagin API の有効化と Webhook の有効化を事前に行います。

実際に BOT としてある程度の機能を持たせるためにはいくつかの処理が必要となります。

  • Webhook を受け取り発生したイベントに対応させる
  • 何かしらのメッセージを返却する

メッセージを返却する方法は Reply と Push の二つが用意されています。Reply は受け取ったメッセージに対する返答で、Push は自発的にこちらからメッセージを送付する方法です。

LINE 上でメッセージを受け取る、友達登録されるなどのイベントが発生した場合には、Webhook で特定の URL へ呼び出しを行ってもらうことができます。その際の設定は、

image

アカウントリストの上記から、Messaging API 欄の横にある LINE Developers をクリック。

image

表示されるアカウント情報の下部に、Webhook URL という項目があります。上記のスクリーンショットはすでに設定済みの状態ですが、ここに対して呼び出してほしい URL を設定します。

LogicFlow で呼び出してもらう URL は 要求:HTTP Request コネクタで生成されます。

image

HTTP Request コネクタは一度保存しなければ URL が生成されませんので、トリガを置いた状態で一度保存します。そしてコネクタ下部には、受け取る JSON データのスキーマを定義することができます。これは LINE Messageing API Refernece に記載されているサンプルデータから、スキーマを生成して貼り付けます。スキーマ生成には Jsonschema.net などが便利です。

image

こうすることで、トリガの後の処理で受け取ったデータを指定しやすくなります。

image

スキーマを指定しなかった場合は、受け取ったヘッダーかボディを指定することしかできないので、ここから値を取得するには関数を利用するなどのひと手間が必要になります。こういう違いがありますので、受け取るデータスキーマが明確な場合は、必ず設定しておくといいでしょう。

image

Webhook でメッセージを受け取った場合、その文章は  events という配列の中に設定されています。一度の Webhook 受信で複数メッセージを受け取ったり、複数のイベントを受け取ることがあるためです。LogicFlow 上では、そのような配列内部の値を利用しようとした場合、自動的に ForEach コネクタが設定されます。

image

上記の場面では、配列内部の text の値をセットすると、自動的に ForEach コンテナが配置され、その内部の子コネクタとして構造が調整されています。現在の LogicFlow の仕様制限として、一次元の配列は問題ありませんが、二次元以上の配列を扱おうとした場合には簡単にできないというものがあります。

ForEach コネクタのネストが行えないので、もう一つのループ処理である DoUntil コネクタを利用したり、別の LogicFlow に配列処理部分を切り出すなどの工夫が必要です。

image

今回は受け取ったメッセージをそのままオウム返しするよう、Push Message の仕組みを利用します。返答先となる userId や、受け取ったメッセージの text の指定が、最初に設定したスキーマにより簡略化されているのがわかると思います。

ヘッダー部では、Messaging API へ渡す認証情報の設定が必要です。API Reference にもありますが、Channel Access Token として LINE Developers に記載されていますので、それをまるまるコピーします。Content-Type については application/json である必要があるので、その通りに記載します。

image

ここまでの LogicFlow で、受け取ったメッセージをそのままオウム返しする BOT が作成できてしまいます。まったく一行もコードを書いていないので、今まで難しそうだと思った人でもできるのではないでしょうか。また今回の LogicFlow 作成は Microsoft Flow の無償プランにて実施しています。メールアドレスの登録だけで、どなたでも利用可能です。

image

また、受け取ったメッセージの文言により、返す文言を変更するといった判定も行うのは簡単です。

image

ForEach コネクタの下部に「条件の追加」というリンクがあるので、それをクリックすると上図のように判断を行うコネクタが利用できます。今回は、受け取った文言に「てすとぶろぐ」というのが含まれているかどうか、で処理を分岐させています。

image

判断結果の「はい」「いいえ」でそれぞれ返答するメッセージを HTTP コネクタを利用して POST します。

image

そうすることで、このように簡単に反応を調整することも可能です。複雑な判定を行いたい場合は、別の LogicFlow に切り分けるのが、処理全体で大きくならないでよいのですが、Flow の課金は「LogicFlow の実行回数」に基づきますので、そのあたりはさじ加減とも言えます。

Azure LogicApps や Microsoft Flow の登場で、コードを書く開発者以外でも、API を連携して利用したりする仕組みを作ることが、非常に容易になったと思います。今まで「プログラム書けないから」と断念していたことも、これら LogicFlow を利用することでできるようになることが出てくると思います。何より、無償で試せるしな!

0 件のコメント:

コメントを投稿