cybozu developer network

カテゴリー内の他の記事

マルケトとkintoneを連携してみよう

2020年8月改訂のセキュアコーディング ガイドラインに抵触する内容が含まれています。認証情報が漏洩した場合の影響を考慮して慎重に検討してください。
該当箇所:JavaScriptプログラムの34-38行目

Index

はじめに

標準機能だけを使用してkintoneをMAツールとして用いることは難しいです。

そこで今回は、強力なMAツールであるマルケトと連携する方法をご紹介します。

マルケトとは

公式サイトをご確認ください。

https://jp.marketo.com

完成イメージ

kintone-001.png

 

今回のシナリオでは上図の②と④のカスタマイズ方法をご紹介します。

マルケトに新規顧客が登録されたことをトリガーとして、kintoneへレコードを追加します。
また、kintoneからマルケトのリード更新は、kintoneアプリ詳細画面にボタンを設置して行います。

事前準備

kintone

kintoneアプリストアから「案件管理」のアプリを作成してください。
※ アプリの詳細をクリックして「サンプルデータを含める」のチェックを外してください。

kintone01.png

kintone02.png

右側の歯車アイコンから設定画面に進み、「設定」>「APIトークン」でAPIトークンを作成してください。
権限は「レコード追加」の権限が付与してあれば大丈夫です。
生成したAPIトークンは後ほど利用するので、メモしてください。

kintone-2.png

「フォーム」タブに移動し、マルケトのリードIDを保存するフィールドを追加します。
フィールドは「数値フィールド」フィールドコードは「leadID」で設定します。
また、ユニークなキーとなるため、「値の重複を禁止する」にチェックを入れます。
設置したフィールドの右上の歯車アイコンから変更することが可能です。

kintone03.png

kintone003.png

さらに、既存フィールドのフィールドコードも変更します。
下表のとおりに変更してください。

フィールド名 フィールドコード
会社名 companyName
部署名  division
先方担当者 contactName
TEL tel
FAX fax
メールアドレス mail
確度 accuracy

最後にkintoneのアプリIDを確認します。設定が完了したら、「アプリを公開」(または「アプリを更新」)をクリックしてください。

先ほど作成したkintoneアプリを開きURLを確認してください。「https://{subdomain}.cybozu.com/k/xx/」 の 「xx」がアプリIDなのでメモしてください。

マルケト

マルケトデベロッパーサイト

http://developers.marketo.com/rest-api/

上記のリンク先を参考に、マルケトにREST API用のユーザーを追加してください。

ロールの権限は「APIへのアクセス」にチェックを入れてください。

marketo-role.png

次に、LanchPointを作成し、クライアント IDとクライアントシークレットをメモしてください。

marketo-lanch.png

最後にマルケト管理画面でEndpointとIdentity(ID)を確認する必要があります。
下記リンクと画像を参考に確認し、メモしてください。

http://developers.marketo.com/rest-api/authentication/#creating_an_access_token

Image_14.png

以上で事前準備は完了です。

マルケト設定

マルケトWebhookを作成する

まず、マルケトからkintoneにデータを登録するために、Webhookを作成します。

下図の通り、①マルケトの管理画面から②Webhookの設定画面に遷移し、③新規Webhookを作成してください。

Image_1.png

Image_2.png

Image_3.png

次に、下図のようなWebhook作成画面が開きます。
④URLはご自身の環境に合わせて下記のように設定してください。
https://{subdomain}.cybozu.com/k/v1/record.json
⑤リクエストタイプはPOST
⑥テンプレートは後述のJSONサンプルを元に、appの値だけ先ほど作成したkintoneのアプリIDに変更して貼り付けてください。
⑦リクエスト トークンのエンコード、応答タイプはともにJSONを選択します。

Image_5.png

JSONサンプル

次に⑧カスタムヘッダを設定します。

Image_18.png

下図の通り、「Content-Type」を「application/json」、

「X-Cybozu-API-Token」を先ほど作成したkintoneアプリのAPIトークンに設定してください。

Image_19.png

以上でマルケトWebhookの作成は完了です。

新規顧客が作成されたときWebhookが動くようにする

先ほど作成したWebhookを、新規顧客が作成された際に動くようにします。

マルケト画面左上のアイコンをクリックし、①マーケティング活動から、
②Webhookを実行させたいワークスペースを選択し、③新規スマートキャンペーンを作成します。
フォルダや名前は任意に設定してください。

Image_6.png

Image_8.png

Image_9.png

スマートキャンペーンを作成したら、④スマートリストから⑤「顧客を作成」のトリガーを選択します。

Image_11.png

⑥次にフローで「ウェブフックを呼び出し」を選択し、ドロップダウンから先ほど作成したウェブフックを選択します。

Image_12.png

最後にスケジュールから有効化をクリックして設定は完了です。

Image_13.png

これで、マルケトからkintoneへのデータの設定が完了しました。

kintone設定

サンプルコード

下記のサンプルコードをjsファイルとして保存してください。

11~14行目は事前準備でメモした情報を記入してください。

※ 本来、11,12行目に記述する認証情報は、プラグイン化するなど、情報を秘匿する必要があります。
参考:kintoneプラグイン開発入門 【Part1: メリット編】

JavaScript / CSSカスタマイズ設定

アプリの設定 > 設定タブ > JavaScript / CSSでカスタマイズ の順に遷移し、下図の通り設定します。
「connect-to-Marketo.js」は先ほど作成したサンプルコードです。

kitone-setting.png

kintone UI Component

マルケトリード更新ボタンとスピナーの表示にkintone UI Componentを使用しています。
GitHubよりv0.〜で始まる最新バージョンをダウンロードして解凍し、jsファイルとcssファイルをアプリに適用します
使用方法はこちらの記事を確認してください。

Cybozu CDN

URL指定でCybozu CDNのSweetAlert2を使用しています。

  • SweetAlert2
    https://js.cybozu.com/sweetalert2/v7.28.2/sweetalert2.min.js
    https://js.cybozu.com/sweetalert2/v7.28.2/sweetalert2.min.css

動作確認

マルケト新規顧客作成 → kintoneレコード追加

fix1.gif

kintoneレコード詳細画面から更新ボタン → マルケトリード更新

fix2.gif

サンプルコード解説

showSwalQues

SweetAlert2を使用してボタン押下時のアラートを作成しています。

getAuthToken

kintone.proxy()を使用してマルケトの認証トークンを取得するREST APIを実行しています。

createPutButton

kintone UI Componentのボタンに関する関数を使用してボタンを作成しています。

putLeads

kintone.proxy()を使用してマルケトのリードを更新するREST APIを実行しています。
マルケトのREST APIはPOSTメソッドで作成と更新を実行するUpsert APIなので、更新時もPOSTメソッドを使用します。
詳細はドキュメントを確認してください。

buttonAction

ボタン押下時のアクションを設定しています。
マルケトのリード更新処理が終了するまで、kintone UI Componentのスピナーを表示しています。

おわりに

いかがでしょうか。kintoneとマルケトの相互連携が実現できたと思います。
他にも以下のカスタマイズが実装できそうですね。
・kintoneアプリのステータス変更時にマルケトリードを更新する
・kintoneレコードの値が変更されたときマルケトリードを更新する
・kintoneレコード詳細画面にリアルタイムでマルケトリードスコアを表示する

マルケトのREST APIはリード情報以外にもほかにも豊富に用意されているので様々なことが可能そうです。

詳細は下記のマルケトデベロッパーサイトをご確認ください。

http://developers.marketo.com/

このTipsは、2018年10月版 kintoneで確認したものになります。

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

Avatar
村山 浩司

はじめまして、kintoneカスタマイズ初心者です。

kintone のSAML認証を設定した状態でトリガーを実行すると、Marketo側のアクティビティで下記のエラーが表示されました。

何かご存知の方、ご教示のほど、何卒よろしくお願い致します

 

応答:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Unauthorized</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="stylesheet" href="/forest_error/css/style.css"> </head> <body> <div class="pagewrap"> <div class="column"> <img src="/forest_error/image/cloud.png" width="178" height="107" alt=""> <h2>アクセスするには認証が必要です。</h2> <p>Code: 401 Unauthorized</p> </div> </div> <div class="footer"> <p>Copyright(C) Cybozu</p> </div> </body> </html>

エラー タイプ:
HTTP エラー 401: URL へのアクセスが認証されていません。

エラー文字列:
Server Returned code 401

 

 

Avatar
cybozu Development team

コメントありがとうございます。

SAML認証を設定していても、本記事の方法での連携は可能です。

恐れ入りますが、下記の事項をご確認いただけますでしょうか。

・APIトークンのアクセス権を適切に設定している

・APIトークンを生成した後、「アプリの設定」画面でアプリを更新している

・セキュアアクセスを設定していない

 ※セキュアアクセスを設定している場合、APIトークンでの認証はエラーになります

  https://developer.cybozu.io/hc/ja/articles/201941754

Avatar
村山 浩司

cybozu Development team

ご担当者様

 

返信いただきありがとうございます。

検証する中で、Marketoのカスタムヘッダに「Authorization」を追加してエラーを解消できました。

BASIC認証とIP制限、SAML認証を設定している環境となり、設定不足が原因でした、混乱させてしまい申し訳ございません。連携は非常に簡単ですね。

村山 浩司により編集されました
Avatar
n.igarashi

はじめまして

KintoneからMarketoへのデータ連携について

