Logic Apps から Slack に通知する

以前に Bot Framework で Slack の bot を構成するを書きましたが、
今回はこの素因数分解の bot を Logic Apps で作成してみます。
自然数をランダムに生成して素因数分解してその結果を Slack に通知する、
というのを 10 分間隔で実行することにします。

まず、Azure ポータルで Logic App を作成します (手順は初めてのロジック アプリの作成を参照)。
名前は、グローバルに一意である必要はありません。

次に、デザイナーでロジックを追加していきます。
完成したワークフローを先に示します。

 

以下は、各アクションについての説明や注意点です。

(1) 繰り返し (Recurrence)
最初のトリガーとして [繰り返し] を選択し、10 分間隔で実行されるようにしています。

(2) Azure Functions
アクションとして [Azure Functions] を選択すると、同じアカウント内で作成済みの関数を選択できます。
([HTTP] というアクションで URL を指定する方法もあります。)

Logic-Apps-Functions

ここでは、前回の Azure Functions で Web API を作成するで用意した Azure Functions の 2 つの関数を利用します。

(3) データ操作 – JSON の解析
前の関数からは

{ "result": "5439 = 3 ・ 7^2 ・ 37" }

という形式の JSON が返るため、あとで必要になる文字列 (result プロパティの値) を取り出すためにこれを解析します。
[スキーマ] は、この JSON を入力すれば作成されます。

(4) Slack – 投稿メッセージ
投稿先のチャネルとメッセージを指定します。
初回の設定時にはアカウントを認証する必要があります。Logic Apps 上の画面で失敗する場合は、[API 接続] から設定できます。

Logic-Apps-Slack

 

以上で完成です。
下図は Slack のスクリーン ショットです。

Factorization-Slack

 

前回: Azure Functions で Web API を作成する

参照
Flow、Logic Apps、Functions、WebJobs の比較
Logic Apps とは
Azure Functions を使用したロジック アプリのカスタム コードの追加と実行

Bot Framework で Slack の bot を構成する

Azure Functions で Web API を作成する

Azure Functions では、単機能の Web API やバッチを作成することができます。
とくに、Web アプリケーション全体を構築する必要がなく、開発者が管理するのは関数のソースコードのみで済むという利点があります。

Azure Functions で関数を作成するための詳細の手順は Azure Portal で初めての関数を作成するに記載されていますが、
概略は以下の通りです。

  • Function App を作成する
    • この段階では、Web サイトが作成されるのみ
    • Web サイトとして作成されるため、名前はグローバルに一意でなければならない
  • 関数を作成する
    • 一つの Function App に、複数の関数を作成できる
    • シナリオに応じてテンプレートを選択する
    • 言語が C# の場合、関数は、拡張子が「.csx」のファイルで表される
    • このポータル上で、コードの修正とテストができる

Azure-Functions-App  Azure-Functions-Files

 

以下では、Web API を作成するときに選択できるテンプレートについて書いていきます。
Web API を作成するには、「HTTP トリガー」を利用することになります。

Azure-Functions-Templates-API

HTTP トリガーでは、以下のことができます。

  • 利用できる HTTP メソッド (GET, POST など) を指定できる
  • 「Shops/{id:int?}」 のように URL ルーティングを指定できる (パラメーターは Run メソッドの引数になる)
  • 応答の本文は JSON になる。new { message = "Hello." } のようなオブジェクトも指定できる

HTTP トリガーには、以下のテンプレートがあります。

  • HttpTrigger
    • 汎用の HTTP トリガー
  • HttpTriggerWithParameters
    • パラメーターとしてクエリ文字列を利用する場合のテンプレート
    • HTTP メソッドは GET のみ有効
  • GenericWebHook
    • Webhook のテンプレート
    • 規約上は POST で本文に JSON を送るものだが、かまわず通常の HTTP トリガーとしても使えるっぽい

 

例として、簡単な Web API を作ってみます。

こちらはランダムに自然数を生成するもので、入力データを必要としていません。
HttpTrigger テンプレートから作っています。

次は、入力された自然数を素因数分解する関数です。
以前に Bot Framework で Slack の bot を構成するで作成したメソッドを再利用しています。
こちらは GenericWebHook テンプレートから作っており、要求の本文に { "n": 123 } のような JSON が渡される想定です。

本文がテキストの場合は req.Content.ReadAsStringAsync() としてもよいですが、JSON の場合は

dynamic data = await req.Content.ReadAsAsync<object>();

とすればよいでしょう。

また、クエリ文字列からの入力は req.GetQueryNameValuePairs() で読み込むことができます。

 

なお、下図はデータと連携したバッチを作成するときのテンプレートです。

Azure-Functions-Templates-Data

 

次回は、これらの関数を使って Logic Apps で Slack bot を作ってみます。

次回: Logic Apps から Slack に通知する

作成したサンプル
AzureFunctionsSample (GitHub)

参照
Azure Functions の概要
Azure Functions における HTTP と Webhook のバインド

Bot Framework で Slack の bot を構成する

カテゴリー: クラウド. タグ: . 1 Comment »