みかづきブログ・カスタム

基本的にはちょちょいのほいです。

@hubspot/api-clientを使ってHubSpotのdealを取得する 🛒

f:id:kimizuka:20201215183305p:plain

ものすごくニッチな記事になりますが、未来の自分のためにも書き残しておきます。

HubSpotとは

www.hubspot.jp

一言で言うと、「EC特化型のCRMツール」とのことです。
なんだそりゃという感じですが、ざっくり言えばECサイトに特化したアナリティクスのようなものです。
顧客管理や注文管理などができます。

ことの発端

現在開発を手伝っているECサイトがHubSpotを使って取引を管理しているのですが、取引のリストをAPIで引っ張ってこれないかという検証を頼まれたので調査を開始しました。

dealとは

HubSpotで取引はdealと表現されています。(dealを日本語に訳すと「引き合い」という意味のようです)

knowledge.hubspot.com

なので、取引のリストを引っ張ってくるというのは、「全てのdealを取得する」と同義です。

APIを調べる

developers.hubspot.jp

早速APIを探すべく、公式ページから情報を探したのですが、全然わかりませんでした。
唯一わかったのはnpmに公式のAPIクライアント(@hubspot/api-client)があることぐらいです。

@hubspot/api-client - npmを調べる

www.npmjs.com

READMEを読んでなんとなく雰囲気を掴み、あとはソースを読みながら試すことにしました。

github.com

メソッドを見つける

github.com

ついに見つけました。

deals: {
  associationsApi: DealsAssociationsApi
  basicApi: DealsBasicApi
  batchApi: DealsBatchApi
  searchApi: DealsSearchApi
  getAll: (
    limit?: number,
    after?: string,
    properties?: string[],
    associations?: string[],
    archived?: boolean,
    options?: { headers: { [name: string]: string } },
  ) => Promise<dealsModels.SimplePublicObject[]>
}

deals.getAll()でPromiseが返ってくるようです。
こういうときにTypeScriptの便利さを痛感しますね。
引数と型が丸わかりです。

メソッドを叩いてみる

require('dotenv').config();

const { apiKey } = process.env;
const hubspot = require('@hubspot/api-client');
const hubspotClient = new hubspot.Client({ apiKey });

(async () => {
  const deals = await hubspotClient.crm.deals.getAll();

  console.log(deals);
})();

試しにこんなコードを書いてみたところ、バッチリdealが全件取得できました。ミッションコンプリートです。