katsuyukikun’s diary

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

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

まさか前回の続きを書くことになるなんて思ってもいませんでしたが、こちらも僕が「あったらいいなー」と思ったので残しておきます。(すごく長くなってしまいました。)

ちなみに前回のがこちら。

katsuyukikun.hatenablog.com

前回の内容をよく見ると

kintone → marketo

の連携のみの説明になっていました。 なので今回は逆側、

marketo → kintone

の連携について書いていこうかなと思います。

やりたいこと

特定の時刻に自動的に起動し、特定のリードのセット(集まり)に対して一度にメール処理を行うことができてかつ、そのメールの開封がkintoneで確認できること

今回の場合の知っておくべきこと

さてさて、今回の登場人物は以下です。

  • スマートキャンペーン

こいつだけです。ただこいつは

  • スマートリスト
  • フロー

という2つの要素を持っているので、スマートキャンペーンというよりこいつらのことを知る必要があります。

スマートキャンペーンとは

個人的にはmarketoの根幹部分にあたるところでないかと思っています。ただじゃあ何かと言われると難しいです。

なぜか? → 設定次第でなんでもできちゃうから

なので基本的に何かmarketoでしようと思ったら最初にこいつから手をつけることになると思います。 これに関してはこれ以上説明できないのでやめますw

スマートリストとは

作成方法とかは画像つきで載っているのでそのまま真似するだけでokです。

バッチおよびトリガーのスマートキャンペーンを理解する - Japanese - Product Documentation

そして、このスマートリストですが2つの役割に分かれます。

  • バッチスマートキャンペーン

    特定の時刻に起動し、特定のリードのセットに対して一度に処理を行います。たとえば、「愛媛県」にいるすべてのリードにメールを送信する場合に使用されます。

  • トリガースマートキャンペーン

    トリガー起動イベントに基づいて、一度に1つのリードに対して処理を行います。たとえば、メール内のリンクがクリックされた場合です。

ドキュメントはさすがですね。まさにこのままで特別わかりにくいこともないと思います。

どこでその区分が分かれるのか、、実際に見てみると

f:id:katsuyukikun:20180816210654p:plain

2つの選び方があります。

  • トリガー
  • フィルター

この2つの選択の仕方で役割が変わります

f:id:katsuyukikun:20180816210948p:plain

  • フィルターのみならバッチスマートキャンペーン
  • フィルターありなしに関わらずトリガーが入るならトリガースマートキャンペーンになります。

フローとは

次はフローについてです。こいつは実際の動作を定義するところです。

f:id:katsuyukikun:20180816211640p:plain

画像にも書いてありますが、右のメニューバーから実際のやりたいことを選ぶだけです。

対応方針

最初

単純にmarketo側が何かメール開封した時の為のトリガー的なのものを用意しているだろうと思っていてこんな感じをイメージしていました。 自作する時とかは画像仕込んで、開封ログ取るとかはやってましたし。。

f:id:katsuyukikun:20180816203946p:plain

ただドキュメントをザーッと軽くみてもそれらしきものが見当たらない。。 なのでちゃんとドキュメント読まないといけないのか〜となり、ちゃんと読み始めました。

スマートキャンペーン - Japanese - Product Documentation

2度目

実際の動作の部分なので(上で説明した)フローを見ればなんとなく想像できるかなーと思ってフローで何ができるのかをポチポチしながら確認。

そうすると・・・ウェブフックを発見しました。

実際にドラッグしてみるとこんな感じ。

f:id:katsuyukikun:20180816212358p:plain

ということでウェブフックを使って外部APIを叩くという方針になります。

f:id:katsuyukikun:20180816213411p:plain

ただここで問題発生!!!!

marketoで用意されているwebhookは「GETとPOST」しか用意されていません。 今回僕はkintoneへPUTで投げたかったので直接叩くのは不可能になりました。

最終

webhookからPOSTでAPIGatewayを呼び出し、lambdaをキック。 kintoneがIP制限していたのでNat Gatewayを用いて設定したElastic IPをkintone側で許可してアクセスするようにしました。

