雑コラBotを作ろう⑤: Azure FunctionsからSlackにメッセージを投稿する

Michaelです。

「雑コラBOT」の作成の過程からAzure Functionsの設定方法を紹介する「雑コラBotを作ろう」の5回目です。
今回は、Azure FunctionsからSlackにメッセージを投稿する関数を作成し、Blob Storageにアップロードされた画像のSAS URLを投稿する仕組みを作ります。

構成

Queue Storageに格納されたメッセージをトリガーに関数を開始し、Blob Storageにアップロードした画像パスからSAS URLを生成して、Slackにメッセージとして投稿します。
投稿されたURLをもとにSlackが自動で画像を読み込み、メッセージに画像が表示されます。

関数の作成

Azure Functionsの関数をJavaScriptで作成します。
関数のテンプレートの一覧から「Queue trigger」を選択してJavaScriptで作成を開始します。

関数の作成ペインで関数名とトリガーバインドを設定します。
キューは画像処理関数でメッセージを出力したキューを指定します。

Slackカスタムインテグレーションの設定

Azure Functionsからメッセージを投稿できるようにSlackの設定をします。
SlackのAppディレクトリから「着信Webフック」を検索し、カスタムインテグレーションに追加します。

「着信Webフック」の設定を開き、メッセージを投稿するチャンネルを設定します。その他の項目は任意で設定をします。
「Webhook URL」は、Azure Functionsからメッセージを投稿する際に使用するため、メモにひかえておきます。

スクリプト

スクリプトは以下のように作成しました。

 

スクリプトの説明

  1. モジュールの読み込み
    処理に必要なパッケージを読み込みます。
  2. Slack着信WebフックのURL設定
    Slackに追加した着信WebフックのURLを設定します。
  3. SASトークン発行関数
    Blob Storageに保存された画像のパスからSASトークンを生成します。
    SASトークン発行に関しては、npm の「azure-storage」というパッケージでもっと簡単に記述できますが、パフォーマンスの観点からBlob Storage APIの使用に沿った関数で実装しています。
  4. HTTPリクエスト関数
    URLにHTTPリクエストする関数です。
    npm の「request」パッケージがNode.jsのHTTPクライアントとして一般的ですが、こちらもパフォーマンスの観点から標準パッケージの「https」でリクエスト用の関数を作成しています。
  5. SAS URLの生成
    SASトークン発行関数でBlobのSAS URLを生成します。
  6. 投稿用メッセージの作成
    Slackの着信Webフックのリクエスト形式に合わせてペイロードを作成します。
  7. HTTPリクエスト
    Slackにメッセージを投稿します。

実行結果

Slackのチャンネルに画像のURLを投稿すると、投稿時刻とほぼ同時に関数のログが表示され、Queue Storageとトリガーにより関数が開始されていることが確認できました。

SlackをみるとBotからメッセージが投稿され、URLの画像と同じ画像が表示されることが確認できました。

まとめ

今回は、Azure FunctionsからSlackにメッセージを投稿する仕組みを作成しました。これで、Slackに対してAzure Functionsから疑似的に画像を投稿する仕組みが出来上がりました。
あとは、顔に好きな画像を貼り付けてコラ画像を作成する仕組みをすれば雑コラBotの完成です。
次回は、画像処理関数にFace APIを付け加えてコラ画像作成に必要な顔検出の仕組みを追加します。

この記事を書いた人

azure-recipe-user