dial-autogen
Official Dial tools for Microsoft AutoGen — give an AutoGen agent 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 AutoGen sibling of dial-langchain and
dial-crewai: each tool is an
autogen_core.tools.FunctionTool
wrapping the dial-sdk client. It adds nothing to the REST
contract — it just shapes Dial's operations into AutoGen tools.
Targeting Microsoft's newer Agent Framework instead of AutoGen? Use
dial-agentframework.
Install
pip install dial-autogen
This pulls in dial-sdk and autogen-agentchat.
Give the tools to an agent
Build one DialClient, pass it to dial_tools, and hand the result to an
AssistantAgent. Every tool shares that one client — a single connection pool for the
whole agent session — and you own its lifecycle (await client.close() when done):
from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import AzureOpenAIChatCompletionClient
from dial_sdk import DialClient, DialConfig
from dial_autogen import dial_tools
dial = DialClient(DialConfig(api_key="sk_live_...")) # close with `await dial.close()`
model_client = AzureOpenAIChatCompletionClient(
azure_deployment="gpt-4o",
model="gpt-4o",
api_version="2024-10-21",
azure_endpoint="https://<your-resource>.openai.azure.com/",
)
agent = AssistantAgent(
name="phone_agent",
model_client=model_client,
tools=dial_tools(dial),
system_message="You operate the team's Dial phone number for SMS, OTP, and voice calls.",
)
DialConfig also takes an optional base_url to target a non-default deployment.
Or pick individual tools
Each builder takes the shared DialClient and returns one FunctionTool:
from dial_autogen import send_message_tool, wait_for_message_tool
tools = [
send_message_tool(dial),
wait_for_message_tool(dial),
]
Available tools
Each builder takes your shared DialClient:
| Builder | Tool name | Action |
|---|---|---|
list_numbers_tool |
list_numbers |
List your phone numbers |
purchase_number_tool |
purchase_number |
Provision a new number (billable) |
set_number_properties_tool |
set_number_properties |
Update a number's nickname / inbound instruction |
send_message_tool |
send_message |
Send an SMS (optionally MMS) |
reply_to_message_tool |
reply_to_message |
Reply or react to a message |
list_messages_tool |
list_messages |
List recent messages (contact for one conversation, search by text) |
list_contacts_tool |
list_contacts |
List the numbers your lines have talked to |
make_call_tool |
make_call |
Place an AI voice call |
list_calls_tool |
list_calls |
List recent calls |
get_call_tool |
get_call |
Fetch one call by id |
get_billing_tool |
get_billing |
Credit balance, subscription, per-number mode |
wait_for_message_tool |
wait_for_message |
Block until the next inbound SMS arrives, or time out |
OTP flow
The point of phone identity for an agent: send a code and read the reply.
wait_for_message blocks until the next inbound SMS arrives, so an agent can:
- trigger a signup that texts a code to your Dial number,
- call
wait_for_messageto read the inbound code, - enter it back into the signup form.
See examples/signup_autogen.ipynb for a runnable agent.
Notes
- AutoGen runs tools in an async loop, so these tools are async-native — no async→sync bridge (the one difference from the CrewAI sibling).
send_messageis a write action and isn't idempotent — a re-invoke after a failure can send a duplicate.make_callaccepts anidempotency_key.wait_for_messageis backed by Dial's presence-based event stream — for durable, at-least-once delivery, register a webhook.
See the AutoGen integration docs for the full guide.
Release files for dial-autogen 0.19.1
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_autogen-0.19.1.tar.gz | 105.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dial_autogen-0.19.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 117.2 kB
Release files / dial_autogen-0.19.1.tar.gz
| Download URL | dial_autogen-0.19.1.tar.gz |
|---|---|
| Size | 105.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6b3f6bd9c8994548efd37445e07f3606b6d5c01ee867187b72ec1b15a62676e4
|
|
BLAKE2b-256 checksum How to use checksums |
4f8d0772a30666143f26a32b93efb5744026c0b1a85610d4dd1e5957e655de4a
|
| 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 22, 2026.
Transparency logRelease files / dial_autogen-0.19.1-py3-none-any.whl
| Download URL | dial_autogen-0.19.1-py3-none-any.whl |
|---|---|
| Size | 11.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b4eeab121664e4d4738a1089a0475a4d0fef3a7c098cd6d59f9c4c45e1a97b77
|
|
BLAKE2b-256 checksum How to use checksums |
f073bb7ae64804a18e7a32d93bdb180e9cbe170465a3ec267974fec5fc0ddcad
|
| 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 22, 2026.
Transparency log