katsuyukikun’s diary

とある天パーエンジニアのblog

【kintone × marketo連携】両方へ入門してみた

先週の1週間ずっとこれらの連携周りで調べていて、あまり情報ないなぁと思い結構時間かかってしまったのでログ残しておきます。

kintone

名前聞いたことある程度だったので軽く調べてみました。

kintoneとは

サイボウズさんが自社で開発しているクラウドサービスです。 ググってみると色々説明出てきますが、個人的には「webデータベースのアプリを構築してくれるサービス」という認識で良いかなって思っています。

「アプリ」という単位でフロント側とDBを持ち、フロントをそのアプリを使う人が自分で勝手にカスタマイズできる業務支援システムというイメージです。(厳密にいうと違うのかもしれませんが、僕はこのイメージがしっくりきました)

         f:id:katsuyukikun:20180813195703p:plain

カラム名はフロント側で設定したものになってしまうのでこの辺を設計しないと、カオスになるのはなんとなく目に見えると思いますww フロントを簡単にいじれてかつそれがDBに入るので営業さんとかのPDCAを高速に回すとかにはすごく良いんですけどね。。

marketo

こちらも名前を聞いたことがあるという程度だったので軽く調べました。

marketoとは

マーケティングオートメーション」というやつで、顧客一人一人の行動を追え、タイミングタイミングでアクションを変えたりすることができるプラットフォームです。個人的には「そのユーザーが自社(サービス)に興味をどのくらい持っているのかを可視化できて、その興味や状態によってどうアクションするのかを選択できるツール」くらいの認識ですがw

    f:id:katsuyukikun:20180813201716p:plain

documentの見方

どちらも親切なことにdocumentが用意されています。なので基本的にはそこを読めば解決できます。またどちらもdeveloper用の質問サイト?が用意されており、過去のログもみることができるので同じ問題にぶち当たった人がどう解決したのかなどもわかるので便利です!

ただ僕が一瞬あれ?と思った箇所があったのでそこだけ説明しますw
それはmarketoのdocumentです。

developers.marketo.com

連携させたかったのでapiのdocumentをみたのですが、全て英語です。なので英語が苦手な人は少し辛いかもしれないですね。。頑張りましょ!

でその中でみていくとpostする際のデータの持たせ方が載っています。

http://developers.marketo.com/rest-api/endpoint-reference/lead-database-endpoint-reference/#!/Leads/syncLeadUsingPOST

f:id:katsuyukikun:20180813202759p:plain

これをみたとき僕は一瞬「めっちゃデータ構造複雑だな、SyncLeadRequestとLeadと・・・を持たせるのかよ〜。どう持たせれば良いのかな?」と思ってましたww

f:id:katsuyukikun:20180813203209p:plain

actionはstringで持たせるよ!とか書いているのに途中でLeadというのが出てきます。それを下で構造的に説明しているだけでしたw

inputの中身ArrayでLeadがHashで書かれており、パラメータのタイプがbodyとなっているのでcurlだとこんな感じになりますね

curl -H 'Content-Type:application/json' -d "{"action":"createOnly","input":[{"id":1, "reason": ""}]}" https://test.co.jp/

やりたかったこと

kintoneで更新した時に、marketoのAPI叩いてmarketoにleadの(見込み客のことをleadと呼ぶ)新規作成or更新をかける。

      f:id:katsuyukikun:20180813204234p:plain

実装

kintone側

データ更新かけた後の処理の実装方法はこちら

developer.cybozu.io

marketoのAPIは外部APIになるのでこちら

外部APIの実行 – cybozu developer network

これら2つを合わせるだけなので

(function() {
 
    "use strict";
    //レコード追加画面の保存成功後イベント
    kintone.events.on('app.record.create.submit.success', function(event) {
      var postHeader = {"Content-Type": "application/json"}
      var postData = {"action":"createOnly", "lookupField": "email","input":[{"email":"test@test.co.jp", "firstName": "test"}]}
      kintone.proxy('https://*****.***.co.jp/rest/v1/leads.json?access_token=xxxxx', postHeader',postData}, function(body, status, headers) {
        //success
        console.log(status, JSON.parse(body), headers);
      }, function(error) {
        //error
        console.log(error);  //proxy APIのレスポンスボディ(文字列)を表示
      });
    });
})();

marketo側

このURLのdocument通りに、API叩くようのユーザーを作成し、そのユーザーにAPIロールを付与してアクセストークンを発行する。

Quick Start Guide for Marketo REST API - Marketo Developers

そのあとはREST APIのdocumentをみて対応させていく。

Lead Database - Marketo Developers

新規作成の時は、/rest/v1/leads.jsonでinputのところに初期設定したい値を入れるだけです。 ちなみにlookupFieldというのは、データ整合性をとる時にどこのフィールド(カラムのことですね)を対応させるのかということです。 今回だと

"lookupField": "email"

としたので、marketo側でメルアドを参照し同じメルアドがあったら更新、なかったら作成という挙動になります。

挙動

kintoneで更新かけると、marketoの「Lead Database」というところの「全ての顧客」にデータが作成されます。更新されるときはそのユーザーが更新されます。

まとめ

蓋を開けてみると、非常にシンプルですが初めてだとそもそもの理解に時間がかかるものだなと思いました。こういうものでも時間をかけずにできるように、今回詰まったところをもう一度洗い出して、なぜ詰まったのかを考え次に繋げたいです。

終わり。