「マルケトのリードを更新する」ボタンをクリックすると

応答が返ってこない状態が3分ほど続くためブラウザを再読み込みしています

 

問題はconnect-to-Marketo.jsにあると思い

55行目の// マルケトにリードを送信するにある更新項目を下記3つに減らして試したましたが

上記応答なし状態となってしまいます

・record.leadID.value

・record.companyName.value

・record.accuracy.value

 

認証情報である14~17行目の情報は間違いないことを確認しています

ご教示のほど、よろしくお願い致します

情報が不足していればお申し付けください。

Avatar
cybozu Development team

n.igarashi 様

お世話になっております。cybozu developer network 運営でございます。

以下の記事を参考にして頂き、一度デバッグして頂けないでしょうか。

https://developer.cybozu.io/hc/ja/articles/207613916

よろしくお願い致します。

cybozu Development teamにより編集されました
Avatar
K.Furusho

ご担当者様

 

御世話になっております。こちらの記事を参考にMarketo連携をしております。
1点お伺いさせていただきたいのですが、offsetの制限値の上限値が決まりましたが、
こちらのAPIに影響はありますでしょうか?

通常の運用で、月/1,000件ほどのリードがMarketo側のトリガーを起点にkintone登録されており、
特に運用上問題はないと考えておりますが、apiにあまり詳しくないためご教示いただけますと幸いです。

 

御確認の程、宜しくお願い致します。

Avatar
cybozu Development team

K.Furusho 様

お世話になっております。cybozu developer network 運営事務局でございます。

お問い合わせいただきましたoffset制限値について、本記事におけるカスタマイズへの影響はございません。

offset制限は、kintone REST API の「レコード一括取得」API に関する制限です。
本記事では当該APIを利用していないため、ご対応頂く必要はございません。

[参考情報]
kintone API レコード一括取得APIのoffsetの上限値制限について
offset の制限値を考慮したレコード一括取得について

引き続きご活用いただけますと幸いです。
どうぞよろしくお願いいたします。

cybozu Development teamにより編集されました
Avatar
K.Furusho

cybozu developer network 運営事務局 ご担当者様

 

御世話になっております。

ご回答いただきありがとうございます。
不安を感じていたので大変助かりました。

迅速なご回答に感謝いたします。

 

引き続き、何卒宜しくお願い致します。

Avatar
n.igarashi

cybozu Development team 運営ご担当者さま

お世話になっております。

ご返答いただき、ありがとうございます

レスが遅くなって申し訳ありません

 

頂いたアドバイスどおりデバッグツールで問題点を探り、なんとか解決できました

・ReferenceError: putleads is not defined

⇒56行目のputLeadsをputleadsにしたら解決しました>Lを小文字

 

ご協力いただき、ありがとうございました。

Avatar
K.Furusho

cybozu Development team 運営ご担当者さま

 

御世話になっております。フィールドIDについてお伺いさせてください。
下記についてお伺いさせてください。

【質問】
kintoneのフィールドIDを日本語で設定してもAPI連携は可能でしょうか。


K.Furushoにより編集されました
Avatar
cybozu Development team

K.Furusho 様

お世話になっております。
cybozu developer network 運営局です。

「フィールドID」はフィールドコードのことでしょうか?
フィールドコードは日本語を指定できます。
利用できる文字については、https://jp.cybozu.help/k/ja/user/app_settings/form/autocalc/fieldcode.html をご参照ください。

その場合、たとえばサンプルコードの 57行目は、以下のように記述できます。書き方は異なりますが、実現できることは一緒です。

const name = record.担当者名.value.split(' ');

または

const name = record['担当者名'].value.split(' ');

よろしくお願いいたします。

Avatar
K.Furusho

cybozu developer network 運営局
ご担当者様

御世話になっております。
早速のご回答ありがとうございます。

また、フィールドIDではなく「フィールドコード」の誤りでした。失礼しました。
その上で、フィールドコードを日本語に指定しても、APIは利用可能とのことで、
ご回答いただきありがとうございます。大変助かりました!

引き続き、何卒宜しくお願い致します。

Avatar
Shinya Tsuchiyama

ご担当者さま

 

こちらの方法でMarketo連携を考えておりますが、

Marketo→kintoneに連携する際に、

すでにkintoneにMarketoリードIDを保有しているデータがある場合には、

リードIDをキーにデータを上書きすることは可能でしょうか。

ご確認のほどよろしくお願いいたします。

 

土山

Avatar
cybozu Development team

Shinya Tsuchiyama 様

お世話になっております。cybozu developer network 運営局です。

Marketo から kintone のレコード更新についてですが、
Marketo 側から kintone REST API の レコードの更新(PUT)をご利用いただくことで、
リードIDをキーにデータを更新できるかと思います。

