Skip to navigation

Call Control

End calls and transfer to humans from within your agent.
View as Markdown

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

Ending Calls

Use SDKAgentEndCallEvent to end the call:

from smallestai.atoms.crew.nodes import OutputCrewNode
from smallestai.atoms.crew.events import SDKAgentEndCallEvent
from smallestai.atoms.crew.tools import function_tool
class MyAgent(OutputCrewNode):
@function_tool()
async def end_call(self) -> None:
"""End the call gracefully."""
await self.send_event(SDKAgentEndCallEvent())
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:

from smallestai.atoms.crew.events import (
SDKAgentTransferConversationEvent,
TransferOption,
TransferOptionType
)
from smallestai.atoms.crew.tools import function_tool
class MyAgent(OutputCrewNode):
@function_tool()
async def transfer_to_human(self) -> None:
"""Transfer to a human agent."""
await self.send_event(
SDKAgentTransferConversationEvent(
transfer_call_number="+14155551234",
transfer_options=TransferOption(
type=TransferOptionType.COLD_TRANSFER
),
on_hold_music="relaxing_sound"
)
)
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

from smallestai.atoms.crew.events import (
TransferOption,
TransferOptionType,
WarmTransferPrivateHandoffOption,
WarmTransferHandoffOptionType,
)
# Cold transfer (immediate handoff)
cold = TransferOption(type=TransferOptionType.COLD_TRANSFER)
# Warm transfer (agent briefs human first)
warm = TransferOption(
type=TransferOptionType.WARM_TRANSFER,
private_handoff_option=WarmTransferPrivateHandoffOption(
type=WarmTransferHandoffOptionType.PROMPT,
prompt="Customer calling about billing"
)
)

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.