Hubspotのカスタムコードを使って期日を指定したタスクを作る
この記事で分かること
Hubspotではワークフローを使うと「タスク」を自動的に作ることができます。しかしこの機能を使っても期日の設定はこの2パターンしか存在しません。
- 即時
- oo日後
一方でタスクの期日には、これらの日付を使いたいという要望がしばしばありました。ここではカスタムコードを使ってこれを実現する方法をまとめます。
- カレンダーの特定の日付を指定する
- オブジェクトのプロパティに入れた日付
必要なこと
- Operations Hub Professional以上の契約
- あった方がいいこと
手順
- API Keyを取得する
- タスクを作成する
- タスクを編集する
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_subject
を f"[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_timestamp
を task_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のエンジニアブログです。技術情報を中心に様々なテーマで発信していきます。 ( Zenn: zenn.dev/p/readyfor_blog / Hatena: tech.readyfor.jp/ )
Discussion