himanago

Azure・C#などのMS系技術やLINE関連技術など、好きな技術について書くブログ

LINE Bot のバックエンドにできる Azure Logic Apps のフローを GitHub のボタンから 1 クリックでデプロイできるようにしてみた

はじめに

Azure Logic Apps はコーディングなしに Azure 内外のサービスと連携できる便利なノーコード・ローコードなサービスですが、Azure 内の情報を参照したり通知を受け取ったりするのに便利なので、自分はよく Logic Apps でちょっとした LINE Bot を作って使ってます。

サービスとの接続が既存のコネクタを使えばすぐなのが便利なんですが、肝心の LINE との接続部分は HTTP のアクションを使って毎回自力で作る必要があって面倒でした。

そこで、ARM template を使ってそこを自動デプロイできるようにしてみたのが今回の話です。

使い方

GitHub に公開していますが、「Deploy to Azure」ボタンを押すとデプロイができる、たまに見かけるやつです。

github.com

f:id:himanago:20211231004821p:plain

ボタンを押すと、LINE Bot 用バックエンドを作成するための Azure Logic App(事前にLINE Messaging API との接続部分のフローが構築済みのもの)をデプロイします。

「Deploy to Azure」ボタンを押して Azure にサインイン後、

  • サブスクリプション
  • リソースグループ
  • リージョン
  • Logic App 名
  • LINE Messaging API のチャネル ID
  • LINE Messaging API のチャネルシークレット

を入力すると選んだサブスクリプション、リソースグループにデプロイされます。

f:id:himanago:20211231021114p:plain

デプロイされたら、フローを編集して Bot に好きなことをさせてあげてください。

テンプレートは、とりあえず便利ツール的な用途で一番使う

  • テキストのオウム返し(リプライ)
  • 友だち全員にメッセージ(ブロードキャスト)

を用意していますが、特にリプライについては他のメッセージ形式(画像や動画、スタンプなど)に対応したものとかを今後増やしたいなと思ってます。

ハンズオンとかにも使えるかなーと思いましたが、かなりのショートカットになってしまうので学習効果としては微妙…??という感じです。

作成されるフローの中身

リプライ

テキストのオウム返し

ユーザーから送られたテキスト内容をそのまま返信するシンプルなオウム返しです(スタンプ・画像等の他のメッセージ形式に対する応答は非対応)。

作成されるフローの中身は Webhook エンドポイントとして使えるよう、Webhook の JSON を POST で受ける「HTTP 要求の受信時」です。

JSON スキーマは、今回はテキストメッセージに対応できる最低限しかいれていません。

f:id:himanago:20211231023024p:plain

続いてチャネル ID、チャネルシークレットをもとにチャネルアクセストークンを取得する処理です。取得したら JSON 解析して後続フローで使えるようにしてます。このあたりは定型処理なので、テンプレート化して置きたい部分の筆頭です。

f:id:himanago:20211231023305p:plain

そのあとはオウム返し。来たテキストをそのまま送り返す処理です。これもよく作ると思います。

f:id:himanago:20211231023405p:plain

最後は応答を 200 で返しています。

f:id:himanago:20211231023903p:plain

ただここはリクエストを受け付けたときに分岐してすぐ 200 を返すようにするのが正しいと思うので、近日中に修正すると思います。

プッシュその他

ブロードキャスト

友だち追加されているユーザー全体へのメッセージ送信を行います。自分専用のお知らせ Bot とかを作るときによく使います。

中身は、「HTTP 要求の受信時」(空の POST リクエスト)から開始して、チャネルアクセストークンを取得。

f:id:himanago:20211231021503p:plain

取得したトークンを使ってブロードキャストメッセージを送信、という流れ。

f:id:himanago:20211231021637p:plain

好きなトリガーに変更したり、送信するメッセージを自由に編集したりして使ってください。Azure のアラートとかにつなげても便利ですね。

おまけ:テンプレートの作り方

今回作ったテンプレート、作成はとっても簡単で、作成済み Logic App の「テンプレートのエクスポート」メニューから ARM Template の JSON をダウンロードできます。

f:id:himanago:20211231022144p:plain

ここから zip がダウンロードでき、その中の template.json がそれです。

今回の チャネルID、チャネルシークレットのような作成時のパラメーターを作りたい場合は

  • エクスポート前に Logic App のデザイナー側でパラメーターを定義する
  • エクスポートされた JSON の先頭部分にも追加したパラメーターを追記する

という作業が必要になります。

ボタンの作り方は README.md の中身 をみてほしいです。

おわりに

Logic App のテンプレートがワンクリックでデプロイできるのは知っていたのですが、実際使ってみるとめちゃくちゃ強力ですね。

一度組んだフローのパターンを使いまわしたいことはわりとあるので、テンプレート化して置いておくと便利だと思います。

GitHub に公開するとみんなが使えるので、便利なフローのパターンがあれば公開するという流れが増えると嬉しいなと思います!