新しいことにはウェルカム

[技術] [電子工作] [ガジェット] [ゲーム] のメモ書き

Office365にアクセスできる、なんちゃってAPIをノンコーディングで作ってみる




Office365にはMicrosoft Graph APIというAPIが提供されていて、それを使えばOffice365にアクセスすることができます。

ただ、トークンを自分で取得する必要があったり、APIの使い方を覚える必要があったりしてちょっと手間です。

そこで、Office365のFlowを使って、ノンコーディングで、なんちゃってOffice365 APIを作る方法を紹介します。

Office365 Flowとは

Office365 Flowとは、マイクロソフト版 IFTTT のようなものです。色んなサービスをGUIでつなげていき、タスクパイプラインを作ることができます。

例)Outlookからメールを送信するAPIを作ってみる

Flow作成

Office365の左上の格子状のメニューから「Flow」を選択して、新規で一からFlowを作成します。

API受けの作成

最初にFlowの実行トリガーを設定するのですが、「HTTPによるアクセス」をトリガーにすることにより、APIを作成します。

[組み込み]-[要求]-[HTTP 要求の受信時]でトリガーを作成します。 f:id:kwbtblog:20181206010202p:plain

Flowを保存するとURLが発行され、「HTTP POST の URL」に記載されます。

そのURLにアクセスすると、それをトリガーにFlowが実行されるようになるので、それを使ってAPIを作ります。


パラメータの設定

URL呼び出し時にJSONでパラメータを渡すことができ、どんなパラメータが渡されるかを「要求本文のJSONスキーマ」で定義します。

今回はメールを送るので「to」「title」「message」を設定できるようにします。

また、URLは誰でも叩けてしまうので、「token」も送るようにして、その値をチェックして合っていた時だけメールを送信するようにします。

「サンプルのペイロードを使用してスキーマを生成する」を押して、下記のような送るJSONのサンプルを入力します。 f:id:kwbtblog:20181206010653p:plain

すると、よしなにJSONスキーマを作成してくれます。 f:id:kwbtblog:20181206010704p:plain

トークンチェック

誰でもAPIが実行されてしまわないように、トークンをチェックするようにします。

[制御]-[条件]アクションを追加します。

「値を選択」をクリックすると、先程登録したJSONパラメータが候補にでてくるので「token」を選択し、正解のトークン値を入力して比較するようにします。

条件設定中

f:id:kwbtblog:20181206011134p:plain

条件設定済

f:id:kwbtblog:20181206011208p:plain  

メール送信

先程設定した「条件」が「はい」の場合に、[Office365 Outlook]-[メールの送信]アクションを登録します。

「宛先」「件名」「本文」にJSONパラメータの「to」「title」「message」を設定します。

f:id:kwbtblog:20181206011719p:plain

APIの応答の設定

「メール送信」アクションの後に[要求]-[応答]アクションを登録します。

ここで設定した内容が、APIの応答として、APIの呼び出し元に送られます。

今回はAPIっぽくJSONを返したいので、「本文」に下記のようなJSONを書きます。

f:id:kwbtblog:20181206011828p:plain

以上で完成です。

全体の流れは下記のようになります。

トークンが間違っていた場合の応答を作成しても構いません。特に作成しなかった場合は、Flowが代わりに502エラーを返してくれます。

f:id:kwbtblog:20181206012547p:plain

Flowを保存するとURLが確定するので、そのURLに「POST」でアクセスし、JSONでパラメータを送るとFlowが実行されます。

呼び出し例

import axios from 'axios';

(async ()=>{
    const url = 'Flowで生成されたURL';
    const json = {
        token: 'aaaa',
        to:'test@test.test.test.com',
        title:'テストメール',
        message:'テストメール本文'
    };

    const res = await axios.post(url, json); 
    
    // APIからの応答「{"result":"success", "to":…}」が表示される
    console.log(res.data);
})();

応用・拡張

例ではOffice365にアクションを起こさせるAPIでしたが、応答の本文にはFlowのパイプライン実行過程で取得したデータを入れることもできるので、「最新の未読メールを取得する」といった、Office365からデータを取得するAPIを作成することも可能です。

Flowで接続できるサービスは、最近のマイクロソフトらしく、Office365だけでなく、Slack・Dropbox・Googleなど外部サービスも色々対応しているので、それらを操作するAPIを作ることもできます。

また、Flowの中からURLを叩くこともできるので、コネクターが用意されていないサービスと接続することも可能です。