🦒
[Next.js]HubSpot APIで会社に関連付けたコンタクトを作成する方法
1. associations APIを使う方法
ライブラリの公式Docに書いてある方法。
APIを2回リクエストする。
async createContact(
companyId: string,
contact: Partial<ContactData['properties']>
): Promise<any> {
const res = await this.apiClient.crm.contacts.basicApi.create({
properties: {
...contact,
},
associations: []
})
await this.apiClient.crm.associations.v4.basicApi.create(
'companies',
Number(companyId),
'contacts',
Number(res.id),
[
{
associationCategory: 'HUBSPOT_DEFINED',
associationTypeId: AssociationTypes.companyToContact,
},
]
)
return res
}
2. 外部キーフィールドを使う方法
APIのリクエストは1回で済むが、公式によるとread-onlyのプロパティのため、使うべきではない。
hubspot-api-nodejsでは一応期待通りレコードは作成された。
async createContact(
companyId: string,
contact: Partial<ContactData['properties']>
): Promise<any> {
const res = await this.apiClient.crm.contacts.basicApi.create({
properties: {
...contact,
associatedcompanyid: companyId,
},
associations: []
})
return res
}
3. associationsプロパティを使う方法
basicApi.createの型定義に合わせて、associationsを指定する。
この方法だとエラーになったので、動作するところまで確認できていない。
async createContact(
companyId: string,
contact: Partial<ContactData['properties']>
): Promise<any> {
const res = await this.apiClient.crm.contacts.basicApi.create({
properties: {
...contact,
},
associations: [
{
to: {
id: companyId,
},
types: [
{
associationCategory: 'HUBSPOT_DEFINED',
associationTypeId: AssociationTypes.companyToContact,
},
],
},
],
})
return res
}
結論
1の方法が公式Doc通りなので、望ましそう。
Discussion