Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

オープンソース MAツール Mautic と外部サービスを AWS Lambda を使用してデータ連携

オープンソース MAツールの Mautic と外部サービス(自社で運営している Webサービス)のデータを、AWS Lambda を使用して連携したので記事にします。

連携の目的

  • 自社サービスのデータの一部を Mautic のコンタクトと連携(Mautic 側に保持)させて、Mautic で作成するキャンペーンのシナリオ等で利用。

連携概要図

Mautic と自社サービスのデータをそれぞれ同期するために、Mautic と自社サービスのトリガーごとに Lambdaファンクションを作成してデータ連携

スクリーンショット 2017-12-16 22.16.48.png

作業概要

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 /contactssearch パラメータの利用しかできず、前方一致のみになってしまい、不完全な検索になる
    • コンタクト情報の取得は、Matuic API を利用せず、Mautic の DB を Lambdaファンクションから直接参照して回避

総評

  • 多少苦労したものの、わりと低コストで外部データ連携が実現可能
  • AWS等のクラウドサービスをうまく組み合わせれば、アイデアしだいで Mautic の可能性が広がることを実感
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What are the problem?