ctx.reply(content, options?). You can also return a string or JSX card from a handler instead of calling ctx.reply() directly.
To send a reply from your backend without going through the bridge handler, use the Send an agent reply API.
Channel support
See Channels overview for the full matrix.
Reply types
The following table summarizes the reply types your agent can send:
To change a message after you send it, see Edit sent messages.
Plain text
Send a simple string reply withctx.reply():
Markdown
Send formatted text by passing a markdown string toctx.reply():
Sending attachments
Include files with string or markdown replies via the optional second argument.Outbound file attachments are delivered on Slack and Microsoft Teams. WhatsApp, Telegram, and email do not support outbound files yet. See Channels overview.
- Attachments are limited to 25 MB per file.
- Files are only supported with string or markdown replies, not card replies.
- Provide each file with exactly one of
urlordata. - Prefer
urlfor larger files. Inlinedatais capped at 5 MB per file (and 5 MB aggregate per message).
File reference type
Each file uses aFileRef object with the following shape:
url for larger files. Novu fetches public HTTP(S) URLs server-side. Use data for small generated files in memory.
The following examples show both approaches:
Interactive cards
Cards are structured messages with buttons, dropdowns, links, and more. Build them with function calls or JSX.- Function call API
- JSX API
The following example builds a card with the function call API:
onAction fires with action.id and action.value. See Handlers and context. On Agent Chat, the same tree arrives as a card part. The web UI draws it and calls sendAction.
Available card components
The following table lists the card components you can use in replies:Related
Edit sent messages
Update a message in place after sending it with
ReplyHandle.Signals
Metadata, workflow triggers, and conversation resolution.
AI SDK
Build end to end with
@novu/framework/ai-sdk.Send an agent reply API
Send replies from your backend without a bridge handler.
Agent Chat cards
Draw
part.type === 'card' in your product UI and call sendAction.