LambdaからHubSpotのコンタクトを作成・更新する
今回はAWS LambdaからHubSpotのAPIを叩く機会があったので、それについてまとめておきます。
調べてみると意外とやってみたという記事がほとんどなく、もしかしたら稀なケースなのかもしれません。
LambdaのランタイムはNode.jsを使用しています。
Lambda自体の動かし方については前回の記事でまとめているので、そちらをご覧ください。 suguru-no-rururu.hatenablog.com
HubSpotは開発者用のアカウントを作成すると、試しにコンタクトを作成したり削除できたりするので、作っておくことをお勧めします。 developers.hubspot.jp
モジュールをインストールし、zip化する
今回使用しているrequestですが、Lambdaでパッケージをインストールしなければならなかったので、その方法も記述しておきます。
手順
- ローカル環境(Desktopとか)にnodejs/node_modulesフォルダを作成
- nodejs/node_modulesで
$ npm install request @hubspot/api-client
$ zip -r request.zip nodejs/
でnodejsファイルごとzip化する(macであればfinderからzipすることも可能)
先ほど作成したzipをLambdaのレイヤーに追加する
Lambdaのサイドバー > レイヤーからレイヤーの作成を押します。
作成画面で先ほどzip化したファイルをアップロードします。 名前は任意のものを入力し、ランタイムはNode.jsとしておきます。
作成ができたら、Lambda関数のところに戻り、Layersからレイヤーの追加をします。
以上でレイヤーの追加は完了です。
コンタクトを取得する場合
var request = require("request"); var hs_get_options = { method: 'GET', url: `https://api.hubapi.com/contacts/v1/contact/email/${email}/profile`, qs: { hapikey: 'ここにHubSpotのAPIキーが入る' }} request(hs_get_options, function (error, response, body) { // このbodyにプロパティ情報が入っている // data.properties.hs_object_idなどで取り出し可能 const data = JSON.parse(body) })
コンタクトがなければ作成、あれば更新する場合
var request = require("request"); var options = { method: 'POST', url: `https://api.hubapi.com/contacts/v1/contact/createOrUpdate/email/{email}/`, qs: {hapikey: 'ここにHubSpotのAPIキーが入る'}, headers: { 'Content-Type': 'application/json'}, body: { properties: [ { property: 'firstname', value: '' }, { property: 'lastname', value: name }, { property: 'その他必要なproperty', value: '' } ] }, json: true }; // ------------------------------- const hs_response = { statusCode: 200, body: JSON.stringify(await new Promise((resolve, reject) => { request(options, (err, resp, b1) => { if (err) { } else { resolve(resp) } }) })), };
参考:
コンタクトを作成する場合
上のコードのurlをhttps://api.hubapi.com/contacts/v1/contact/
に変更
propertiesに{ property: 'email', value: '登録したいemailを入れる' }
を挿入すればOKです。
コンタクトを更新する場合
var request = require("request"); var hs_update_options = { method: 'POST', url: `https://api.hubapi.com/contacts/v1/contact/vid/{HubSpotのコンタクトのID}/profile`, qs: { hapikey: 'ここにHubSpotのAPIキーが入る' }, headers: { 'Content-Type': 'application/json' }, body: { properties: [ { property: '更新したい内部値', value: 'バリュー' } ] }, json: true }; request(hs_update_options, function (error, response, body) { }); }
参考:HubSpot APIドキュメント