Skip to main content
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.agent.nodes.output_agent import OutputAgentNode
from smallestai.atoms.agent.events import SDKAgentEndCallEvent
from smallestai.atoms.agent.tools import function_tool

class MyAgent(OutputAgentNode):
    @function_tool()
    def end_call(self) -> SDKAgentEndCallEvent:
        """End the call gracefully."""
        return SDKAgentEndCallEvent()
SDKAgentEndCallEvent has no parameters.

Transferring to Humans

Use SDKAgentTransferConversationEvent to hand off to a human:
from smallestai.atoms.agent.events import (
    SDKAgentTransferConversationEvent,
    TransferOption,
    TransferOptionType
)
from smallestai.atoms.agent.tools import function_tool

class MyAgent(OutputAgentNode):
    @function_tool()
    def transfer_to_human(self) -> SDKAgentTransferConversationEvent:
        """Transfer to a human agent."""
        return SDKAgentTransferConversationEvent(
            transfer_call_number="+14155551234",
            transfer_options=TransferOption(
                type=TransferOptionType.COLD_TRANSFER
            ),
            on_hold_music="relaxing_sound"
        )

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.agent.events import TransferOption, TransferOptionType

# 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={
        "type": "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.