Skip to main content
See also: Channels REST API reference for request/response shapes, status codes, and error semantics.
A Channel defines how a recommendation reaches a customer. While Offers define what to recommend and Decision Flows decide which offer to show, Channels handle the last mile: delivery mode, impression tracking, and provider integration. Each channel can have multiple placements (named slots like hero_banner or sidebar_widget) and connects to Creatives that contain the actual content. When you create a channel, KaireonAI automatically routes it to your default Decision Flow so it works immediately — no manual wiring required.
Channels are delivery-agnostic containers. The same offer can be delivered through email, push, and in-app simultaneously, each with different creatives optimized for that channel.

How Channels Work

  1. You create a channel with a type (email, push, etc.), delivery mode, and impression tracking method
  2. You add placements — named slots where content appears (e.g., hero_banner, checkout_upsell)
  3. You create creatives — content variants linked to specific offers and channels
  4. At recommendation time, the Decision Flow matches candidates to creatives for the requested channel and allocates them across placements

Channel Types

Retail Rewards Example


Delivery Modes

Each channel operates in one of four modes that control how recommendations reach the customer:
External systems call the /api/v1/recommend endpoint to pull decisions in real time. The response includes ranked offers with their creatives, and the calling system renders them.Best for: Web personalization, in-app messages, real-time push, webhook integrations.Latency: Typically under 200ms end-to-end.
Recommendations are exported as a file for ingestion by an external system. Selecting File (Batch) just marks the channel as file-producing — the file’s format, columns, and destination are configured on the campaign, not here.Where to configure the file: the File Output section of the campaign editor (Run.fileConfig). One config drives every file-mode channel in the campaign, so two campaigns sharing this channel can output different files. Supported formats are CSV, TSV, JSON, and JSONL; the destination is a download-only artifact or an Amazon S3 connector; columns map to built-in decision fields or segment-schema attributes with optional transforms — see File Output Configuration.Best for: Email campaign systems, direct mail vendors, data warehouse ingestion, batch CRM integrations.
Delivers recommendations via a platform integration with a specific provider. Provider credentials are stored encrypted in providerConfig.Best for: Managed delivery through SendGrid, Twilio, Firebase, WhatsApp Business API.Flow: During a batch run, creative content is assembled and — when live delivery is enabled — sent through the provider stack via sendWithTracking, which creates a ChannelDelivery record per send for tracking and status callbacks.Delivery is gated. Real provider sends happen only when the tenant has explicitly opted in via TenantSettings.liveDelivery (default false). Each integration-mode item is reported with an honest status:
With liveDelivery off (the default), integration-mode channels never transmit — every item is reported as simulated. Real sends require enabling TenantSettings.liveDelivery and having a configured provider plus a resolved recipient address.
Recommendations appear in a queue for agents or relationship managers to act on. No automated delivery — KaireonAI tracks decisions and outcomes.Best for: High-touch sales, advisory conversations, branch operations, call center agents.

Placements

A placement is a named slot within a channel where content can appear. Placements let you request recommendations for a specific slot, track performance per placement, and control how many offers appear in each position. When used with the Composable Pipeline Group node, placements control how ranked offers are allocated across multiple slots in a single response.

Placement Fields


Impression Tracking

Channels control how customer impressions (views) are recorded. This affects contact policy enforcement and dashboard metrics.
The client application calls the Respond API after displaying the recommendation. You get precise control over when an impression is counted.
When to use: Any channel where you can confirm the customer actually saw the recommendation (web, in-app, email opens).

Delivery Providers

When using Integration delivery mode, KaireonAI sends messages through configured providers. All providers support delivery tracking, idempotency, circuit breakers, and retry logic.

Delivery states and retries

Every dispatch creates a delivery record keyed by an idempotency hash of (interaction, channel, creative), so the same decision can never contact a customer twice. A pending delivery with attempts remaining is re-attempted the next time the send is invoked for that interaction; each attempt is claimed atomically, so two concurrent callers produce one dispatch, not two. Once attempts reaches maxAttempts the record becomes failed and is not retried again.
Before 2026-08-15 the idempotency check short-circuited on any existing record, including pending. A delivery the circuit breaker had never dispatched could therefore never be dispatched — it stayed pending permanently and never surfaced as a failure, despite maxAttempts implying otherwise. If you are running an older build, look for stranded records with:
Records at pending with attempts below maxAttempts were never sent.

WhatsApp Integration

KaireonAI supports WhatsApp Business messaging through two providers:

Auto-Routing to Decision Flows

When you create a channel or add a placement, KaireonAI automatically creates FlowRoutes linking them to the tenant’s default Decision Flow. New channels work immediately without manual routing setup.
  • New channel — FlowRoute created to the default flow
  • New placement — FlowRoute created to the default flow
You can override any auto-created route from the channel detail page or the Decision Flow configuration.
Auto-routing only creates routes to the default flow. To route a channel to a different flow, create the route manually or change the default flow first.

Provider Config

Each channel can store provider-specific configuration for external delivery:
Provider config is stored encrypted. API keys and credentials are never returned in GET responses.

Creating a Channel

1

Navigate to Channels

Go to Studio > Channels in the sidebar.
2

Click + New Channel

Click the + New Channel button.
3

Select type and delivery mode

Choose a channel type (email, push, etc.) and delivery mode (API, File, Integration, Manual).
4

Set impression tracking

Choose Explicit (default) or Implicit.
5

Add placements (optional)

Define named slots. Each placement has a name, slot type, and max offers.
6

Configure provider (optional)

Enter provider credentials for external delivery.
7

Save

The channel is immediately available for creatives and Decision Flows.

Field Reference


API Quick Reference

Create

Response: 201 Created with the full channel object.

List / Update / Delete

Deleting a channel also removes all associated placements. Creatives linked to this channel become orphaned and should be reassigned or deleted.

Next Steps

Creatives

Create content variants for each offer on this channel.

Decision Flows

Build pipelines that select and deliver offers through channels.

Composable Pipeline

Use the Group node to allocate offers across placements.

Contact Policies

Set frequency caps and suppression rules per channel.