🌊
HubspotとLaravel連携
目的
アップデートのお知らせとかメンテナンスのお知らせとか、システムから直接通知飛ばした方が良いケースもあれば、CRMの方に連絡先共有して、CRM上で適宜連絡するケースが良い場合もある。
今回のケースにおいては、定期的に現在アクティブなユーザーリストをピックしてHubsportのコンタクトリストを作成するために連携する。
環境
HubspotのApiはv3が最新なのでそちらを使いたいが、いくつかのリソースは未対応なのでレガシーVerを使う。
最新Ver(一部リソース未対応)
レガシー
laravel9
php8.1
auth tokenの取得
- Hubspotのアカウントにログインして設定ページへ移動
- サイドメニューの非公開アプリを選択して、作成
- oAuth2 tokenが発行できるのでコピー
- アプリの権限も決められるので適宜設定
- 今回はリスト作れればいいのでリストとコンタクトのRead/Writeつける。
package install
composer require "hubspot/hubspot-php"
command書く
ExportEmails.php
public function handle(UserRepository $userRepository)
{
$token = config('app.hubspot_token');
if (! $token) {
echo 'Hubspot token is not provided. process skipped.'.PHP_EOL;
return 0;
}
$hubspot = Factory::createWithOAuth2Token($token);
$contact_chunks = $userRepository->getUsers()->map(function ($user) {
return ['email' => $user->email, 'properties' => [['property' => 'firstname', 'value' => $user->name]]];
})->chunk(1000);
$contact_chunks->map(function ($contacts) use ($hubspot) {
$hubspot->contacts()->createOrUpdateBatch($contacts->toArray());
});
$list_name = (new Carbon())->format('Y-m-d H:i:s');
$list = $hubspot->contactLists()->create(['name' => $list_name]);
$list_id = $list->getData()->listId;
$email_chunks = $contact_chunks->flatten(1)->pluck('email')->chunk(500);
$email_chunks->map(function ($emails) use ($hubspot, $list_id) {
$hubspot->contactLists()->addContact($list_id, [], $emails->toArray());
});
return 1;
}
update_or_create batch
いちいち存在確認しなくてもbatch upsert的なこと可能。上限あり(Max:1000件 per request)create contacts list
add contacts to list
emailでもidでも追加可能。それぞれ上限あり。(Max:500 emails/ids per request)ちなみに、listにメールアドレスだけ詰め込めるかなと思ったらコンタクトがあること前提になるので、コンタクトのUpsert経てからリストに追加するような処理にしました。
スケジューリング
頻度に応じてで良いかと思いますが、Kernel.phpに追記
$schedule->command('export:userEmails')->everyFifteenMinutes()->environments('production')->onOneServer();
Discussion