こんにちは、シタテルエンジニアの工です!
今回は、SansanとHubSpotの連携の仕方について書いていきます 🚀
はじめに
シタテルでは、衣服生産をSCS、マーケティング・営業の部分をHubSpotを使って管理しています。
HubSpotを導入する際に、Sansanの情報をHubSpotに同期したいという要望があったので、SansanのAPIとHubSpotのAPIを組み合わせて同期処理を実装しました。
AWSLambdaを使って、定期的に同期処理を実行しています。
HubSpot公式にもSansanとハブスポットの連携の仕方という記事も公開されていますので参考にしてみてください。
Sansanの名刺情報をHubSpotにインポートする
使うもの
余談ですが実装したときAWSLambdaにはRubyの選択肢がなかったのですが、今は使用できるみたいですね。
普段はRubyを使うことが多いので、次にLambdaを使うときはRubyで実装してみたいです。
Sansanの情報を取得
handler.js
const axios = require('axios')
const moment = require('moment')
axios.defaults.headers.common['X-Sansan-Api-Key'] = process.env.SANSAN_API_KEY
axios.defaults.headers.get['Content-Type'] = 'application/json'
module.exports.importSansanData= async (event, context, callback) => {
var updatedFrom = moment().subtract(2, 'hours').format("YYYY-MM-DDTHH:mm:ss")+"Z"
var updatedTo = moment().format("YYYY-MM-DDTHH:mm:ss")+"Z"
await axios.get(`https://api.sansan.com/v2.0/bizCards?updatedFrom=${updatedFrom}&updatedTo=${updatedTo}&range=all`)
.then(function (response) {
importHubspot(response)
callback(null, response.data)
})
.catch(function (error) {
callback(error)
});
};
詳しくはこのあたりを参考にしてください。
AWSLambdaとServerlessを使ってみる[第1回]
AWSLambdaとServerlessを使ってみる[第2回]
日時取得のところがとてもブサイクです... 😢
なぜかタイムゾーンZにしないとうまくいかなっかった 🤔
本当は+09:00
に設定したい。
var updatedFrom = moment().subtract(2, 'hours').format("YYYY-MM-DDTHH:mm:ss")+"Z"
var updatedTo = moment().format("YYYY-MM-DDTHH:mm:ss")+"Z"
HubSpotにインポート
取得したSansanデータをインポート。
propertyは数が多いのでほとんど割愛して記載します。
handler.js
function importHubspot (response) {
response.data.data.forEach(createContact)
}
function createContact (value, index) {
var properties = [
{
property: 'email',
value: value.email
},
{
property: 'firstname',
value: value.firstName
},
{
property: 'lastname',
value: value.lastName
}
]
axios.post(`https://api.hubapi.com/contacts/v1/contact?hapikey=${process.env.HUBSPOT_API_KEY}`, {
properties: properties,
})
.then(function (response) {
console.log(response.data)
})
.catch(function (error) {
console.error(error.response.data)
});
}
上の例はひとつひとつPOSTしていますが、こちらのAPI使えば1回のPOSTでまとめてCreateできます。
Create or update a group of contacts | Contacts API
CloudWatchでスケジュールを設定
serverless.ymlにスケジュールを設定します。
2時間おきにインポート 🚀
serverless.yml
functions:
importSansanData:
handler: handler.importSansanData
events:
- schedule: cron(0 */2 * * ? *)
これで2時間おきに、Sansanの名刺情報がHubSpotのコンタクトに同期されます!👏
最後に、deploy 🚀
serverless deploy -v
まとめ
今回はSansanとHubSpotのAPIを使って、Sansanの名刺情報をHubSpotのコンタクトにインポートする方法について書きました。
SCSと外部サービスとの連携は今後もどんどん加速していくと思います!マーケティング・営業 -> 衣服生産 -> 請求
この流れがシステムでシームレスに実現できるように開発中です 💻