LambdaからHubSpotのコンタクトを作成・更新する

今回はAWS LambdaからHubSpotのAPIを叩く機会があったので、それについてまとめておきます。
調べてみると意外とやってみたという記事がほとんどなく、もしかしたら稀なケースなのかもしれません。
LambdaのランタイムはNode.jsを使用しています。

Lambda自体の動かし方については前回の記事でまとめているので、そちらをご覧ください。 suguru-no-rururu.hatenablog.com

HubSpotは開発者用のアカウントを作成すると、試しにコンタクトを作成したり削除できたりするので、作っておくことをお勧めします。 developers.hubspot.jp

モジュールをインストールし、zip化する

今回使用しているrequestですが、Lambdaでパッケージをインストールしなければならなかったので、その方法も記述しておきます。

手順

  1. ローカル環境(Desktopとか)にnodejs/node_modulesフォルダを作成
  2. nodejs/node_modulesで$ npm install request @hubspot/api-client
  3. $ zip -r request.zip nodejs/nodejsファイルごとzip化する(macであればfinderからzipすることも可能)

先ほど作成したzipをLambdaのレイヤーに追加する

Lambdaのサイドバー > レイヤーからレイヤーの作成を押します。 f:id:katttsu105:20210501205905p:plain

作成画面で先ほどzip化したファイルをアップロードします。 f:id:katttsu105:20210501210232p:plain 名前は任意のものを入力し、ランタイムはNode.jsとしておきます。

作成ができたら、Lambda関数のところに戻り、Layersからレイヤーの追加をします。 f:id:katttsu105:20210501210350p:plain

以上でレイヤーの追加は完了です。

コンタクトを取得する場合

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)
                }
            })    
        })),
    };

参考:

legacydocs.hubspot.com

コンタクトを作成する場合

上のコードの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ドキュメント

legacydocs.hubspot.com

developers.hubspot.com