CData Software Blog

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

CData ArcESB を使ってkintone のデータをDeepL で翻訳してSalesforce に連携する

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

国内メンバとの情報共有システムには日本語で。グローバルメンバとの情報共有は英語で、と言語やシステムを分けて使われているお客様から「国内メンバ向けに日本語で入力した内容を、翻訳サービスで翻訳して、グローバルメンバとの情報共有システムに再登録している業務を自動化したい」というご相談を頂きました。こういった業務フローは分野を問わず結構ある話かも知れませんね。一度登録した内容を翻訳・再登録する流れが自動化できれば、利用者としてはある程度翻訳されたデータを対象に仕事を進めるところから注力できます。こういった業務プロセスの自動化にはCData 製品の中でCData ArcESB が最適です。

翻訳サービスと言えば、DeepL が大変強力ですね。私も日頃とてもお世話になっています。DeepL では使いやすい翻訳API が提供されています。

www.deepl.com

この記事では、SaaS をまたぐ業務フローを自動化する一例として、CData ArcESB を使って、kintone のデータをDeepL で翻訳してSalesforce に連携する方法をご紹介します。

DeepL

DeepL は最先端のAI技術で最高レベルの翻訳精度を実現しているサービスです。斬新な人工知能技術を駆使して比類ない翻訳品質を生み出すDeepLは、10億人以上に選ばれています。

www.deepl.com

CData ArcESB とは?

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

www.arcesb.com

この記事のシナリオ

翻訳サービスを利用したい場面は多岐に渡ると思いますが、この記事では「kintone で入力されたTODO を、DeepL で翻訳して、Salesforce のTODO に連携する」シナリオを作成します。

より具体的には「kintone のTo Do アプリで完了になっているTODO を抽出し、TODO の内容をDeepL で英語に翻訳して、Salesforce のTODO に連携する」シナリオを作成します。

必要なものと準備

CData ArcESB は30日間フル機能を利用できるトライアルライセンスが提供されています。ぜひお手元で試してみてください。

製品のインストール等はこちらの記事を参考にしてください。

www.cdatablog.jp

DeepL API 利用準備

DeepL にはフリープランでも利用可能な翻訳API が提供されています。このシナリオではDeepL の翻訳API を利用します。

認証キーの取得

DeepL API を利用するには、事前にDeepL のアカウント登録と認証キーの取得が必要です。アカウント登録やAPI の仕様については、こちらのガイドを参考にしてください。

www.deepl.com

アカウント登録したら、API コールに必要な認証キーを取得します。

kintone To Do

kintone は標準のTo Do アプリを利用しました。以下のようなTo Do が登録してあります。この内、完了になっているTo Do の内容をDeepL で英訳して、Salesforce に連携します。

Salesforce ToDo(Task)

Salesforce のToDo(Task)に連携します。Salesforce にはkintone と同じメールアドレスでユーザーアカウントを設けてあります。

CData ArcESB の基本的な使い方

CData ArcESB の起動方法や基本的なフローの作り方についてはこちらをご覧ください。

www.arcesb.com

www.arcesb.com

それでは実際に連携フローを作成していきます。

kintone で入力されたTODO をDeepL で翻訳してSalesforce のTODO に連携する

基本的な流れとしては「kintone からTo Do を抽出して、DeepL で翻訳し、Salesforce のToDo に登録」というモノですが、kintone 側でTo Do の担当者とされているSalesforce のアカウントを所有者(Owner)としてToDo を登録するには、Salesforce へ登録する際にアカウントのId を適切に指定する必要があります。そのため、Salesforce のT Do に登録する前に、kintone 側でTo Do の担当者とされているメールアドレスをキーにSalesforce のUsers をルックアップして該当するId(アカウントのId)を取得してから、Salesforce のToDo(Task) に登録しています。そのため、この記事のシナリオは少し長めですが、それぞれのコネクタが実施していることはシンプルで、シンプルに設定されたコネクタの組合せで実現することができます。

このシナリオで作成する連携フローは以下のような流れになっています。

  コネクタ 内容
1 CData (kintone Select) kintone のTo Do アプリから完了しているTo Do を抽出(翻訳対象以外の項目は5 以降で利用するためにメッセージヘッダに設定)
2 XML Map1 1 で抽出したTo Do の内容を 3 に翻訳対象としてマッピング
3 REST (DeepL) DeepL の翻訳API を実行
4 JSON 3 のレスポンスをXML 形式に変換
5 Salesforce (Lookup) kintone 側でTo Do の担当者とされているメールアドレスをキーにSalesforce のUsers をルックアップ(Id 取得)
6 XML Map2 5 の内容と 1 で取得してメッセージヘッダに設定してある項目内容を、7 にマッピング
7 Salesforce (Upsert) Salesforce のToDo(Task)に完了済としてUpsert

1. CData (kintone Select)

最初にフローの起点となるCData コネクタ(kintone_Select)を配置し「kintone のTo Doアプリのデータを取得」します。コアカテゴリから「CData コネクタ」を選択し、フローキャンバスへ配置します。

コネクタの設定で、kintone への接続を設定してください。

Action は「Select」。対象テーブルに「To_Do」を選択します。

なお、CData kintone Driver では担当者フィールドは以下のようなjson 文字列として取得できます(Aggregate 項目)。今回のシナリオで欲しいのは code です。今回、担当者フィールド(json 文字列)からcode を取得する時にはCData kintone Driver で提供されているSQL 関数を利用して取得しています。

{ "code": "`担当者として割り当てられたユーザーのメールアドレス`", "name": "`担当者として割り当てられたユーザーの表示名`" }

ここでは担当者フィールドのJSON 部分取得を含め、以下のようなカスタムクエリで完了済のTo Do を取得」します。

SELECT `ToDo名`, JSON_EXTRACT(`担当者 Aggregate`, '$.code') as 担当者メールアドレス, `終了日`, `締切日`, `詳細内容`, FROM `To Do` WHERE `ステータス` = '完了'

変更を保存 でコネクタ設定を保存します。アウトプットタブから受信を実行して、リクエストの成功と取得内容を確認します。

SQL 関数(JSON_EXTRACT)についてはこちらをご覧ください。

cdn.cdata.com

またREST コネクタ(DeepL)を利用してDeepL 翻訳(翻訳API 実行)した後に得られる情報は、翻訳結果のレスポンス(以下のようなスキーマ)となるのですが、その後にkintone 側のTo Do に登録されている担当者(メールアドレス)やTo Do タイトル、締切日などを利用できるように、REST コネクタ(DeepL)より先のコネクタに連携する必要があります。

{
    "translations": [
        {
            "detected_source_language": "JA",
            "text": "`翻訳されたテキスト`"
        }
    ]
}

CData ArcESB ではフローを流れるメッセージ(データの流れ)にはメッセージヘッダ(メタデータ)が付与され、データの流れを追跡できるようになっているのですが、今回はそのメッセージヘッダにこれらの情報を設定し、後続のコネクタで使えるように連携しています。受信後イベントで以下のようなArc Script を設定します。

<arc:set attr="xmlItem.uri" value="[FilePath]" />
<arc:set attr="xmlItem.xpath" value="/Items/To_Do" />
<arc:call op="xmlDOMSearch" in="xmlItem">
    <arc:set attr="_message.header:todo_owner_email"    value="[xpath('担当者メールアドレス')]"/>
    <arc:set attr="_message.header:todo_title"    value="[xpath('ToDo名')]"/>
    <arc:set attr="_message.header:todo_activitydate"    value="[xpath('締切日')]"/>
</arc:call>

CData ArcESB でのメッセージの仕組みは以下のドキュメントも参考にしてください。

cdn.arcesb.com

3. REST (DeepL)

2 の前に、次にDeepL の翻訳API の実行を設定します。コアカテゴリから「REST コネクタ」を選択し、フローキャンバスへ配置します。

メソッドは「POST」。URL にはDeepL の翻訳API のガイドに従って指定します。

https://api-free.deepl.com/v2/translate?auth_key=`事前準備で取得した認証キー`

ボディの種類は「x-www-form-urlencoded」。リクエストパラメータは以下のように設定します。

プロパティ 静的/動的 設定値
auth_key 静的 事前準備で取得した認証キー
source_lang 静的 JA
target_lang 静的 EN-US
text 動的

text を動的項目として設定します。動的項目はインプットされるメッセージファイルから同名項目がマッピングされます。

DeepL のテキスト翻訳API について、詳しくはこちらを参照してください。

www.deepl.com

2. XML Map1

1 で抽出したTo Do の内容を 3 に翻訳対象としてマッピングします。コアカテゴリから「XML Map コネクタ」を選択し、フローキャンバスへ配置します。

1 から2 へ。2 から3 へ、フローをつなぎます。

3 のREST コネクタで動的項目として設定した属性はマッピング対象として検出されます。1 のCData コネクタではカスタムクエリを指定していますので、抽出したデータファイルをサンプルとしてアップロードしてスキーマを指定します。

DeepL で翻訳する対象(text)として、To Do の詳細内容を指定しています。

4. JSON

DeepL からのレスポンスをJSON コネクタでXML に変換します。コアカテゴリから「JSON コネクタ」を選択し、フローキャンバスへ配置します。

シンプルにJSON からXML へ変換するために、プロパティは特に変更せず、デフォルトのままで利用します。

5. Salesforce (Lookup)

