CData Software Blog

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

ArcESB でLINE WORKS のトークをkintone にノーコードで連携 - Webhook

f:id:irokawah:20211128205308p:plain

LINE WORKS のトーク情報については「監査APIを利用して過去のトークログを連携する」シナリオを、こちらでご紹介しました。この記事ではトークをやりとりした時点でkintone へ連携するように、LINE WORKS のトークBot からのCallback メッセージをArcESB で受信してkintone にノーコードで連携する方法をご紹介します。

この記事は LINE WORKS Advent Calendar 2021、7日目の記事です。

qiita.com

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

この記事のシナリオ

この記事では「LINE WORKS のトークBot からのCallback メッセージをArcESB で受信してkintone に連携する」シナリオを実現します。

f:id:irokawah:20211128205327p:plain

処理の流れは以下のようになります。

  • LINE WORKS のトークBot からのCallback をArcESB のWebhook で受信する
  • Webhook で受信したトーク内容を取得する
  • CData(kintone)コネクタで受信したLINE WORKS のトーク内容をkintoneへ登録する

事前準備

製品のインストール

このシナリオを試すには、以下の製品が必要です。いずれも30日の評価ライセンスをご提供していますので、お気軽に試してみてください。

トークBot からのCallback メッセージを受信するためには、LINEWORKS のサーバーからHTTPS でアクセスできる必要があります。ArcESB をインターネットから接続できる環境に構成してください。

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

www.cdatablog.jp

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

www.cdatablog.jp

kintone の構成

今回は、kintone にトーク内容を保存する以下のようなアプリを作成しました。

f:id:irokawah:20211128205340p:plain

フィールド名(項目名) フィールドタイプ
送信者ID 文字列(1行)
トークルームID 文字列(1行)
トークメッセージ 文字列(複数行)
作成日時 作成日時

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

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

ArcESB Webhook コネクタの設定

最初にLINE WORKS からのCallback メッセージを受け取るためのWebhook コネクタをフローキャンバスに配置します。

f:id:irokawah:20211128210650p:plain

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

f:id:irokawah:20211128210702p:plain

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

f:id:irokawah:20211128210713p:plain

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

f:id:irokawah:20211128210723p:plain

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

f:id:irokawah:20211128210735p:plain

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

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

www.postman.com

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

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

f:id:irokawah:20211128210749p:plain

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

f:id:irokawah:20211128210801p:plain

LINE WORKS でのトークBot 作成

次にLINE WORKS 側でトークBot を作成します。

LINE WORKS Developer Console を管理者アカウントで開き、「Bot」から「登録」を選択して「Bot 登録」に進みます。

f:id:irokawah:20211128210814p:plain

Bot 名」「説明」を入力して「Callback URL」を「On」にして [Webhook エンドポイント:]として生成されたURL?@authtoken=認証トークン を設定します。今回は「複数人のトークルームに招待可」として、どのトークルームでもこのBot を利用可能としました。

f:id:irokawah:20211128210826p:plain

管理者アカウントでLINE WORKS Admin 画面を開き、「サービス」「Bot」から「Bot 追加」を選択します。

f:id:irokawah:20211128210837p:plain

作成したBot を選択して「追加」します。

f:id:irokawah:20211128210847p:plain

追加したBot を選択し「公開設定」にして保存します。これでトークBot の準備は完了です。

f:id:irokawah:20211128210858p:plain

Webhook の受信確認

それでは、実際にトークBot を招待したルームでトークして、トークBot からのCallback メッセージをArcESB が受信できるか確認してみます。

LINE WORKSのトークルームに作成したBot を招待して、トークします。

f:id:irokawah:20211128210911p:plain

f:id:irokawah:20211128210922p:plain

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

f:id:irokawah:20211128210932p:plain

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

f:id:irokawah:20211128210943p:plain

以下のように編集したデータが格納されていることを確認できます。

{
    "type": "message",
    "source": {
        "accountId": "demo.taro@******",
        "roomId": "120956074"
    },
    "createdTime": 1638097095916,
    "content": {
        "type": "text",
        "text": "テストメッセージ"
    }
}

LINE WORKS のCallback でのメッセージ受信について、詳しくは(こちら)https://developers.worksmobile.com/jp/document/1005009?lang=jaを参照してください。

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

あとは、トークBot からのCallback メッセージで受信したJSON データをXML に変換して、kintone へ連携するフローを作成していきます。

kintone に連携する(CData(kintone)コネクタ)

ArcESB ではフローの起点と終点の設定から開始するのが簡単です。起点となる Webhook コネクタは設定したので、終点となるCData(kintone)コネクタを設定します。

f:id:irokawah:20211128211011p:plain

コネクタをクリックしてコネクタの詳細を開き、kintone を選択して、kintone への接続と認証を進めてください。

f:id:irokawah:20211128211023p:plain

kintone へデータ入力(インプット)するために、インプットマッピングを設定します。

f:id:irokawah:20211128211034p:plain

このシナリオでは、シンプルに受信したトーク内容をINSERT していきます。

f:id:irokawah:20211128211045p:plain

f:id:irokawah:20211128211055p:plain

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

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

f:id:irokawah:20211128211105p:plain

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

f:id:irokawah:20211128211116p:plain

f:id:irokawah:20211128211125p:plain

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

f:id:irokawah:20211128211136p: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">
    <type>message</type>
    <source>
        <accountId>demo.taro@******</accountId>
        <roomId>120956074</roomId>
    </source>
    <createdTime>1638097095916</createdTime>
    <content>
        <type>text</type>
        <text>テストメッセージ</text>
    </content>
</Items>

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

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

f:id:irokawah:20211128211156p:plain

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

f:id:irokawah:20211128211205p:plain

マッピングエディタに、JSON コネクタで変換されるXML フォーマットがソースに。kintone コネクタへ連携するフォーマットが宛先として表示されます。それぞれの項目をマッピングします。

f:id:irokawah:20211128211216p:plain

これで「LINE WORKS のトークBot からのCallback メッセージをArcESB で受信してkintone に連携する」ために必要な手順が完了しました。

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

トークBot を招待したルームでトークします。

f:id:irokawah:20211128211228p:plain

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

f:id:irokawah:20211128211241p:plain

実際にkintone の情報を確認してみてください。トーク内容が格納されていれば成功です。

f:id:irokawah:20211128211252p:plain

さいごに

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

www.arcesb.com


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