> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes.

# say

> Deliver typed text into the live call a nonce names.

[ref-handoffrouter]: /docs/server-sdks/reference/python/agents/handoff-router

Deliver typed text into the live call the nonce names, through your `send_message` callback. Doesn't
consume the nonce, since typing is repeatable for the life of the call, but stops once
`max_messages_per_call` is reached. Only the text is forwarded; no other request field reaches the
call. This is what `POST /say` calls.

## Parameters

**`nonce`** `str` — required

The nonce registered for the call.

---

**`text`** `str` — required

The text to deliver. Leading and trailing whitespace is stripped; empty text is rejected.

---

## Returns

`bool` -- `True` when `send_message` ran without raising. `False` when `send_message` isn't
configured, the nonce is unknown or has no call ID, the text is empty, the message cap is reached,
or the callback raised.

## Example

```python
if not await handoff.say(nonce, "I'm at the north entrance."):
    return {"error": "not found"}, 404
return {"ok": True}
```

See [`HandoffRouter`][ref-handoffrouter] for the route this backs.