f:id:katsuyukikun:20180816214019p:plain

この辺のやり方はまた別途書きます。

marketo内での設定

さて外側の部分はできたのでいよいよ本題に入っていきます。 残りやることとしては以下です。

  • webhookの設定
  • リストとフローの設定

webhookの設定

ここ読めばokです!

ウェブフックを作成する - Japanese - Product Documentation

ヘッダの設定は「カスタムヘッダ」というところから設定できます。 テンプレートにはpostするときのデータを入れます。 f:id:katsuyukikun:20180817130316p:plain

リストとフローの設定

方針のところでもありますが大きく設定するのが2つで

  • メール送付
  • メール開封とともにウェブフック起動

です。

どうやるか

結論から言うと

  • バッチスマートキャンペーンとトリガースマートキャンペーンを組み合わせる

ことでできます。もう少し具体的に言うと

  • バッチスマートキャンペーンからトリガースマートキャンペーンを呼ぶ
  • トリガースマートキャンペーンで「メール送付とウェブフック起動」設定

f:id:katsuyukikun:20180816231249p:plain

カオスですねwww

まあただこうやると特定の時刻に自動的に起動し、特定のリードのセットに対して一度に処理を行いうことができるかつそのメールの開封がkintoneへ送付することができます。

どう実現したか

一応ドキュメントも載せておきますが、僕はこれ読んでもさっぱりでしたww

[キャンペーンをリクエスト]を使って、トリガー付きスマートキャンペーンを営業に設定する - Japanese - Product Documentation

ただここではスマートキャンペーンをリクエストできるということがわかります。

なので考えました。

バッチスマートキャンペーンからトリガースマートキャンペーンをリクエストできれば解決できるのではないかと。。。

実際にフローの中を調査するとキャンペーンリクエストというものがありました。これで呼び出せるっぽいです。

具体的にはこんな感じ

バッチスマートキャンペーン

  • フィルターは適当にメルアドで指定しています。
  • 「メール送付」して「キャペーンを呼び出し」をしています。 f:id:katsuyukikun:20180817130540p:plain

トリガースマートキャンペーン

ここではメールを開封したのかどうかの確認のために加えています。 ここを挟まないとフィルターに対象のユーザーが引っかからず、開封1回目が取得できない。

f:id:katsuyukikun:20180817130841p:plain

なぜできないのかはやってみるとわかりますが一応説明
  • リクエストを受け取った時点でトリガーキャンペーンは実行される
  • なのでトリガーキャンペーンのリストのフィルターでメール開封ずみユーザーのみ取得するようにする
  • ただメール開封ずみかどうかはmarketoのDBを参照している
  • なのでmarketoのDBに入るタイミングウェブフックのタイミングウェブフックの方が後に実行されなければならない
  • ということで待機するようにキャンペーンを追加した

f:id:katsuyukikun:20180817132812p:plain

トリガースマートキャンペーン

  • 最後はウェブフックで飛ばしています。

f:id:katsuyukikun:20180817131325p:plain

まとめ

振り返るとカオス極まりないのでもし他に良い方法あれば教えて欲しいですww

おまけ

送ったメールの内容をkintoneへ送れない??

送付したメールの内容はどこにも値を保持していないので単純な

marketo → kintone

では対応できなかったです。(僕の理解の範疇なのでもしこうやればできるよってのがあれば教えて欲しいです。)

メールに返信したかどうかをkintoneへ送れない??

こちらどうやら不可能ではないらしいです。ただ工数かかるので一旦置いておくという判断にしました。

以下marketoのコミュニティの方から教えていただいたこと。

Human replies (an end user hitting Reply in their mail client) aren't 
processed by Marketo.
If you use a custom subdomain of your corporate domain
(or an entirely separate domain) for Marketo emails,
you can set replies to that domain to go via a 3rd-party app
 or hosted service which can perform further sorting/processing.

まあなので現実ライン、SES経由とかになりそうな感じがしますけどね。 この辺りも対応したら記事でも書こうと思います。

終わり。