chat step sends a message to chat platforms such as Slack, Discord, and Microsoft Teams.
Return a plain-text body or a rich card. If you return both, Novu uses card. Existing workflows that only return body keep working without changes.
Example usage
Plain text body
Rich card
Build cards with the Card DSL helpers from@novu/framework. The Card DSL extends the raw Chat SDK card model with provider-agnostic Markdown formatting. Novu converts that formatting to the syntax each provider supports.
**bold**, _italic_, ~~strikethrough~~, inline code, and [links](https://example.com). For example, Slack receives equivalent mrkdwn, while Novu converts the same source text for other providers.
Link button URLs must be absolute (include
https://). Incomplete URLs can fail provider validation at send time.Chat step output
Provide at least one ofbody or card.
body
- Type:
string - Required: No (required if
cardis omitted) - Description: Plain-text message body. If the output also includes
card, Novu uses the card and ignoresbody.
card
- Type:
object(CardElement) - Required: No (required if
bodyis omitted) - Description: Structured chat card. Novu provides provider-specific rendering for Slack, Microsoft Teams, WhatsApp, and Telegram. Other providers receive a Markdown fallback generated from the card.
Card properties
Card child types
The Dashboard block editor authors a common subset of this model (text, image, divider, link buttons, lists, and related layout blocks). Framework also supports the layout elements listed above, including sections, fields, and tables.
Provider overrides
When you need a provider-native payload that the shared card cannot express, use the stepproviders object. For example, Slack Block Kit:
Chat step result
Thechat step does not return a result object.
Related
Writing chat templates
Dashboard block and text editors, preview, and backward compatibility.
Agent interactive cards
Full card kit usage for agent replies and
onAction.