📖

Hubspotのカスタムコードを使って期日を指定したタスクを作る

2022/12/26に公開

この記事で分かること

Hubspotではワークフローを使うと「タスク」を自動的に作ることができます。しかしこの機能を使っても期日の設定はこの2パターンしか存在しません。

  • 即時
  • oo日後

一方でタスクの期日には、これらの日付を使いたいという要望がしばしばありました。ここではカスタムコードを使ってこれを実現する方法をまとめます。

  • カレンダーの特定の日付を指定する
  • オブジェクトのプロパティに入れた日付

必要なこと

手順

  1. API Keyを取得する
  2. タスクを作成する
  3. タスクを編集する

API Keyを取得する

カスタムコードを作るためには、まず API Key を作成する必要があります。そのためには設定画面から「非公開アプリ」を作成しましょう。名前やロゴ、説明は分かりやすいものになっていれば何でも大丈夫です。

ただし「スコープ」は適切に設定してあげる必要があります。

スコープ

スコープはやりたいことに応じて適切に設定します。よく使うものとしては crm.objects.deals のようにオブジェクトを編集するようなものや、crm.objects.owners のような担当者の情報を取得するものがあります。

今回は取引のタスクを編集するので、取引に関するREAD/WRITEの権限チェックを入れています。これがないと画像のようなエラーが起きてしまいます。他のオブジェクトのタスクを編集したいときは随時他の権限を追加してください。

  • crm.objects.deals.read
  • crm.objects.deals.write

API Keyをコピーする

非公開アプリを作成したら次にAPI Keyをコピーします。カスタムコードではこちらのコピーした値を使用します。これを漏らすとHubspotの情報漏洩に繋がるため、厳重に管理します。

タスクを作成する

最初からカスタムコードでタスクを作ることもできますが、個人的にはワークフロー上で作成したものを「編集」するのがお勧めです。そうすることでタスクのテキストをカスタムコードに埋め込む必要がなくなるため、その後のメンテナンス性が上がるはずです。

その際、タスクのタイトルに [CUSTOM_CODE:Record ID] のようにキーワードを入れておきます。このあと編集する際に、編集するタスクを特定するために使います。

タスクを編集する

カスタムコードを追加する

ワークフローからカスタムコードを追加します。ここでは言語としてPythonを使用しています。またシークレットに先ほどコピーしたAPI Keyを追加します。ここでは PRIVATE_APPLI_KEY として追加しています。

最後に「プロパティを追加」からRecord IDを追加して準備は完了です。

作成したタスクを検索する

まずは作成したタスクを検索するコードです。まず最初に追加した PRIVATE_APPLI_KEY を追加って hubspot オブジェクトを取得、それに対してAPIリクエストを送っています。今回やりたいのは CUSTOM_CODE:取引ID という形式のタスクを検索することなので、ここでは hs_task_subjectf"[CUSTOM_CODE:{deal_id}]" で検索するようにしています。

import os
from hubspot import HubSpot
from hubspot.crm.objects import ApiException, PublicObjectSearchRequest, SimplePublicObjectInput

def main(event):
  hubspot = HubSpot(access_token=os.getenv('PRIVATE_APPLI_KEY'))
  deal_id =   cf_category = event.get("inputFields").get("hs_object_id")
  try:
    public_object_search_request = PublicObjectSearchRequest(
      filter_groups = [
        {
          "filters" : [{
            "value": f"[CUSTOM_CODE:{deal_id}]",
            "propertyName": "hs_task_subject",
            "operator": "EQ"
          }]
        }
      ],
      properties = [
        "hs_task_subject",
        "hs_timestamp",
      ]
    )
    api_response = hubspot.crm.objects.search_api.do_search("tasks", public_object_search_request)
    task_id = api_response.results[0].id
    print(task_id)
  except ApiException as e:
    print(e)
    raise

  return {
    "outputFields": {
    }
  }

見つけたタスクを編集する

これで該当のタスクIDがわかったので、次はそのタスクを編集します。編集時は対象のIDと、どの要素を編集するのかを指定します。ここではタスクの期日 hs_timestamptask_date = date(2023, 1, 1) を使って編集しています。

# これを4行目に追加
from datetime import date, datetime
...
    # ここから下は、上記コードの print(task_id) の下に追加
    task_date = date(2023, 1, 1)
    simple_public_object_input = SimplePublicObjectInput(
      properties = {
        "hs_timestamp": task_date
      }
    )
    api_response = hubspot.crm.objects.basic_api.update("tasks", task_id, simple_public_object_input)
READYFORテックブログ

Discussion