dial_crewai.tools

Classes

GetBillingTool

Base for Dial CrewAI tools.

GetCallInput

GetCallTool

Base for Dial CrewAI tools.

ListCallsInput

ListCallsTool

Base for Dial CrewAI tools.

ListMessagesInput

ListMessagesTool

Base for Dial CrewAI tools.

ListNumbersTool

Base for Dial CrewAI tools.

MakeCallInput

MakeCallTool

Base for Dial CrewAI tools.

PurchaseNumberInput

PurchaseNumberTool

Base for Dial CrewAI tools.

ReplyToMessageInput

ReplyToMessageTool

Base for Dial CrewAI tools.

SendMessageInput

SendMessageTool

Base for Dial CrewAI tools.

SetNumberPropertiesInput

SetNumberPropertiesTool

Base for Dial CrewAI tools.

StartTypingInput

StartTypingTool

Base for Dial CrewAI tools.

StopTypingInput

StopTypingTool

Base for Dial CrewAI tools.

WaitForMessageInput

WaitForMessageTool

Base for Dial CrewAI tools.

Functions

dial_tools(→ list[crewai.tools.BaseTool])

Every Dial tool in one list, all sharing the given DialClient.

Module Contents

class dial_crewai.tools.GetBillingTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

description: str = "Get the account's billing status: credit balance, subscription (if any), each number's billing...
name: str = 'get_billing'
class dial_crewai.tools.GetCallInput

Bases: pydantic.BaseModel

call_id: str
class dial_crewai.tools.GetCallTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

args_schema: type[pydantic.BaseModel]
description: str = 'Fetch a single call by its id, including its current status.'
name: str = 'get_call'
class dial_crewai.tools.ListCallsInput

Bases: pydantic.BaseModel

direction: str | None
number_id: str | None
class dial_crewai.tools.ListCallsTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

args_schema: type[pydantic.BaseModel]
description: str = 'List recent inbound and outbound calls on the account.'
name: str = 'list_calls'
class dial_crewai.tools.ListMessagesInput

Bases: pydantic.BaseModel

direction: str | None
number_id: str | None
class dial_crewai.tools.ListMessagesTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

args_schema: type[pydantic.BaseModel]
description: str = 'List recent inbound and outbound messages on the account.'
name: str = 'list_messages'
class dial_crewai.tools.ListNumbersTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

description: str = 'List all available Dial phone numbers on the account.'
name: str = 'list_numbers'
class dial_crewai.tools.MakeCallInput

Bases: pydantic.BaseModel

from_number: str | None
from_number_id: str | None
idempotency_key: str | None
language: str | None
max_call_duration_seconds: int | None
outbound_instruction: str
to: str
transfer_to: str | None
voice_gender: str | None
class dial_crewai.tools.MakeCallTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

args_schema: type[pydantic.BaseModel]
description: str = 'Initiate an AI voice call to a phone number.'
name: str = 'make_call'
class dial_crewai.tools.PurchaseNumberInput

Bases: pydantic.BaseModel

area_code: str | None
inbound_instruction: str
inbound_language: str | None
inbound_voice_gender: str | None
include_imessage: bool
class dial_crewai.tools.PurchaseNumberTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

args_schema: type[pydantic.BaseModel]
description: str = 'Provision (buy) a new Dial phone number. Billable.'
name: str = 'purchase_number'
class dial_crewai.tools.ReplyToMessageInput

Bases: pydantic.BaseModel

body: str | None
message_id: str
reaction: str | None
class dial_crewai.tools.ReplyToMessageTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

args_schema: type[pydantic.BaseModel]
description: str = 'Reply in-thread or react to an existing message. The reply goes out from the Dial number the...
name: str = 'reply_to_message'
class dial_crewai.tools.SendMessageInput

Bases: pydantic.BaseModel

body: str
channel: str
force_audio_file: bool
from_number: str | None
from_number_id: str | None
media_urls: list[str]
to: str
class dial_crewai.tools.SendMessageTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

args_schema: type[pydantic.BaseModel]
description: str = 'Send a message to a phone number, optionally with media attachments (MMS). On an iMessage...
name: str = 'send_message'
class dial_crewai.tools.SetNumberPropertiesInput

Bases: pydantic.BaseModel

avatar_url: str | None
first_name: str | None
inbound_instruction: str | None
inbound_language: str | None
inbound_voice_gender: str | None
last_name: str | None
max_call_duration_seconds: int | None
nickname: str | None
number_id: str
class dial_crewai.tools.SetNumberPropertiesTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

args_schema: type[pydantic.BaseModel]
description: str = "Update a Dial phone number's properties: its inbound instruction (the system prompt its AI...
name: str = 'set_number_properties'
class dial_crewai.tools.StartTypingInput

Bases: pydantic.BaseModel

from_number: str
to_number: str
class dial_crewai.tools.StartTypingTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

args_schema: type[pydantic.BaseModel]
description: str = "Show a typing indicator to the recipient, as if composing a message from your number. iMessage...
name: str = 'start_typing'
class dial_crewai.tools.StopTypingInput

Bases: pydantic.BaseModel

from_number: str
to_number: str
class dial_crewai.tools.StopTypingTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

args_schema: type[pydantic.BaseModel]
description: str = "Clear a typing indicator previously shown with start_typing. Delivering a message or reaction...
name: str = 'stop_typing'
class dial_crewai.tools.WaitForMessageInput

Bases: pydantic.BaseModel

phone_number_id: str
timeout_seconds: int
class dial_crewai.tools.WaitForMessageTool

Bases: _DialTool

Base for Dial CrewAI tools.

Holds a shared DialClient (passed in, not constructed per call) so every tool reuses one connection pool, and drives the async client from CrewAI’s sync _run via the background-loop bridge. arbitrary_types_allowed lets the Pydantic-based BaseTool carry the non-Pydantic DialClient as a field.

args_schema: type[pydantic.BaseModel]
description: str = "Wait for the next inbound SMS message and return it. Blocks until a message arrives or the...
name: str = 'wait_for_message'
dial_crewai.tools.dial_tools(client: dial_sdk.DialClient) list[crewai.tools.BaseTool]

Every Dial tool in one list, all sharing the given DialClient.

Build one client, hand the tools to a CrewAI Agent:

from crewai import Agent
from dial_sdk import DialClient, DialConfig
from dial_crewai import dial_tools

client = DialClient(DialConfig(api_key="sk_live_..."))
agent = Agent(role="...", goal="...", tools=dial_tools(client))

The tools share one connection pool. The client lives for the process (its requests run on a background event loop); a sync crew needn’t close it explicitly.