Node.jsでIntercomのカスタマーを作成・更新する
アプリやサービスからIntercomにデータを連携させる必要が出てきたので、色々試してみました。 ライブラリを追加する IntercomにはSDKがありますので、これをインストールしましょう。 Note: momentは […]
目次
アプリやサービスからIntercomにデータを連携させる必要が出てきたので、色々試してみました。
ライブラリを追加する
IntercomにはSDKがありますので、これをインストールしましょう。
$ npm i -S intercom-client moment
Note: momentはなくても大丈夫です
signed_up_at
の値を作るためにmoment
を入れています。Cognito User PoolsのトリガーやStripeのWebhookなどで連携できる場合、momentはいらないかもしれません。
Intercomのtokenを埋め込む
.env
や.envrc
にtokenを入れておきましょう。さすがにコードに入れてコミットするのは蛮勇かなと思います。AWSであれば、SSMのパラメーターストアやKMSでの暗号化なども良いでしょう。
export INTERCOM_DEV_TOKEN="token"
export INTERCOM_PROD_TOKEN="token"
テストと本番でtokenが変わるので、Serverless Frameworkのステージなどを使って判定するとよいでしょう。
const Intercom = require('intercom-client')
// 環境変数を取得
const { stage, INTERCOM_DEV_TOKEN, INTERCOM_PROD_TOKEN } = process.env
// 使用するtokenを決定
const token = stage === 'production' ? INTERCOM_PROD_TOKEN : INTERCOM_DEV_TOKEN
// Clientを立ち上げ
const client = new Intercom.Client({ token })
カスタマーを作成する
カスタマーの作成は、client.users.create
を使用します。
/* eslint-disable no-console */
const Intercom = require('intercom-client')
const moment = require('moment')
const { stage, INTERCOM_DEV_TOKEN, INTERCOM_PROD_TOKEN } = process.env
const token = stage === 'production' ? INTERCOM_PROD_TOKEN : INTERCOM_DEV_TOKEN
const client = new Intercom.Client({ token })
const run = async () => {
try {
const user = {
email: '[email protected]',
signed_up_at: moment().unix()
}
const result = await client.users.create(user)
console.log(`Status: ${result.statusCode} - ${result.statusMessage}`)
console.log('result: %j', result.body)
} catch (e) {
console.log(e)
}
}
run()
実行すると、こんな感じで結果が出ます。
Status: 200 - OK
result: {"type":"user","id":"5bc7f1b2aba7ac1206a80814","user_id":null,"anonymous":false,"email":"[email protected]","phone":null,"name":null,"pseudonym":null,"avatar":{"type":"avatar","image_url":null},"app_id":"bdguin94","companies":{"type":"company.list","companies":[]},"location_data":{},"last_request_at":null,"last_seen_ip":null,"created_at":1539830194,"remote_created_at":1539830285,"signed_up_at":1539830285,"updated_at":1539830284,"session_count":0,"social_profiles":{"type":"social_profile.list","social_profiles":[]},"unsubscribed_from_emails":false,"marked_email_as_spam":false,"has_hard_bounced":false,"user_agent_data":null,"tags":{"type":"tag.list","tags":[]},"segments":{"type":"segment.list","segments":[]},"custom_attributes":{},"referrer":null,"utm_campaign":null,"utm_content":null,"utm_medium":null,"utm_source":null,"utm_term":null,"do_not_track":null}
注意点
Intercomの管理画面からみるとわかるのですが、ブラウザから取れる情報がことごとくない状態です。
基本的にはブラウザ側のSDKからユーザーを作成し、サーバー側のSDKでは更新や削除などの操作に留める方針にした方が良さそうです。
更新
更新はclient.users@update
で実行できます。
/* eslint-disable no-console */
const Intercom = require('intercom-client')
const { stage, INTERCOM_DEV_TOKEN, INTERCOM_PROD_TOKEN } = process.env
const token = stage === 'production' ? INTERCOM_PROD_TOKEN : INTERCOM_DEV_TOKEN
const client = new Intercom.Client({ token })
const run = async () => {
try {
const user = {
email: '[email protected]',
name: 'John doe',
phone: '+81901234567'
}
const result = await client.users.update(user)
console.log(`Status: ${result.statusCode} - ${result.statusMessage}`)
console.log('result: %j', result.body)
} catch (e) {
console.log(e)
}
}
run()
email
かuser_id
・またはanonymous_id
のいずれかが必須ですので、Firebase / Cognito User Poolsなどと連携する場合はEmailを、Stripeなどではemailをattributesとして持たせるか、create時の戻り値からuser_id
を割り振るとよいでしょう。