前回はAzure FunctionsでSwagger定義を作成してテストするところまで記載しました。今回はSwagger経由でAzure Functionsで作成したAPIをMicrosoft FlowにカスタムAPIとして登録し利用する方法について記載したいと思います。
※この情報は2017年4月26日時点の情報になります。
今回のレシピはSlackに現在時刻を通知するFunctionを作成しSwagger経由でFlowに登録し利用するというものにします。
事前準備
下記の登録が必要です。
Slackの登録とチャンネルの準備
- Slack公式
- Slackの登録方法
- Slackで外部サービス連携 (incoming-webhook)
※外部連携用のURLを取得しておいてください。
Microsoft Flowの登録
※Microsoft FlowのカスタムAPIを利用する場合はoffice365のBusiness Premiumが必要なようです。
Slackに通知するFunctionの作成
Functionを新規に作成します。前回の記事とおじなくC#+HttpTriggerで作成してください。
次に下記のソースをrun.csxに上書きしSlackで取得した外部連携用のURLを記載してください。
using System;
using System.Net;
using System.Net.Http.Headers;
using System.Text;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info("Start");
string url = "Slackの外部サービス連携用URLを記載";
using (var client = new HttpClient())
{
var now = "{\"text\":\"" + DateTime.Now.AddHours(9).ToString("yyyy/MM/dd HH:mm:ss") + "\"}";
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
request.Content = new StringContent($"{now}", Encoding.UTF8, "application/json");
var res = await client.SendAsync(request);
}
log.Info("END");
return null;
}

テスト実行を行ってSlackに現在時刻が表示されれば成功です。

Swaggerの作成
先に認証設定を「Anonymous」に変更します。Functionの「統合」画面を開き承認レベルを「Anonymous」に変更します。これはFlowと連携する時に認証を行わないようにするためです。また、ここでHTTPメソッドの設定をPOSTのみに設定しておきましょう。

認証設定を行ったらFunctionsのAPI definition画面でSwagger定義を生成します。生成したらpathsのpost配下を下記のyamlで置き換えます。
post: operationId: HttpTrigger consumes: - application/json produces: - application/json parameters: [] description: >- Replace with Operation Object #http://swagger.io/specification/#operationObject responses: '200': description: A Greeting x-ms-summary: Your name schema: type: string security: - apikeyQuery: []
今回のFuctionAPIはパラメータが不要なのでパラメータの部分を削除してあります。設定が完了したら「Try this operation」ボタンをクリックしてリクエストテストを実施してみましょう。リクエストが成功してSlackに現在時刻が投稿されていれば成功です。

次にSwagger定義のJSONファイルを取得します。「Export to Power Apps + Flow」ボタンをクリックしてSwagger定義のJSONをダウンロードしてください。「リンクの取得」で取得したURLはブラウザ上で開くとSwaggerのJSONが表示されるのですが、Flow側では何故か認識してくれないのでここではJSONファイルでやり取りします。


JSONファイルをダウンロードしたらFlowに移動をクリックしてFlowを開きます。
※O365の紐づくアカウントでPremium以上でない場合、下記のようなエラー画面が表示されます。

Microsoft FlowにAPIを登録
Flowの画面に繊維するとカスタムAPIの画面に遷移します。右上の「カスタムAPIの作成」をクリックしましょう。

カスタムAPIの 作成画面に遷移したら先ほどダウンロードしたSwaggerファイルをアップロードします。アップロードしたら下部にある続行ボタンをクリックします。
セキュリティ設定画面に遷移します。遷移したら認証タイプを選択します。ここでは認証なしを選択してください。選択したら続行ボタンをクリックします。

詳細情報を登録していきます。概要、説明、操作IDのすべてが必須項目なので入力しましょう。入力が完了したら上部にある「APIの作成」ボタンをクリックします。

APIの作成が完了したらテストを行います。新しい接続をクリックしてAPIの接続を作成します。接続が作成されたらテスト操作ボタンをクリックします。しばらく待つとリクエストの結果が表示されます。このとき成功していればSlack側に通知が届いてるはずなので確認してみてください。

これでカスタムAPIの作成は完了です。
次に作成したカスタムAPIを利用してフローを作成してみましょう。
画面上部にある「マイフロー」をクリックします。マイフローの初期画面が表示されますので「フローを一から作成する」を選択します。

フローのトリガー選択が表示されるのでここではスケジュールを選んでください。

スケジュールの詳細を設定します。頻度と感覚については任意の設定でかまいませんがここでは「分」と「1」を選択肢、1分に一度実行するという設定にしています。設定をしたら「+新しいステップ」からアクションの追加を選択します。

新規アクションの選択で作成したカスタムAPIを利用します。上記の検索ボックスに作成したカスタムAPIの名称を一部入力して検索してみましょう。カスタムAPIが表示されたら選択してアクションとして接続します。

アクションとして接続したら上部の「フローの作成」をクリックします。

しばらくするとフローが作成されるので丈夫の「マイフロー」からフローの一覧を確認しましょう。

フローが作成されているのが確認できます。1分に一度、Slackに現在時刻を投稿する設定になっているのでSlackをかくにんすると1分に一度、現在時刻が投稿されているのが解ると思います。Slackに投稿し続けるてしまうのでうざいと感じた人は下記のオンとなっている部分をオフにすれば投稿はされなくなります。

課題
・Azure Funtions側の認証をFunctionにした時のFlowからの認証方法
今回は認証設定をanonymouseにしているため認証を行わなくてもAPIを実行できるのですが、セキュリティを求められるようなAPIを作成する場合は認証がマストとなるので認証周りをもう少し研究したいと思います。因みに認証設定をFunctionにした場合の連携方法についてどう連携すればいいのかわかってないです・・・。どこかに情報転がってないかしら・・・。
・APIパラメータ
今回のAPIはパラメータが必要のないAPIでしたが、パラメータが必要なAPIを作成するケースも少なくないと思うのでパラメータが必要なAPIの作成について考慮していきたいと思います。
まとめ
Functionsで作成したAPIをFlowで利用する方法を記載しましたがまだまだ理解しきれていないことが多いので今後も研究していきたいと思います。オリジナルのAPIを作成して業務効率を上げれるようにしたい!!
コメント