質問&ディスカッション

nakamura_
参加者

ワークフローのカスタムコードで「コンタクト担当者」を自動で紐づけたい。

解決

ワークフローの「カスタムコード」を利用して、コンタクト担当者に自動的にHubSpotユーザーが登録されるフローを構築したいと思っているのですが、中々うまくいきません。

やりたいこととしては、

・フォームが送信される。

・送信されたタイミングで、フォームのURL末尾から5桁のIDを取得。そのIDに対してHubSpotユーザーIDを紐づける。

・紐づけられたHubSpotユーザーIDを「コンタクト担当者」に設定する。

 

下記のコードを作成し、実行しているのですが、うまくいきません。

言語は、Node.js 16.xで実行しています。

 

const hubspot = require('@hubspot/api-client');

// 店舗番号に基づく担当者マッピング(ユーザーIDを使用)
const ownerMappings = {
'12345': '1234567890' // 例: '12345' の店舗番号に対して担当者のHubSpotユーザーIDを設定
// 他の店舗番号と担当者のIDを追加
};

// メイン関数
exports.main = async (event, callback) => {
const hubspotClient = new hubspot.Client({
accessToken: process.env.HUBSPOT_ACCESS_TOKEN // 環境変数からアクセストークンを取得
});

// デバッグ用ログ出力
console.log('Event inputFields:', event.inputFields);

const contactId = event.inputFields['hs_object_id']; // コンソールからコンタクトIDを取得
const storeCode = event.inputFields['utm_source']; // フォームから送信された店舗番号を取得

console.log('Contact ID:', contactId); // デバッグ出力
console.log('Store Code:', storeCode); // デバッグ出力

if (!contactId) {
return callback({
outputFields: {
error_message: 'Contact ID is missing or undefined.'
}
});
}

if (!storeCode) {
return callback({
outputFields: {
error_message: 'Store code is missing or undefined.'
}
});
}

const ownerId = ownerMappings[storeCode];

if (!ownerId) {
return callback({
outputFields: {
error_message: `No owner mapping found for store code ${storeCode}`
}
});
}

try {
// 担当者プロパティの設定
const propertiesToUpdate = {
'hubspot_owner_id': ownerId // 'hubspot_owner_id' プロパティにHubSpotユーザーIDを設定
};

// コンセントオブジェクトのプロパティを更新
await hubspotClient.crm.contacts.basicApi.update(contactId, { properties: propertiesToUpdate });

callback({
outputFields: {
success: true,
contactId: contactId,
storeCode: storeCode,
hubspot_owner_id: ownerId
}
});
} catch (error) {
console.error('Error details:', error.response ? error.response.body : error.message);
callback({
outputFields: {
error_message: `Error updating contact: ${error.message}`
}
});
}
};

 

もし、解決方法をご存じの方がいらっしゃいましたらお教えいただけますと幸いです。

0 いいね!
1件の承認済みベストアンサー
skimura
解決策
トップ投稿者 | Platinum Partner
トップ投稿者 | Platinum Partner

ワークフローのカスタムコードで「コンタクト担当者」を自動で紐づけたい。

解決

@nakamura_ 

 

>マッピングが50件

となるとワークフローの分岐では厳しいですね、納得です。

 

添付いただいたものはAPIのログかと思います。

 

カスタムコードの担当者設定部分が正しく動作しているかを確認するためにカスタムコードのログを確認するのはどうでしょうか

(正しく動作している場合とうまく動かない場合の差異を確認)

 

1. `hubspotClient.crm.contacts.basicApi.update`のレスポンスをデバッグ出力するようにする

2. 上記関数の第二引数の型はSimplePublicObjectInputなのでそれを渡す

 

public async update(contactId: string, simplePublicObjectInput: SimplePublicObjectInput, idProperty?: string, _options?: Configuration):...
...

 

先のログを見るとAPIのリクエストbodyが空なので念の為。

 

https://github.com/HubSpot/hubspot-api-nodejs/blob/master/codegen/crm/contacts/apis/BasicApi.ts#L260

 

-「テスト」

-フォーム送信

1. 上記2種類のカスタムコードとhubspot APIのログを確認してそれぞれhs_object_id, utm_sourceが渡されていることを改めて確認。

