Node-REDを使ってMautic上のデータを取得する

今回は下記2つのツールを使用します。
マーケティングオートメーションツールのMauticとハードウェア、API、WebサービスなどをつなぐNode-REDを用いて、マーケティング活動で取得した顧客情報を、別のシステムにデータを渡したり、ハードウェアで読み上げたりするための、基本のサンプルについて見ていきましょう。

# Mautic

Mautic(マウティック)は、オープンソースのマーケティングオートメーションです。今までに10万社以上が導入し、日々顧客1人1人とコミュニケーションし新しい商談を獲得するために使用しています。

# Node-RED

もう１つは、Node-REDです。元々はIBMが中心になって開発していました。現在は、オープンソースプロジェクトとしてMauticと同じように世界中の開発者が協力して進めています。

# 環境構築

まずはツールを用意します。

### Mauticの用意
Mauticは自社サーバーやIBM Cloud、Microsoft Azure、GCP、AWS等に導入する「セルフホスティッド版」とSaaS版(ドットネット版やドットコム版と言われることがあります)、どちらでも良いので用意します。SaaS版は[こちら](https://mautic.com/products/pricing/)から無料プラン[Mautic Cloud Free]を申し込むことができます。導入時は英語ですが、日本語に切り替えることができます。

### Node-REDの用意
Node-REDは、IBM Cloud ライトプランを申し込み、ボイラーテンプレートで「Internet of Things Platform Starter」を選択するとNode-RED環境が用意されます。あるいは「Node.js Cloudant DB Web Starter」を用いて独自にNode-RED環境を構築します。通常の大人向けNode-REDを使用する方は、「Internet of Things Platform Starter」を選択すると良いでしょう。
ひらがな化された子供向けのNode-REDを使用する場合は、「Node.js Cloudant DB Web Starter」を用います。子供向けNode-REDの構築には、[こちらの手順書](https://qiita.com/kolinz/items/ff645716a430defa2212)をご覧ください。

### フローの読み込み
始めはNode-REDから作業します。
Node-REDにアクセスし、画面右上から「読み込み」→「クリップボード」→「フローをクリップボードから読み込み」にて、下記をコピー&ペーストします。読み込み先は「現在のタブ」とします。

```
[
    {
        "id": "cc848aaf.817d38",
        "type": "tab",
        "label": "Mautic New Contact",
        "disabled": false,
        "info": "using checkd Contact Identified Event in Mautic Webhook settings."
    },
    {
        "id": "ee1e1b82.b0e1f8",
        "type": "debug",
        "z": "cc848aaf.817d38",
        "name": "",
        "active": true,
        "console": "false",
        "complete": "payload",
        "x": 410,
        "y": 40,
        "wires": []
    },
    {
        "id": "bcbac79d.aee308",
        "type": "function",
        "z": "cc848aaf.817d38",
        "name": "output_new_contact_email",
        "func": "msg.payload = msg.payload[\"mautic.lead_post_save_new\"][0].contact.fields.core.email.value\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 460,
        "y": 140,
        "wires": [
            [
                "8d87321f.7ddab",
                "88d3657b.14aa08"
            ]
        ]
    },
    {
        "id": "8d87321f.7ddab",
        "type": "debug",
        "z": "cc848aaf.817d38",
        "name": "new contact's email",
        "active": true,
        "console": "false",
        "complete": "payload",
        "x": 710,
        "y": 140,
        "wires": []
    },
    {
        "id": "1825b1a7.1e89ae",
        "type": "http in",
        "z": "cc848aaf.817d38",
        "name": "",
        "url": "/mautic",
        "method": "post",
        "upload": false,
        "swaggerDoc": "",
        "x": 190,
        "y": 100,
        "wires": [
            [
                "ee1e1b82.b0e1f8",
                "bcbac79d.aee308"
            ]
        ]
    },
    {
        "id": "88d3657b.14aa08",
        "type": "http response",
        "z": "cc848aaf.817d38",
        "name": "",
        "statusCode": "",
        "headers": {},
        "x": 660,
        "y": 60,
        "wires": []
    }
]
```

「読み込み」をクリックし、画面右上の「デプロイ」をクリックします。
下図のようになります。
![mautic_bluemix_nodered.png](https://qiita-image-store.s3.amazonaws.com/0/41414/dc2f7432-7be7-d923-de58-adbaf1fb3f59.png)


Node-REDのURLを確認します。
```
例 https://xxxx.yyyy.mybluemix.net/red/#flow/ 
```
Node-REDのURLは例のようになっていますので、/red/#flow/ を /mautic に変更し、メモしておきます。このURLは、Mautic側のWebhook設定で使用します。
```
変更例 https://xxxx.yyyy.mybluemix.net/mautic 
```

### Mautic Webhook設定

Mauticにログインします。画面右上の歯車のアイコンをクリックし、「Webhooks」をクリックします。Webhook管理画面が表示されます。画面右上の「新規」をクリックし、Webhook設定を作成します。

「名前」と「Webhook POST url」に先ほどメモしました、/mauticのURLを記述します。また、「Webhook Events」では、「Contact Identified Event」にチェックを入れます。  
![mautic_webhook.PNG](https://qiita-image-store.s3.amazonaws.com/0/41414/b2bbe6cc-12f4-a4b1-920d-85d541a52f79.png)

画面右上の「適用」→「保存して閉じる」の順にクリックします。

# 動作確認

Mauticの「Contacts」画面から、顧客情報を新規作成します。Webhookは、Mautic SaaS版の無料プランでは、8～9分置きに実行されます。セルフホスティッド版では導入時に設定したCronの設定値に依存します。Webhookが実行されますと、Node-RED側の「デバッグ」に作成した顧客情報のメールアドレスが出力されているはずです。

![node-red_debug.PNG](https://qiita-image-store.s3.amazonaws.com/0/41414/65f6ab4d-51ec-35ef-9b9b-a2e927df01d6.png)

# まとめ

Mautic内の特定のイベントが発生したときにJSON形式でデータをPOSTする「Webhook」とNode-REDを用いることで、コーディングを極力減らして受け側のシステムやハードウェアにデータを渡すことができます。
Webhookは、Mautic上で顧客情報が更新や削除されたり、フォームを受信したときなど他のイベントがありますので、Node-REDを用いて試してみると良いでしょう。

# 参考資料
- Node-RED User Group Japan ドキュメント [こちらから](http://nodered.jp/docs/)