また、記事の内容の発展や、直接的に関連がない「記事を参考にした技術的な質問」は、
お手数ですがcybozu developer コミュニティのご利用をお願いします。

ご確認よろしくお願いいたします。

cybozu Development teamにより編集されました
Avatar
Shinya Tsuchiyama

cybozu developer network 運営局 様

 

ご返信ありがとうございます。

内容について確認いたします。

 

また、質問のする場所が少し異なっていたようで申し訳ございませんでした。

本記事に関連した内容で質問したつもりでしたが、失礼いたしました。

引き続き、よろしくお願いいたします。

Avatar
K.Furusho

cybozu Development team 様

お世話になっております。いつも参考にさせていただいています。

1点お伺いさせてください。
【ご質問】
Marketoとの連携について、1項目あたりのデータ量に制限はありますでしょうか?

【背景】
Marketoのフォーム入力時に、「日本語で300-1,000文字程度の文章」をkintoneにも連携したいと考えています。

流れとしては、
1.Marketoのフォーム入力時に、Marketoの非表示のフィールドに「日本語で300-1,000文字程度の文章」を格納
2.フォーム入力をトリガーにAPIが発火
3.「1」の情報がkintoneにも無事連携される、というイメージをしています。

kintone側のデータの方をテキストエリアなどにすればできるのかなと思いましたが、、、データ量について制限があれば教えて下さい。

お忙しい中恐縮ですが、何卒宜しくお願い致します。

K.Furushoにより編集されました
Avatar
cybozu Development team

K.Furusho 様

お世話になっております。cybozu developer network 運営局です。

kintone 連携時の各フィールドの制限値につきましては、kintone の仕様に準じます。
詳細は、「フィールドの入力制限」のページをご確認ください。

また、実装方法や技術的な質問に関しましては、
ぜひ cybozu developer コミュニティ のご利用をお願いいたします。

ご確認のほど、よろしくお願いいたします。

Avatar
K.Furusho

cybozu developer network 運営局 様

お世話になっております。
ご回答いただきありがとうございます。

URL拝見しました。私が使っているフィールドの種類は制限に当たらないことが確認できました。
ご教示いただきありがとうございます。

引き続き、何卒宜しくお願い致します。

Avatar
K.Furusho

ご担当者様

お世話になっております。
サポート範囲かわかりませんが下記についてお伺いさせてください。

【背景】
・現在、Marketo と kintoneを上記の内容で連携をしています
・7/30にkintoneにIP制限を掛け、VPNに繋がないとkintoneに接続できない仕様にしました。この作業でWEBフックが機能しなくなっています
・以前も、IP制限を掛けていたのですが、その際は問題ありませんでした。
(以前はIPを掛けていて、一時IP制限をなくし、再度IP制限をかけ直しています)

【相談内容】
IP制限を掛けながら、Marketo、kintone連携をする方法はございますでしょうか?

システムへの基礎的な知識がなく教職ですが、システム部門にMarketoからのアクセスを許可してもらう?
WEBフックの記述を変える?など解決方法があればご教示いただけますでしょうか?

ご確認の程、宜しくお願い致します。

 

→2021/08/02 12:14更新。

すみません、kintone側でMarketoのIPを設定し本件解決いたしました。お手数をおかけしました…

K.Furushoにより編集されました
Avatar
cybozu Development team

K.Furusho 様
お世話になっております。cybozu developer network 運営局です。

>kintone側でMarketoのIPを設定し本件解決いたしました。
無事に解決できてよかったです。引き続きご活用いただけますと幸いです。

Avatar
古賀裕章

cybozu Development team 様

お世話になっております。いつも参考にさせていただいております。

1点質問させてください。

本ページ半ばの
kintone設定(サンプルコード・JavaScript / CSSカスタマイズ設定)の解説ですが、

こちらは、
「kintoneからMarketoへの情報連携」のために必要な設定という
認識で合っているでしょうか?

この度、
「Marketoからkintoneへの情報連携」のみを予定しているのですが、
その場合、上記の設定は不要でしょうか?
※Marketoフォームの入力内容がkintoneに反映されるまでがゴール。

ご教示くださいます様、宜しくお願い申し上げます。

古賀裕章により編集されました
Avatar
cybozu Development team

古賀裕章 様

お世話になっております。cybozu developer network 事務局です。

ご認識の通り Marketo から kintone への情報連携の場合は、kintone設定セクションのサンプルコードおよびJavaScript / CSS の設定は不要です。

記事内の以下のセクションで「マルケト新規顧客作成 → kintoneレコード追加」の動作をご確認いただけます。

https://developer.cybozu.io/hc/ja/articles/360016485671#step6

Avatar
古賀裕章

cybozu Development team 様

ご回答いただきありがとうございました。
助かりました。

引き続きよろしくお願いいたします。

サインインしてコメントを残してください。