日本の営業現場では、名刺は非常に重要な役割を果たします。HubSpotでは名刺を扱う機能が限られているため、「Sansan」との連携に関する問い合わせをお客様から多く頂きます。Sansanは2007年から名刺管理のプラットフォームを提供しており、日本の中小企業からグローバル企業まで7,000社以上の企業で採用されています。日本における名刺管理サービスのリーダーであると言えるでしょう。
ZapierはSansanとの連携をサポートしています。そのためZapierを利用することで、Sansanでの名刺登録をトリガーに、HubSpotに新しいコンタクトを追加できます。これは多くのお客様が望む連携シナリオで、ほとんどのケースではそれで十分かと存じます。
しかしながら、SansanとHubSpotの公開APIを利用することで、それ以上のことを実現することも可能です。本記事ではそれらのAPIを利用して連携を行う方法について紹介します。
リードのデータエンリッチメント
一般的に、サイトの訪問者は個人情報を提供することにあまり乗り気ではありません。そのためサイトのフォームで収集できる情報は限られたものになります。SansanのAPIを利用することで、収集したリードにさらなる情報を追加できる場合があります。
以下はAPIの利用例です。まず初めに、HubSpotでWebhookアクションを持つワークフローを定義します。このワークフローでは、サイトの訪問者がフォームでメールアドレスを送信した後、中間サーバーのプログラムをコールします。中間サーバーのプログラムではSansanのAPIをコールし、対象のメールアドレスで登録されている名刺情報を取得します。既にSansan上にデータがある場合は、その情報をHubSpotのデータベースでも使うことが可能です。
HubSpotからのWebhookリクエストを受け取るためのサーバープログラムを準備します。以下はサーバープログラムのサンプルです。(※便宜上、プログラミング言語にPythonを利用してますが、実際にはPHPやJavaなど、どのような言語でも構いません)。
```
def retrieve_from_sansan(email):
url = 'https://api.sansan.com/v1.2/bizCards/search/'
headers = { 'X-Sansan-Api-Key' : sansan_api_key }
payload = { 'email' : email }
response = requests.get(url, headers=headers, params=payload)
return response.json().get('data', [])
def sync_to_hubspot(email, record):
url = f"https://api.hubapi.com/contacts/v1/contact/createOrUpdate/email/{email}/?hapikey={hubspot_api_key}"
obj = {
'properties' : [
{
"property": "lastname",
"value": record.get('lastName')
},
{
"property": "firstname",
"value": record.get('firstName')
},
{
"property": "company",
"value": record.get('companyName')
},
{
"property": "postalCode",
"value": record.get('zip')
},
{
"property": "state",
"value": record.get('prefecture')
},
{
"property": "city",
"value": record.get('city')
},
{
"property": "address",
"value": record.get('street')
},
{
"property": "phone",
"value": record.get('tel')
},
{
"property": "fax",
"value": record.get('fax')
}
]
}
response = requests.post(url, json=obj)
return 'OK'
def get_latest_record(data):
data.sort(key=lambda x: x["registeredTime"], reverse=True)
return data[0]
@app.route("/sansan-sync", methods = ['POST'])
def sansan_sync():
properties = request.json.get('properties')
email = properties.get('email', {}).get('value')
data = retrieve_from_sansan(email)
if len(data) == 0:
return 'No Data'
record = get_latest_record(data)
return sync_to_hubspot(email, record)
メールアドレスをキーにSansanの名刺データを取得する際、複数のレコードが返される場合があります(複数の担当者が同じ名刺を登録している等)。サンプルでは登録日が新しい名刺の情報を利用するようにしています。
また私はGoogle Cloud Platformを中間サーバーとして利用していますが、どのようなサーバーでもインターネットに公開されている限りは問題ありません。
これでメールアドレスとSansanのデータベースを利用して、コンタクトの情報をエンリッチできるようになりました。
HubSpotに新しいコンタクトを追加する
Sansanに新しい名刺が追加された際に、HubSpotに新しいコンタクトを追加する。これはSansanと連携したいハHubSpotのお客様のよくあるご要望です。これについてはZapierで実現できますが、APIでも同じことを実現できます。APIを使うことでより柔軟な連携が可能で、またZapierを利用するための追加費用も要りません。
リアルタイムでの同期が必要ない場合、cronジョブの利用が最適かと思われます。一日一回実行されるジョブをスケジューリングし、Sansanから名刺データを取得し、HubSpotにコンタクトを追加します。
下記はPythonでのサンプルコードです。
@app.route("/hubspot-sync", methods = ['GET'])
def hubspot_sync():
try :
# cronジョブからのリクエスト以外はエラーにする
is_cron = request.headers['X-Appengine-Cron']
url = 'https://api.sansan.com/v1.2/bizCards/'
headers = { 'X-Sansan-Api-Key' : sansan_api_key }
suffix = 'T00:00:00+09:00'
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
payload = { 'registeredFrom' : str(yesterday) + suffix,
'registeredTo' : str(today) + suffix }
response = requests.get(url, headers=headers, params=payload)
data = response.json().get('data', [])
for record in data:
sync_to_hubspot(record.get('email'), record)
except KeyError as e:
return 'Rejected non-Cron request'
return 'OK'
私はGoogle Cloud Platform上でcronジョブをスケジューリングしました。以下は参考の設定ファイルです。もちろん、ジョブはどのようなプラットフォームで用意しても問題ありません。
cron:
- description: "Daily Sync from Sansan to HubSpot"
url: /hubspot-sync
schedule: every 24 hours
まとめ
Zapierを利用することで、SansanとHubSpot連携させることは可能です。しかしながら、APIを利用した連携もそれほど複雑ではありません。柔軟な連携が実現できると共に、費用の節約にもなるでしょう。この記事がお役に立ちますと嬉しく存じます。