オープンソース MAツールの Mautic と外部サービス(自社で運営している Webサービス)のデータを、AWS Lambda を使用して連携したので記事にします。
連携の目的
- 自社サービスのデータの一部を Mautic のコンタクトと連携(Mautic 側に保持)させて、Mautic で作成するキャンペーンのシナリオ等で利用。
連携概要図
Mautic と自社サービスのデータをそれぞれ同期するために、Mautic と自社サービスのトリガーごとに Lambdaファンクションを作成してデータ連携
作業概要
1. カスタムフィールドの作成
- Mautic のコンタクトに保持したい自社サービスのデータ用のカスタムフィールドを作成
2. Webhook の作成
- API Gateway のエンドポイントを「ウェブフック POST URL」に設定
- 「ウェブフックイベント」は「新規のコンタクトイベント」を選択
3. Lambdaファンクションの実装
Mauticトリガーファンクション
- Mautic に新規コンタクトが作成された時、自社サービスのデータを参照して紐づくデータが見つかった場合、コンタクト情報に自社サービス情報を取り込むファンクション
- 連携フロー
- ①:新規コンタクト追加イベントにより Webhook を送信
- ②:コンタクトと紐づくデータが自社サービスにあるか検索
- ③:もしあれば自社サービスの情報を返却
- ④:Mautic API でコンタクト情報を更新
自社サービストリガーファンクション
- 自社サービスのデータが新規追加、更新、削除された時、Mautic のコンタクト情報の自社サービスのカスタムフィールドを更新するファンクション
- 連携フロー
- ①:自社サービスデータが新規追加、更新、削除を検知
- ②:Fluentd で Lambdaファンクションを実行
- ③:新規追加、更新、削除が行われた自社サービスデータと紐づくデータが Mautic側にあるか検索
- ④:もしあれば Mautic のコンタクト情報を返却
- ⑤:返却されたコンタクト情報を元に、自社サービスのデータを検索
- ⑥:コンタクトに保持したい自社サービスのデータを返却
- ⑦:Mautic API でコンタクト情報を更新
苦労した点
- Mautic の画面からコンタクトを作成したときと、CSVインポートでコンタクトを作成したときの Webhook のペイロードが異なること
- 画面からコンタクトを作成するとコンタクト情報がペイロードとして送られてくるが、CSVインポートした場合、コンタクト情報が送られてこない(送られてくるのは、コンタクトID といくつかのタイムスタンプくらい)
- コンタクト情報を取得する Mautic API で contact_id 以外での検索ができない
- contact_id がわかっていれば
GET /contacts/ID
でいいが、メールアドレスなどからコンタクト情報を取得したい場合は、GET /contacts
のsearch
パラメータの利用しかできず、前方一致のみになってしまい、不完全な検索になる - コンタクト情報の取得は、Matuic API を利用せず、Mautic の DB を Lambdaファンクションから直接参照して回避
- contact_id がわかっていれば
総評
- 多少苦労したものの、わりと低コストで外部データ連携が実現可能
- AWS等のクラウドサービスをうまく組み合わせれば、アイデアしだいで Mautic の可能性が広がることを実感