Office 365 で一般提供が開始されたサービスとして、PowerApps や Microsoft Flow というサービスがあります。中でも Microsoft Flow は、Microsoft 版 IFTTT、または、 Zapier とも呼ばれることもある通り、Office 365 や様々なサービスとのデータ連携などを実現できるサービスです。

例えば、「とある Web サイトの RSS を監視しておき、RSS が更新されたらその情報を Yammer へ投稿する」といった連携を、ノンコーディングで実現し自動化することができます。

Microsoft Flow で連携可能なサービスとして用意されているものは、Office 365 を含め 81 個(2016 年 12 月時点)と数多くあるものの、日本のユーザーであれば連携したいと思うような kintone や backlog などの国産サービスは用意されていません。

しかしながらこうしたサービスであっても、Microsoft Flow から HTTP リクエストを送る機能を使い、REST API などを利用することで連携が可能になるものがあります。今回は、kintone の REST API を利用した連携を作成してみたいと思います。

さっそく作成してみる

今回作成するフローは、「スマホの Flow アプリでボタンが押される」動作をトリガーに、「kintone へ緯度経度を登録」し、さらには、「kintone に作成されたレコードの URL をスマホの Flow アプリへ通知」するまでのフローです。Flow アプリのボタンを利用することにしたのは、Flow アプリの最近のアップデートで追加された機能なので、「こりゃ使ってみるっきゃない!」と思ったのでした。

Flow button トリガーを追加する

新規フローの作成画面を開き、検索窓で「Flow button」と入力すると出てくる「Flow button for mobile – Manually trigger a flow」トリガーを追加します。このトリガーは「スマホの Flow アプリでボタンが押される」動作を検知します。実行時には、こうしたトリガーで指定した動作が検知されると、自動的にフローが開始され、アクションが順次実行されていきます。今回の Flow button トリガーは、設定項目はありませんので追加するだけでした。

HTTP アクションを追加する

次に「新しいステップ」をクリックし、先ほどと同様に「HTTP」アクションを検索し追加します。このアクションを利用して「kintone へ緯度経度を登録」する動作を設定していきます。

HTTP アクションでは、「方法(GET とか PUT とか POST とか)」や「URI」、「ヘッダー」、「本文」を指定できることがわかります。ここで、kintone の REST API リファレンスを見てみます。

REST API の共通仕様 – cybozu developer network
https://cybozudev.zendesk.com/hc/ja/articles/201941754

レコードの登録(POST) – cybozu developer network
https://cybozudev.zendesk.com/hc/ja/articles/202166160

Microsoft Flow から REST API を呼び出すためには、kintone アプリ毎に作成できる「API トークン」を利用する方法がお手軽で良さそうです。この API トークンは、リクエストのヘッダーに「X-Cybozu-API-Token」として含めるようです。また、レコードを登録するには、指定された URI に対して 、アプリに応じた指定された  JSON フォーマットで値をボディ(本文)に含めて送ると良さそうなことがわかりました。

API トークンの作成はこちらの手順を参考にし、事前に kintone 側で作成しておきます。

API トークンを作成する | kintone ユーザーヘルプ
https://help.cybozu.com/ja/k/user/api_token.html

こうした情報を基に、次のように設定しました。

Push notification アクションを追加する

最後に、再び「新しいステップ」をクリックし、スマホの Flow アプリへの通知するための「Push notification – Send a push notification」を追加します。このアクションを利用して「kintone に作成されたレコードの URL をスマホの Flow アプリへ通知」します。

Push notification アクションでは、「Text」、「Link」、「Link label」を設定できることがわかります。ここでのポイントは、Link に設定する「kintone へ追加されたレコードの URL」をどうやって作成するか?という点です。

先ほどの HTTP アクションで実行した REST API では、API リファレンスによると、レスポンスとして「id」 と「revision」が  JSON で返ってくるようです。また、kintone に登録されたレコード個別の URL は、https://…./show#record=<id> となっているようなので、レスポンスで返ってきている「id」の値を使うことで目的の URL を作成できそうです。

こうした情報を基に、次のように設定しました。

ここで見慣れない文字列が出てきましたが、これは「Workflow Definition Language」と呼ばれるものです。Microsoft Flow では、Azure Logic Apps でも利用可能ないくつかの関数などが利用可能になっています。

Workflow Definition Language
https://docs.microsoft.com/en-us/rest/api/logic/definition-language

今回のように「Content-Type: application/json」を指定した HTTP アクションの返り値は、Microsoft Flow 内部では JSON オブジェクトとして扱われているようなので、値を取り出すためのパスを先ほどのように記述することで簡単に扱うことができます。

ここまでの設定で完成したフローは、下図のような流れになっています。

保存し実行してみる

スマホの Flow アプリを起動して「ボタン」を開くと、作成したフロー名が書かれたボタンが表示されています。まずは、これをタップします。

すると、kintone 側にレコードが登録されます。

と、ほぼ同時に Flow アプリに通知が届きました。一般のアプリと同じように通知が届き、タップすると Flow アプリが起動し詳細を見ることができます。

さいごに

このように、Microsoft Flow を利用することで、Office 365 を含む様々なサービスとの連携を簡単に作成できる可能性が見えてきました。すでに Microsoft Flow で用意されているサービスを組合わせるのも良し、今回のように REST API を利用し、それ以外のサービスや、独自に作成した Web アプリと連携するのも良しです。

今年の 9 月末に米国アトランタで開催された Microsoft Ignite 2016 でも、PowerApps や Microsoft Flow のセッションは超満員で、セッション会場に参加者が入りきらずに急遽サテライト会場が用意されるほどの大盛り上がりでした。今後は国内でも注目度が上がっていくのではないでしょうか?業務でも利用できる、フローをいろいろと考えてみたいですね。