このシナリオでは、kintone 側でTo Do の担当者として指定されているメールアドレスのSalesforce ユーザーにTo Do を登録したいのですが、そのためにはSalesforce のTo Do(Task)に所有者(OwnerId)としてメールアドレスに該当するユーザーのSalesforce Id を指定する必要があります。

そのため、Salesforce コネクタのLookup 機能を利用して、kintone から取得したTo Do の担当者(メールアドレス)をキーにSalesforce のユーザー(User)をルックアップ(検索)して、ユーザーの Salesforce Id を取得します。「その他」カテゴリからの「Salesforce コネクタ」を選択し、フローキャンバスへ配置します。

接続Salesforce の接続情報を作成します。ここで作成した接続情報は同じSalesforce 組織に接続するSalesforce コネクタで共有することができます。

アクションを「Lookup」。ルックアップクエリを指定して、ルックアップクエリで取得したデータの宛先をメッセージファイルのXPath で指定します。

ルックアップクエリでは、1. でメッセージヘッダに設定してあるkintone 側のTo Do の担当者(メールアドレス)をキーにId を取得します。

select id from user where username = ${HEADER:todo_owner_email}

ルックアップクエリで取得したデータは、4 でXML に変換したメッセージファイルにownerid 項目として追加します。

/Items/translations/ownerid

Salesforce コネクタのLookup 機能について、詳しくはこちらを参考にしてください。

cdn.arcesb.com

7. Salesforce (Upsert)

次にフローの終点となるSalesforce コネクタを配置し「Salesforce のToDo(Task)へのUpsert を設定」します。「その他」カテゴリからの「Salesforce コネクタ」を選択し、フローキャンバスへ配置します。

接続には先ほど作成した接続情報を選択し、アクションに「Upsert」。対象テーブルに「Task」を選択します。

この記事では、下記のカラムを登録対象として指定します。

カラム
ActivityDate
Description
OwnerId
Status
Subject

6. XML Map2

最後に 5 までに取得・準備したデータを 7 のToDo(Task)へのインプット情報としてマッピングします。コアカテゴリから「XML Map コネクタ」を選択し、フローキャンバスへ配置します。

5 から6 へ。6 から7 へ、フローをつなぎます。

7 のSalesforce コネクタでUpsert 項目として設定したカラムはマッピング対象として検出されます。5 のSalesforce コネクタではXPath を指定して項目を追加していますので、追加された構造のXML ファイルをサンプルとしてアップロードしてスキーマを指定します。

このXML Map コネクタに流れてくるメッセージファイルのメッセージヘッダはこのような内容になっています。処理されてきたコネクタの情報とともに、1 で設定したカスタムメッセージヘッダが設定されています。

以下の内容でマッピングします。

7 のカラム マッピング内容
ActivityDate 1 で取得してメッセージヘッダに設定した締切日 [_message.header:todo_activitydate]
Description text (DeepL で翻訳した詳細内容)
OwnerId ownerid (5 でLookup して取得したId)
Status 'Completed'
Subject 1 で取得してメッセージヘッダに設定したTo Do 名 [_message.header:todo_title]

これで「kintone で入力されたTODO を、DeepL で翻訳して、Salesforce のTODO に連携する」シナリオが出来あがりました。

連携フローの実行と確認

起点となるCData コネクタからフローを実行してみます。アウトプットタブから「受信」を実行します。

フローの終点となるSalesforce コネクタのインプットタブの結果を確認します。実行されていれば成功です。

Salesforce のToDo にDeepL で翻訳された内容が連携されていることが確認できます。

シナリオの自動実行

CData ArcESB ではフローを定期実行するスケジューラ機能を持っています。今回のシナリオであれば、フローの起点となるCData コネクタの「オートメーション」タブで設定することができます。1時間に1度、毎時0分に定期実行する場合は、このように設定します。

この記事で作成したフロー(テンプレート)の入手

この記事で作成したフローについては、こちら からテンプレートとして使える arcflow がダウンロードできます。

ダウンロードしたarcflow は ワークスペースをインポート から登録できます。こちらのテンプレートの内、各コネクタでの接続情報などをお使いの環境に併せて編集して、ぜひ試してみてください。

おわりに

この記事のように数個のコネクタを繋ぎ合わせることで、kintone で入力されたTODO をDeepL で翻訳してSalesforce のTODO に連携する流れを自動化することができました。

CData ArcESB はシンプルで拡張性の高いコアフレームワークに、豊富なMFT・EDI・エンタープライズコネクタを備えたパワフルな製品です。CData Drivers との組み合わせで250を超えるアプリケーションへの連携を実現できます。必要な連携を低価格からはじめられる事も大きな特長です。

皆さんのつなぎたいシナリオでぜひCData ArcESB を試してみてください。

www.arcesb.com

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

www.cdata.com


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