CData Software Blog

クラウド連携のCData Software の技術ブログです。

ArcESB のWebhook コネクタでkintone からのWebhook を受信する

f:id:irokawah:20211123221508p:plain

この記事では、ArcESB のWebhook コネクタでkintone からのWebhook を受信する方法についてご紹介します。

ArcESB とは

ファイル転送(MFT)と SaaS データ連携をノーコードで実現できるデータ連携ツールです。ファイル・データベース・SaaS API、オンプレミスやクラウドにある様々なデータをノーコードでつなぐ事ができます。

www.arcesb.com

Webhook コネクタとは

Webhook とは SaaS 等のWeb アプリケーションで何か特定のイベントが実行された際、外部サービスへHTTP で通知する仕組みです。現在では、多くのSaaS でWebhook の機能が提供されています。

ArcESB のWebhook コネクタを利用すると、外部からのメッセージを受け付ける受信用URL(エンドポイント)を生成することができます。このArcESB の受信用URL(エンドポイント)に向けて、SaaS からメッセージを通知することでSaaS 起動の連携フローをArcESB で実現することができます。SaaS から通知されるメッセージに含まれるリクエストBODY のJSON/XML データを活用した連携フローもノーコードで作成することができるので、SaaS 側でイベントが発生したタイミングでニアタイムに実行したい連携フローがある場合に効果を発揮します。 なお、メッセージの通知をセキュアに実現する必要があるので、Webhook で送信する機能を提供する多くのSaaS では、通知を受ける側(この記事ではArcESB)に対して、HTTPSでの通信(待ち受け)を求めています。

Webhook コネクトの詳しい使い方についてはヘルプもあわせてご覧ください。

cdn.arcesb.com

この記事のシナリオ

この記事では「kintone の顧客リストアプリにWebhook を設定して、顧客レコードが追加されたらArcESB で通知を受信してMySQL へ連携する」シナリオを実現します。

f:id:irokawah:20211123215010p:plain

事前準備

kintone のWebhook からリクエストを受信するためには、kintone からHTTPS でアクセスできる必要があります。ArcESB をkintone から接続できる環境に構成してください。

ArcESB のインストール、SSL/TLS 構成についてはこちらの記事を参考にしてください。この記事で用意した環境では、8080番ポートでArcESB のHTTPS 接続を構成しています。

www.cdatablog.jp

もし検証に利用できるドメインや証明書をお持ちでない方は、こちらの記事も参考にしてください。AWS のサービスだけでArcESB やその他のCData 製品をHTTPS 化して公開することができます。

www.cdatablog.jp

必要な設定と連携フローの作成

シナリオに必要な設定と連携フローを作成していきます。

ArcESB Webhook コネクタの設定

最初にkintone からの通知を受け取るためのWebhook コネクタをフローキャンバスに配置します。

f:id:irokawah:20211123215028p:plain

コネクタをクリックするとコネクタの詳細を設定・確認することができます。Webhook エンドポイント: として生成されたURL と、サンプルリクエストのリクエスト形式をJSON に変更して、サンプルのJSON を手元に控えておきます。

f:id:irokawah:20211123215040p:plain

続いて「ユーザー」タブを開きます。「+追加」ボタンでPOST/PUT 権限を付与したユーザーを作成します。認証トークン:の値はkintone からの通知設定で利用しますので、控えておいてください。「変更を保存」で保存します。

f:id:irokawah:20211123215053p:plain

次に「サーバー」タブを開きます。規定では、localhostからのアクセスのみが許可されています。「+追加」をクリックして、IP アドレス:SaaS(kintone)のIP アドレスを指定します。* であらゆるIP アドレスからの接続を許可することも可能です。

f:id:irokawah:20211123215103p:plain

kintone(cybozu.com)から接続されるIP アドレスは以下のページを参考にしてください。

/general/ja/admin/outbound_ipaddress.html

