kintoneはサイボウズ社が提供するビジネスアプリ作成プラットフォームです。kintoneのユーザーはプログラミング無しでクラウドベースのビジネスアプリを作成し、アプリをチームで共有できます。このプラットフォームは特に日本の中小企業で広く採用されており、2016年と2017年にはガートナーの「Enterprise Application Platform as a Service」マジック・クアドラントにSalesforce社などと一緒にノミネートされました。
kintoneはノンプログラミングでの利用が想定されていますが、APIを利用して複雑なシステム連携を実現することも可能です。本記事では、APIを利用してkintoneとハブスポットを連携させる方法について解説します。
Zapierを利用した連携
このドキュメントで紹介しているように、Zapierはkintoneとハブスポットの連携サービスを提供しています。しかしながら、その機能は限られています。例えば、下記のような連携は実現できません。
- kintoneで行ったレコードの変更をハブスポットのコンタクトに同期する
- ハブスポットのコンタクトページへのURLをkintoneのレコードに格納する
- ハブスポットのタイムラインイベントを作成する
またZapierの無償プランでは月に100タスクしか実行できないため、現実的な運用を考えると有償プランが必要になるでしょう。
コーディング作業は必要になりますが、kintoneとハブスポットのAPIを利用することで柔軟な連携が可能となり、また通常は追加料金なしでの運用が可能です(kintoneは1アプリで1日10,000リクエストまで利用可能。ハブスポットは1日40,000リクエストまで利用可能です)。ぜひ以下の手順をご参考に、APIの利用をご検討下さい。
kintone基本 & 活用ガイド
kintoneの主なメリットや導入事例をわかりやすく解説
- kintoneの概要
- アプリの機能を紹介
- スペースと拡張機能の解説
- kintoneの主な用途と導入事例
今すぐダウンロードする
全てのフィールドが必須です。
ハブスポットコンタクトをkintoneに追加する
ハブスポットのワークフロー機能には「Webhook」というアクションがあり、これを利用することで任意のタイミングで他システムにコンタクトのデータ(フォーマットはJSON)を送信することが可能です。例えば、コンタクトのライフサイクルステージが「MQL(マーケティングクオリファイドリード)」になったタイミングで該当のコンタクトをkintoneのデータベースに追加する、といった運用が可能です。
この連携を実現するためには、ハブスポットからのWebhookリクエストを受け取るサーバープログラムを準備する必要があります。私はサーバープログラムを作成し、Google Cloud Platformにデプロイしました。このプログラムでは前述のWebhookアクションのHTTPリクエストを受け取り、kintoneのAPIを実行して、kintoneのデータベースにコンタクトのレコードを作成します。
下記はPythonでのサンプルコードです(※便宜上、プログラミング言語にPythonを利用してますが、実際にはPHPやJavaなど、どのような言語でも問題ありません)。
kintone_api_key = 'XXXXXXXXXXXXXXXXXX'
...
@app.route("/kintone-sync", methods = ['POST'])
def kintone_sync():
vid = request.json.get('vid')
p = request.json.get('properties')
obj = {
'app': '1',
'record' : {
'name': {
'value': f"{p['lastname']['value']} {p['firstname']['value']}"
},
'email': {
'value': f"{p['email']['value']}"
},
'company': {
'value': f"{p['company']['value']}"
},
'lifecyclestage': {
'value': 'Marketing Qualified Lead'
},
'vid': {
'value': vid
},
'hubspot': {
'value': f"https://app.hubspot.com/contacts/{portal_id}/contact/{vid}"
}
}
}
url = 'https://XXXXXXXX.cybozu.com/k/v1/record.json?'
headers = {
'X-Cybozu-API-Token' : kintone_api_key,
'Content-Type': 'application/json'
}
res = requests.post(url, headers=headers, json=obj)
print(res.json)
return 'OK'
コンタクトの「firstname」や「lastname」、「email」、「company」、「lifecyclestage」などの情報をkinotneに送信しています。また「vid」も送信データに含めています。「vid」はハブスポットのコンタクトのプライマリーキーで、kintone側での変更をハブスポットに同期する際に利用します。
さらにkintoneのアプリ画面からハブスポットの該当コンタクトのページを参照できるよう「vid」を利用してコンタクトページのURLを作成し「hubspot」プロパティの値に設定しました。これらの値を受け取るためには、kintone側で予め対応するカスタム・プロパティを作成しておく必要がある点にご注意下さい。
ハブスポットのコンタクトがMQLになったタイミングで、自動的にkintoneのデータベースにコンタクトのレコードが作成されるようになりました。
kintoneでの変更をハブスポットと同期する
続いて、kintoneでのコンタクトの「ライフサイクルステージ」の変更をハブスポットに同期したいと思います。ここではkintoneの「Webhook」機能を利用します。この機能を利用することで、kintoneでコンタクトのレコードが更新されたタイミングで、ハブスポットにコンタクトのデータ(フォーマットはJSON)を送信できます。設定は非常に簡単で、アプリの設定画面で「Webhook URL」を指定するだけです。また通知を送信する条件に「レコードの編集」を指定しました。
続いて、kintoneからのWebhookリクエストを受け取るサーバープログラムを準備する必要があります。私はサーバープログラムを作成し、Google Cloud Platformにデプロイしました。このプログラムでは前述のWebhookのHTTPリクエストを受け取り、ハブスポットのAPIを実行して、ハブスポットのコンタクトのデータを更新します。
下記はPythonでのサンプルコードです。
hubspot_api_key = 'XXXXXXXXXXXXXXXXXXX'
...
@app.route("/hubspot-sync", methods = ['POST'])
def hubspot_sync():
rec = request.json.get('record')
url = f"https://api.hubapi.com/contacts/v1/contact/vid/{rec['vid']['value']}/profile?hapikey={hubspot_api_key}"
stage = rec.get('lifecyclestage').get('value').lower().replace(' ', '')
obj = {
'properties' : [
{
"property": "lifecyclestage",
"value": stage
}
]
}
res = requests.post(url, json=obj)
print(res.json)
return 'OK'
レコードで保持している「vid」の値を、ハブスポットでの対象のコンタクトを指定するために利用しています。kintoneはドロップダウン項目の値を「value」と「label」の組み合わせで管理しない点に注意が必要です。値を「label」のみで管理します。これはハブスポット側のドロップダウン項目とは異なる部分です。そのため、ハブスポット側でデータを受け取ることができるよう値を変換しています。
kintone側でレコードを編集した際に、ハブスポットのコンタクトのライフサイクルステージと値が同期されるようになりました。
ライフサイクルステージの変更を同期することにより、ハブスポットのマーケティングダッシュボードで、リードがどれくらい顧客化されたのかを確認できるようになります。この数字は、マーケティング活動の結果を把握する際に役立つでしょう。
まとめ
kintoneは非常に柔軟なアプリ作成プラットフォームです。ハブスポットのユーザーはkintoneを利用することで、会社固有の運用にあわせたビジネスアプリを簡単に作成できます。一方、kintoneユーザーは、ハブスポットを利用することで、インバウンドマーケティングによる高品質なリードを収集できるようになります。本記事では、ハブスポットとkintoneの基本的な連携シナリオについて説明しました。この記事がお役に立ちますと嬉しく存じます。