Skip to main content
The 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.
You can also return a raw card object that matches the schema below. Prefer the helpers so TypeScript catches shape mistakes early. Card text 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 of body or card.

body

  • Type: string
  • Required: No (required if card is omitted)
  • Description: Plain-text message body. If the output also includes card, Novu uses the card and ignores body.

card

  • Type: object (CardElement)
  • Required: No (required if body is 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 step providers object. For example, Slack Block Kit:
See Providers overrides and the Chat channel docs for Dashboard overrides.

Chat step result

The chat step does not return a result object.

Writing chat templates

Dashboard block and text editors, preview, and backward compatibility.

Agent interactive cards

Full card kit usage for agent replies and onAction.