62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
from typing import Annotated, Any, Optional
|
|
|
|
from arcade.sdk import ToolContext, tool
|
|
from arcade.sdk.auth import Hubspot
|
|
|
|
from arcade_hubspot.enums import HubspotObject
|
|
from arcade_hubspot.models import HubspotCrmClient
|
|
|
|
|
|
@tool(
|
|
requires_auth=Hubspot(
|
|
scopes=[
|
|
"oauth",
|
|
"crm.objects.companies.read",
|
|
"crm.objects.contacts.read",
|
|
"crm.objects.deals.read",
|
|
"sales-email-read",
|
|
],
|
|
),
|
|
)
|
|
async def get_company_data_by_keywords(
|
|
context: ToolContext,
|
|
keywords: Annotated[
|
|
str,
|
|
"The keywords to search for companies. It will match against the company name, phone, "
|
|
"and website.",
|
|
],
|
|
limit: Annotated[
|
|
int, "The maximum number of companies to return. Defaults to 10. Max is 10."
|
|
] = 10,
|
|
next_page_token: Annotated[
|
|
Optional[str],
|
|
"The token to get the next page of results. "
|
|
"Defaults to None (returns first page of results)",
|
|
] = None,
|
|
) -> Annotated[
|
|
dict[str, Any],
|
|
"Retrieve company data with associated contacts, deals, calls, emails, "
|
|
"meetings, notes, and tasks.",
|
|
]:
|
|
"""Retrieve company data with associated contacts, deals, calls, emails,
|
|
meetings, notes, and tasks.
|
|
|
|
This tool will return up to 10 items of each associated object (contacts, leads, etc).
|
|
"""
|
|
limit = min(limit, 10)
|
|
client = HubspotCrmClient(context.get_auth_token_or_empty())
|
|
return await client.search_by_keywords(
|
|
object_type=HubspotObject.COMPANY,
|
|
keywords=keywords,
|
|
limit=limit,
|
|
next_page_token=next_page_token,
|
|
associations=[
|
|
HubspotObject.CALL,
|
|
HubspotObject.CONTACT,
|
|
HubspotObject.DEAL,
|
|
HubspotObject.EMAIL,
|
|
HubspotObject.MEETING,
|
|
HubspotObject.NOTE,
|
|
HubspotObject.TASK,
|
|
],
|
|
)
|