Call Control

View as MarkdownOpen in Claude

Control the call flow from within your agent. End calls gracefully or transfer to a human.

Ending Calls

Use SDKAgentEndCallEvent to end the call:

1from smallestai.atoms.agent.nodes import OutputAgentNode
2from smallestai.atoms.agent.events import SDKAgentEndCallEvent
3from smallestai.atoms.agent.tools import function_tool
4
5class MyAgent(OutputAgentNode):
6 @function_tool()
7 async def end_call(self) -> None:
8 """End the call gracefully."""
9 await self.send_event(SDKAgentEndCallEvent())
10 return None

Tools that send SDK events must use await self.send_event() and return None. Simply returning the event object won’t work.

Transferring to Humans

Use SDKAgentTransferConversationEvent to hand off to a human:

1from smallestai.atoms.agent.events import (
2 SDKAgentTransferConversationEvent,
3 TransferOption,
4 TransferOptionType
5)
6from smallestai.atoms.agent.tools import function_tool
7
8class MyAgent(OutputAgentNode):
9 @function_tool()
10 async def transfer_to_human(self) -> None:
11 """Transfer to a human agent."""
12 await self.send_event(
13 SDKAgentTransferConversationEvent(
14 transfer_call_number="+14155551234",
15 transfer_options=TransferOption(
16 type=TransferOptionType.COLD_TRANSFER
17 ),
18 on_hold_music="relaxing_sound"
19 )
20 )
21 return None

Transfer Parameters

ParameterTypeRequiredDescription
transfer_call_numberstringYesHuman agent’s phone (E.164)
transfer_optionsTransferOptionYesTransfer type
on_hold_musicstringNo"ringtone", "relaxing_sound", "uplifting_beats", or "none"

Transfer Types

1from smallestai.atoms.agent.events import (
2 TransferOption,
3 TransferOptionType,
4 WarmTransferPrivateHandoffOption,
5 WarmTransferHandoffOptionType,
6)
7
8# Cold transfer (immediate handoff)
9cold = TransferOption(type=TransferOptionType.COLD_TRANSFER)
10
11# Warm transfer (agent briefs human first)
12warm = TransferOption(
13 type=TransferOptionType.WARM_TRANSFER,
14 private_handoff_option=WarmTransferPrivateHandoffOption(
15 type=WarmTransferHandoffOptionType.PROMPT,
16 prompt="Customer calling about billing"
17 )
18)

Call Flow Events

When these events trigger, they appear in call logs:

EventLog Entry
SDKAgentEndCallEventhangupSource: "agent"
SDKAgentTransferConversationEventtransferTarget: "+1..."

Tips

Tell the user before transferring: “I’ll connect you to…”

Faster than warm transfers.

Say goodbye before ending, don’t just hang up.

Have a general transfer number if specific departments unavailable.