2. 上記`update`関数が正常に実行されたことを確認(「テスト」から実行時の差異を確認)

差異があれば修正。

 

個人的にはカスタムコードのみでの開発は検証がやりにくいので

ローカル環境で概ね実装してからカスタムコードで検証しています。

 

どうぞご検討ください。

よろしくお願いします。

 

元の投稿で解決策を見る

0 いいね!
9件の返信
skimura
トップ投稿者 | Platinum Partner
トップ投稿者 | Platinum Partner

ワークフローのカスタムコードで「コンタクト担当者」を自動で紐づけたい。

解決

@nakamura_ 

 

ソースを確認させていただくと動作しそうですが、

エラー例外が発生するということでしょうか?

デバッグ出力も含め実行時のログを見せていただけないでしょうか。

 

※引数のhs_object_id, utm_source, 環境変数のHUBSPOT_ACCESS_TOKEN

が正しく設定されているかも気になります。

まずはデバッグ出力を確認させていただけますでしょうか。

 

よろしくお願いします。

 

@natsumimori 

お知らせいただきありがとうございます。

nakamura_
参加者

ワークフローのカスタムコードで「コンタクト担当者」を自動で紐づけたい。

解決

@skimura 様

ご回答いただき、誠にありがとうございます。

エラー例外が発生するというよりも、「コンタクトオブジェクト」の「コンタクト担当者」に指定したHubSpotユーザーの値が入らず、「担当者なし(未割り当て)」になってしまっておりました。

 

以下が実行時のログになっているのですが、今しがたご指摘いただいた「環境変数のHUBSPOT_ACCESS_TOKEN」の設定を変更したら、無事にコンタクト担当者に値が入りました。

どうやら、コード中の「HUBSPOT_ACCESS_TOKEN」に対して、「シークレット」の値を別名で設定していたためなのかなと思案しております。

nakamura__0-1723598168789.png

ただ、ログを確認すると、「出力フィールドが定義されていません。必ず、データ出力フォームで使用したのと同じ名前を使用してコードのoutputFieldsブロックで出力を定義してください。」というアラートが出されております。

 

HubSpotが不慣れなため、何度もお問い合わせしてしまい申し訳ございません。

お手数をおかけし申し訳ございませんが、アドバイスをいただけますと幸いでございます。

 

 

0 いいね!
skimura
トップ投稿者 | Platinum Partner
トップ投稿者 | Platinum Partner

ワークフローのカスタムコードで「コンタクト担当者」を自動で紐づけたい。

解決

@nakamura_ 

 

>「出力フィールドが定義されていません」

カスタムコードで出力に渡しているフィールドは

ワークフローの「カスタムコード」の設定内で同じフィールドを定義する必要があります。

 

添付画像を参照ください。

 

赤枠の「出力を追加」から

コードでの定義に一致するフィールド名及び型を定義する必要があります。

こちら設定されていますでしょうか。(緑枠のような定義が必要かと思います:型は適当です)

 

※後のワークフローで利用する場合は

 例外時に出力するフィールド`error_message`の定義も必要かと思います。

 

スクリーンショット 2024-08-14 10.32.38.png

 

確認いただき、必要なら定義して再実行してみていただけますでしょうか。

 

よろしくお願いします。

0 いいね!
nakamura_
参加者

ワークフローのカスタムコードで「コンタクト担当者」を自動で紐づけたい。

解決

@skimura 

ご回答いただき誠にありがとうございます。出力フィールドが定義されていませんにつきまして、

エラーのアラートが解決されました。本当にありがとうございました。

 

ただ、コンタクト担当者への紐づけですが、私の勘違いでございまして、

ワークフロー内の「テスト」を利用し、コンタクトレコードを指定して実行すると、

確かにコンタクト担当者は紐づく(レコードに値が入る)のですが、

実現したい、フォーム送信後に自動的にコンタクト担当者に値が入るということができておりませんでした。

ワークフローは、緑入りの枠の「カスタムコード」で「コンタクト担当者」を設定するようなフローなのですが、「コンタクト登録トリガー」と「カスタムコード」の間の箇所に別のアクションが必要だったりするのでしょうか。

nakamura__0-1723603227591.png

何度も申し訳ございません。

 

 

0 いいね!
skimura
トップ投稿者 | Platinum Partner
トップ投稿者 | Platinum Partner

ワークフローのカスタムコードで「コンタクト担当者」を自動で紐づけたい。

解決

@nakamura_ 

 

>実現したい、フォーム送信後に自動的にコンタクト担当者に値が入るということができておりませんでした。

「テスト」からの起動では担当者が設定されるというのは気になります。

`hubspotClient.crm.contacts.basicApi.update`は正しく実行が完了したのでしょうか。

hubspot APIのレスポンスをログ出力して「テスト」時と通常時の違いを確認し担当者が設定されない原因を調査いただけますか。

 

また、`ownerMappings`ですがマッピングの件数は多いのでしょうか。(十件以上、頻繁に変更される等)

数件、ということであればカスタムコードではなくワークフローの分岐を使う手段もあるかと、今更ですが思いました。

 

よろしくお願いします。

 

nakamura_
参加者

ワークフローのカスタムコードで「コンタクト担当者」を自動で紐づけたい。

解決

@skimura 様

ご回答いただき誠にありがとうございます。

hubspot APIのレスポンスをログ出力してみたところ、リクエストのヘッダーが空({})であることが判明しました。。また、レスポンスも返ってきておりませんでした。。

以下が、該当のワークフローのログの情報になっております。

 

nakamura__0-1723607131851.png

 

>また、`ownerMappings`ですがマッピングの件数は多いのでしょうか。

ご指摘いただきありがとうございます。こちらですが、最大で50件ほどございまして、

頻繁ではないのですが、年に2~3回ほど変更がある想定でございます。

 

どうぞよろしくお願いいたします。

 

0 いいね!
skimura
解決策
トップ投稿者 | Platinum Partner
トップ投稿者 | Platinum Partner

ワークフローのカスタムコードで「コンタクト担当者」を自動で紐づけたい。

解決

@nakamura_ 

 

>マッピングが50件

となるとワークフローの分岐では厳しいですね、納得です。

 

添付いただいたものはAPIのログかと思います。

 

カスタムコードの担当者設定部分が正しく動作しているかを確認するためにカスタムコードのログを確認するのはどうでしょうか

(正しく動作している場合とうまく動かない場合の差異を確認)

 

1. `hubspotClient.crm.contacts.basicApi.update`のレスポンスをデバッグ出力するようにする

2. 上記関数の第二引数の型はSimplePublicObjectInputなのでそれを渡す

 

public async update(contactId: string, simplePublicObjectInput: SimplePublicObjectInput, idProperty?: string, _options?: Configuration):...
...

 

先のログを見るとAPIのリクエストbodyが空なので念の為。

 

https://github.com/HubSpot/hubspot-api-nodejs/blob/master/codegen/crm/contacts/apis/BasicApi.ts#L260

 

-「テスト」

-フォーム送信

1. 上記2種類のカスタムコードとhubspot APIのログを確認してそれぞれhs_object_id, utm_sourceが渡されていることを改めて確認。

2. 上記`update`関数が正常に実行されたことを確認(「テスト」から実行時の差異を確認)

差異があれば修正。

 

個人的にはカスタムコードのみでの開発は検証がやりにくいので

ローカル環境で概ね実装してからカスタムコードで検証しています。

 

どうぞご検討ください。

よろしくお願いします。

 

0 いいね!
nakamura_
参加者

ワークフローのカスタムコードで「コンタクト担当者」を自動で紐づけたい。

解決

@skimura 様

ご回答いただきありがとうございます。

また、デバック方法についてご教示いただきありがとうございます。

カスタムコードのログ確認について、いただいた方法にて、調べながら実践してまいりたいと思います!

0 いいね!
natsumimori
コミュニティーマネージャー
コミュニティーマネージャー

ワークフローのカスタムコードで「コンタクト担当者」を自動で紐づけたい。

解決

@nakamura_ さん、コミュニティーへの投稿ありがとうございます。

Developer's Forum(英語サイト)に投稿いただいていたため、こちらの日本語版HubSpotコミュニティーに移動させていただきました。

 

@skimura さん> カスタムコードについてなのですが、アドバイスいただくことは可能でしょうか?