dial-crewai
Official Dial tools for CrewAI — give a multi-agent crew the ability to send SMS, receive OTP codes, and place AI voice calls through Dial. Agents automating signups and web tasks get a real phone identity.
It's the CrewAI sibling of dial-langchain:
each tool is a crewai.tools.BaseTool subclass wrapping the dial-sdk
client. It adds nothing to the REST contract — it just shapes Dial's operations into
CrewAI tools.
Install
pip install dial-crewai
This pulls in dial-sdk and crewai.
Give the tools to a crew
Build one DialClient, pass it to dial_tools, and hand the list to an agent. Every
tool shares that one client — a single connection pool for the whole crew:
from crewai import Agent, Crew, Task
from dial_sdk import DialClient, DialConfig
from dial_crewai import dial_tools
dial = DialClient(DialConfig(api_key="sk_live_..."))
phone_agent = Agent(
role="Phone identity agent",
goal="Send and receive SMS so the crew can complete phone-verified signups",
backstory="You operate the crew's Dial phone number.",
tools=dial_tools(dial),
)
DialConfig also takes an optional base_url to target a non-default deployment.
Or pick individual tools
from dial_crewai import SendMessageTool, WaitForMessageTool
tools = [
SendMessageTool(client=dial),
WaitForMessageTool(client=dial),
]
Available tools
Each tool takes your shared DialClient (client=):
| Tool | Action |
|---|---|
ListNumbersTool |
List your phone numbers |
PurchaseNumberTool |
Provision a new number (billable) |
SetNumberPropertiesTool |
Update a number's nickname / inbound instruction |
SendMessageTool |
Send an SMS (optionally MMS) |
ReplyToMessageTool |
Reply or react to a message |
ListMessagesTool |
List recent messages (contact for one conversation, search by text) |
ListContactsTool |
List the numbers your lines have talked to |
MakeCallTool |
Place an AI voice call |
ListCallsTool |
List recent calls |
GetCallTool |
Fetch one call by id |
GetBillingTool |
Credit balance, subscription, per-number mode |
WaitForMessageTool |
Block until the next inbound SMS arrives, or time out |
OTP flow
The point of phone identity for a crew: send a code and read the reply.
WaitForMessageTool blocks until the next inbound SMS arrives, so an agent can:
- trigger a signup that texts a code to your Dial number,
- call
WaitForMessageToolto read the inbound code, - enter it back into the signup form.
See examples/signup_crew.py for a runnable crew.
Notes
- The
dial-sdkclient is async; these tools are sync-first (_run) with an async→sync bridge, and also expose_arunfor async crews. The shared client's requests run on a single background event loop, so the connection pool is reused across calls; a sync crew needn't close the client explicitly. SendMessageToolis a write action and isn't idempotent — a re-invoke after a failure can send a duplicate.MakeCallToolaccepts anidempotency_key.WaitForMessageToolis backed by Dial's presence-based event stream — for durable, at-least-once delivery, register a webhook.
See the CrewAI integration docs for the full guide.
Release files for dial-crewai 0.23.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dial_crewai-0.23.0.tar.gz | 266.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dial_crewai-0.23.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 279.4 kB
Release files / dial_crewai-0.23.0.tar.gz
| Download URL | dial_crewai-0.23.0.tar.gz |
|---|---|
| Size | 266.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2a164bdb3826c7f02ca04b753a734f21a5e8ab52a39485c29817f007f6dae950
|
|
BLAKE2b-256 checksum How to use checksums |
e866fd55f6d04bf5bd4244c1cea84066978a23b5616326eb151f018b0028d403
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / dial_crewai-0.23.0-py3-none-any.whl
| Download URL | dial_crewai-0.23.0-py3-none-any.whl |
|---|---|
| Size | 13.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7381ceb1af7aab936081cdacf575a586c9ee1d1fc77e80f5b841ac553b4fa4d5
|
|
BLAKE2b-256 checksum How to use checksums |
299740af3e8d57a775484f315d2ad174d1b7b8733e3f72c1579f7298de4a0597
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency log