CData Software Blog

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

ArcESB を使ってBカートの会員データをkintone の顧客リストに連携する - Webhook

f:id:irokawah:20220323233347p:plain

こんにちは。CData Software Japanの色川です。

EC サイトと業務アプリの連携シナリオとして「ArcESB を使ってBカートの会員データをkintone の顧客リストに連携する」方法を、こちらでご紹介しましたが、「EC でデータが追加されたタイミングに連動して業務アプリへ連携したい」など「よりニアタイムに連携したいケース」もあるかと思います。

この記事では、B カートでβ 版として提供されているWebhook を利用して「B カートで登録された会員データをArcESB のWebhook コネクタに通知してkintone の顧客リストにニアタイムで連携する方法」についてご紹介します。

B カート とは

B カートは、BtoB の受発注業務をEC 化するクラウドサービスです。BtoB 取引を前提として開発されていて、BtoC 向けのショッピングカートシステムでは対応が難しい複雑な取引条件やシステム要件にも対応しています。SaaS で提供されており、システムのスクラッチ開発・カスタマイズではネックとなる開発コストや納期といったリスクも最小に抑えることができるサービスです。

bcart.jp

この記事の時点で、B カートではWebhook がβ 版として提供されています。この記事では、このWebhook を利用して、B カートで発生した会員登録や変更のイベントをArcESB でニアタイムに受信してkintone へ連携します。

userguide.bcart.jp

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

この記事のシナリオ

この記事では、こちらの記事をベースに「B カートで登録された会員データをArcESB のWebhook コネクタに通知してkintone の顧客リストにニアタイムで連携する」シナリオを作成します。

f:id:irokawah:20220323233418p:plain

事前準備

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

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

www.cdatablog.jp

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

www.cdatablog.jp

環境が準備できたら、まずはこちらの記事のシナリオで連携フローを作成してください。

www.cdatablog.jp

B カートで登録された会員データをArcESB のWebhook コネクタに通知してkintone の顧客リストにニアタイムで連携する

それでは用意した連携フローをWebhook 対応のシナリオに変更していきます。

ArcESB Webhook コネクタの設定

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

f:id:irokawah:20220323233437p:plain

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

f:id:irokawah:20220323233450p:plain

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

f:id:irokawah:20220323233503p:plain

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

f:id:irokawah:20220323233513p:plain

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

f:id:irokawah:20220323233526p:plain

B カートでのWebhook 設定

「外部連携管理」の「Bカート Webhook β版」から「新着Webhook 登録」でWebhook を設定します。

f:id:irokawah:20220323233539p:plain

この記事では以下のように設定します。

項目
Webhook 名 ArcESB 会員連携
Webhook URL <認証トークン付きのWebhook URL>
イベント 会員登録、会員変更
シークレット 任意の文字列
状態 有効

f:id:irokawah:20220323233554p:plain

B カートで会員情報を変更して、ArcESB のWebhook コネクタで受信できていることを確認します。

f:id:irokawah:20220323233628p:plain

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

次にB カートからWebhook 通知で受信したJSON データをXML に変換して、kintone へ連携するフローを作成していきます。

この記事のシナリオでは、前回のシナリオで作成したB カート会員抽出用のCData コネクタは不要ですので削除します。(その代わりにWebhook コネクタでB カートからの通知(登録・更新された会員データ)を受信します)

f:id:irokawah:20220323233640p:plain

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

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

f:id:irokawah:20220323233650p:plain

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

f:id:irokawah:20220323233701p:plain

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

f:id:irokawah:20220323233710p:plain

JSON コネクタにより、先ほど「会員情報の変更」で受信したときのJSON データが以下のようなXML に変換されます。

f:id:irokawah:20220323233723p:plain

<?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">
    <event_id>70420fcc-527a-49e3-b00c-dca48f9127f0</event_id>
    <event_type>customer.updated</event_type>