ArcESB のWebhook コネクタでは認証が必要です。今回のkintone からの通知では、認証情報をURL に埋め込んで通知するようにしますので、「サーバー」タブの高度な設定に含まれるURL の認証トークンを許可を有効にします。これにより、「[Webhook エンドポイント:]として生成されたURL?@authtoken=[認証トークン]」のようにリクエストパラメータに認証トークンを含んだ形でリクエストすることが可能となります。

f:id:irokawah:20211123215300p:plain

Webhook コネクタのテスト(Postman からのテスト)

kintone 側の設定に移る前に、WebAPI 開発ツールのPostman を使って、ここまでの設定でArcESB のWebhook コネクタが正しく受信できるように構成されているかを確認してみます。

www.postman.com

Postman に以下の通り設定してリクエストを送ります。

  • Method : POST
  • URL : 認証トークン付きのWebhook URL([Webhook エンドポイント:]として生成されたURL?@authtoken=認証トークン
  • Body : 設定タブ内のサンプルJSON

f:id:irokawah:20211123215313p:plain

ArcESB のWebhook コネクタの「アウトプット」タブで送ったJSON データが受信できていれば成功です。

f:id:irokawah:20211123215324p:plain

kintone 側の設定

今回のシナリオでは、アプリストアの「顧客リスト」にレコードが追加されたタイミングで追加された顧客情報をWebhook で送信する設定を行います。「アプリの設定」にて「設定」タブ内の「カスタマイズ/サービス連携」から「Webhook」を開きます。

f:id:irokawah:20211123215335p:plain

Webhookの設定画面が開きますので、「+」ボタンをクリックします。

f:id:irokawah:20211123215348p:plain

Webhook URL にリクエストURL(「https://」を除く)をセットします。

  • URL : 認証トークン付きのWebhook URL([Webhook エンドポイント:]として生成されたURL?@authtoken=認証トークン
  • 「通知を送信する条件」に「レコードの追加」をオンにします。「有効化」にチェックがついていることを確認して保存します。

f:id:irokawah:20211123215416p:plain

Webhook が追加されたことを確認して、アプリ設定に戻り、アプリを更新(保存)してください。

f:id:irokawah:20211123215429p:plain

f:id:irokawah:20211123215440p:plain

Webhook の受信確認

それでは、実際にkintone の顧客リストに顧客レコードを追加してWebhook 経由でArcESB が受信できるか確認してみます。

顧客リストに顧客を追加します。

f:id:irokawah:20211123215452p:plain

ArcESB のWebhook コネクタの「アウトプット」タブでレコードが増えていればWebhoook の受信は成功です。

f:id:irokawah:20211123215504p:plain

受信したファイル名をクリックしてkintone から通知されたJSON データを確認してみます。

f:id:irokawah:20211123215547p:plain

以下のようにtype=ADD_RECORDの顧客データが格納されていることを確認できます。

{
    "id": "01ed5a45-9e7e-4443-8c1d-a760f024b584",
    "type": "ADD_RECORD",
    "app": {
        "id": "5",
        "name": "顧客リスト"
    },
    "record": {
        "備考": {
            "type": "MULTI_LINE_TEXT",
            "value": ""
        },

... snip ...

        "部署名": {
            "type": "SINGLE_LINE_TEXT",
            "value": "□□部"
        },
        "担当者名": {
            "type": "SINGLE_LINE_TEXT",
            "value": "△△"
        },
        "メールアドレス": {
            "type": "SINGLE_LINE_TEXT",
            "value": "example@example.com"
        },

... snip ...

    },
    "recordTitle": "〇〇株式会社",
    "url": "https://[********].cybozu.com/k/5/show#record=2"
}

なお、kintone のWebhook 設定画面ではWebhook の呼び出しのログを参照することができます。

f:id:irokawah:20211123215608p:plain

Webhook で受信したJSON データをMySQL に連携する

あとは、Webhook で受信したJSON データをXML に変換して、MySQL へ連携するフローを作成していきます。

MySQL に連携する(MySQL コネクタ)

ArcESB ではフローの起点と終点の設定から開始するのが簡単です。起点となる Webhook コネクタは設定したので、終点となるMySQL コネクタを設定します。MySQL への接続情報をセットして「接続テスト」で確認します。

f:id:irokawah:20211123215626p:plain

MySQL への入力となるので、受信した顧客データを追加する「インプットマッピング」を設定します。今回はシンプルにidをキーに会社名と部署名をUPSERT する設定にしました。

f:id:irokawah:20211123215639p:plain

受信したJSON データをXML に変換(JSON コネクタ)

次に、JSON コネクタで、Webhook で受信したJSON データをXML にフォーマット変換をするための設定をします。コネクタの設定は規定のままで、Webhook コネクタからフローをつないでください。

f:id:irokawah:20211123215652p:plain

変換結果を確認するために、JSON コネクタの「インプット」タブから「ファイルをアップロード」で先ほどWebhook コネクタで取得したJSON ファイルをアップロードします。

f:id:irokawah:20211123220720p:plain

f:id:irokawah:20211123220730p:plain

変換結果を「アウトプット」タブからダウンロードします。

f:id:irokawah:20211123220811p:plain

JSON コネクタにより、先ほどのJSON データが以下のようなXML に変換されます。

<?xml version="1.0" encoding="utf-8"?>
<Items xmlns:json="http://www.arcesb.com/ns/jsonconnector"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <id>01ed5a45-9e7e-4443-8c1d-a760f024b584</id>
    <type>ADD_RECORD</type>
    <app>
        <id>5</id>
        <name>顧客リスト</name>
    </app>
    <record>
        <備考>
            <type>MULTI_LINE_TEXT</type>
            <value />
        </備考>

... snip ...

        <部署名>
            <type>SINGLE_LINE_TEXT</type>
            <value>□□部</value>
        </部署名>
        <担当者名>
            <type>SINGLE_LINE_TEXT</type>
            <value>△△</value>
        </担当者名>
        <メールアドレス>
            <type>SINGLE_LINE_TEXT</type>
            <value>example@example.com</value>
        </メールアドレス>

... snip ...

    </record>
    <recordTitle>〇〇株式会社</recordTitle>
    <url>https://********.cybozu.com/k/5/show#record=2</url>
</Items>

受信したデータをMySQLマッピングする(XMLMap コネクタ)

最後に「XMLMap」コンポーネントで、kintone から受信してJSON から変換したXML ファイルと、MySQL の登録するテーブル情報とのマッピングを作成します。JSON コネクタからXMLMap コネクタ、XMLMap コネクタからMySQL コネクタへとフローをつないでください。つないだらワークスペースを保存してください。これでXMLMap コネクタではMySQL へ連携するフォーマットが認識されます。

f:id:irokawah:20211123215709p:plain

XMLMap コネクタを開き、JSON コネクタで変換されるXML フォーマットを読み込ませます。

f:id:irokawah:20211123215719p:plain

マッピングエディタに、JSON コネクタで変換されるXML フォーマットがソースに。MySQL コネクタへ連携するフォーマットが宛先として表示されます。Id と会社名・部署名をマッピングします。

f:id:irokawah:20211123215731p:plain

これで「kintone の顧客リストにWebhook を設定して、顧客レコードが追加された時にArcESB で通知を受信してMySQL へ連携する」ために必要な手順が完了しました。

シナリオの動作を確認する

あらためてkintone の顧客リストから顧客を追加してみます。

f:id:irokawah:20211123215744p:plain

MySQL コネクタの「インプット」タブでレコードが追加されれば、作成したフローを通してMySQL へデータが届いたことを確認できます。

f:id:irokawah:20211123215754p:plain

実際にMySQL のテーブルをMySQL WorkBench などで確認してみてください。kintone に追加した顧客データが格納されていれば成功です。

f:id:irokawah:20211123215803p:plain

さいごに

kintone からWebhook を受信できるようにするまでの環境設定で少し手間が掛かる部分もありますが、ArcESB でWebhook を受信したり、受信したデータを活用すること自体はとても簡単です。Webhook のような仕組みを利用すると連携の自由度が大きく広がります。是非お試しください。

www.arcesb.com


この記事では ArcESB™ 2021 - 21.0.7964 を利用しています。