on_session_end()

Register a handler that fires when a call session ends. Use this to save call data, trigger post-call workflows, or log outcomes.

The BotSessionEnded event carries a termination_reason field that tells you why the session ended:

ValueMeaning
"user-hangup"The caller hung up.
"bot-hangup"The agent ended the call (e.g. via call.hangup()).
"bot-failure"The session ended due to an internal error.
"bot-transfer"The call was transferred to another destination.
"voicemail"The outbound call reached voicemail.

Signature

signature
@agent.on_session_end
def on_session_end(call: guava.Call, event: BotSessionEnded) -> None:
    ...
ParameterTypeDefaultDescription
callCallThe call object. Note: the call is already ended — do not issue commands on it.
eventBotSessionEndedContains `termination_reason` — one of `"user-hangup"`, `"bot-hangup"`, `"bot-failure"`, `"bot-transfer"`, `"voicemail"`.

Return value: None

Example

controller.py
import logging
from guava.events import BotSessionEnded

logger = logging.getLogger(__name__)


@agent.on_session_end
def on_session_end(call: guava.Call, event: BotSessionEnded):
    logger.info("session ended: reason=%s", event.termination_reason)
    if event.termination_reason == "user-hangup":
        # caller hung up — save any collected data
        ...
    elif event.termination_reason == "bot-transfer":
        # call was transferred to a human agent
        ...

Questions? hi@goguava.ai