...
    <retry_count json:type="number">0</retry_count>
    <subscription_id>b983ec49-e13d-498b-9648-5e60c280355d</subscription_id>
    <idempotency_key xsi:nil="true" />
    <data>
        <object>
            <ceo_last_name_kana>ナカヤマ</ceo_last_name_kana>
            <comp_name_kana>カブシキガイシャビケン</comp_name_kana>
            <agent_id xsi:nil="true" />
            <view_group_id xsi:nil="true" />
            <ceo_last_name>中山</ceo_last_name>
            <memo>Webhook テスト</memo>
...
        </object>
        <previous xsi:nil="true" />
    </data>
</Items>

data/previous はB カートWebhook では利用されないため常にNull です。Webhook で通知される会員データの構造については、B カートのユーザーガイドを参考にしてください。

userguide.bcart.jp

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

最後に「XMLMap」コンポーネントで、B カートから受信してJSON から変換したXML ファイルと、kintone へUpsert する情報とのマッピングを作成します。JSON コネクタからXMLMap コネクタへとフローをつないでください。

f:id:irokawah:20220323233917p:plain

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

f:id:irokawah:20220323233926p:plain

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

f:id:irokawah:20220323233942p:plain

マッピングは以下のようにマッピングしています。なお、XML Map では同じ名前を持つ項目は自動的にマッピングが支援されます。

kintone(顧客リスト)の項目 B カート Webhook の会員情報からのマッピング
会社名 CompName
部署名 Department
担当者名 TantoLastName + TantoFirstName *1
郵便番号(数字のみ) Zip *2
TEL(数字のみ) Tel *2
住所 Pref + Address1 + Address2 + Address3 *1
メールアドレス Email
備考 memo

*1 住所や担当者名のように、データ項目同士を文字列連結したい場合、ArcESB では文字列フォーマッタの concat() を利用することができます。

[xpath(data/object/pref) | concat([xpath(data/object/address1)],[xpath(data/object/address2)],[xpath(data/object/address3)])]

*2 郵便番号やTEL のように、データ項目から特定の文字を置き換えたい場合(この場合は"-"を消したい ≒ ""に置き換えたい)、ArcESB では文字列フォーマッタの replace() を利用することができます。

[xpath(data/object/zip) | replace('-', '')]

XML Map で提供される式エディタを使ったマッピング設定は、データ項目やフォーマッタの選択支援機能もありますので、使い始めるのも簡単です。

このシナリオでは比較的シンプルなマッピングをしてみましたが、ArcESB でのデータマッピングや変換について興味のある方はこちらを併せてごらんください。

www.arcesb.com

これで「B カートで登録された会員データをArcESB のWebhook コネクタに通知してkintone の顧客リストにニアタイムで連携する」ために必要な手順が完了しました。

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

B カートの会員を変更します。

f:id:irokawah:20220323234049p:plain

f:id:irokawah:20220323234129p:plain

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

f:id:irokawah:20220323234109p:plain

実際にkintone の顧客リストを確認します。B カートで変更した会員データが連携されていれば成功です。

f:id:irokawah:20220324093258p:plain

会員登録でのイベント連携も確認します。B カートの会員を新規登録します。

f:id:irokawah:20220323234154p:plain

実際にkintone の顧客リストを確認します。B カートで新規登録した会員データが連携されていれば成功です。

f:id:irokawah:20220323234213p:plain

さいごに

Webhook はニアタイムでの連携が可能で使い方によってはとても便利ですが、こちらのガイドにもあるように、CSV インポートやB カートAPI から操作した場合は、Webhook では通知されないので、検討シーンによっては前回の記事のような定期的な連携フローと組み合わせて頂くと良いかも知れません。

userguide.bcart.jp

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

www.arcesb.com

お試しいただく中で何かご不明な点があれば、テクニカルサポートへお気軽にお問い合わせください。

www.cdata.com


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