> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kaisupport.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Channels

> Connect Intercom or WhatsApp Cloud, set a mode per source, and keep WhatsApp templates in order.

A channel is one connection between Kai and a place your customers write. Kai
speaks Intercom and WhatsApp Cloud today. One Brain answers on all of them.

Open **Settings → Channels**. Each connected channel is one row. The row says
which channel it is, which mode it runs, and whether it is live.

<Frame caption="Settings, Channels: every connection and the mode it runs.">
  <img src="https://mintcdn.com/kai-support/RaOwCZDRMIUnRjWu/images/en/settings-channels.png?fit=max&auto=format&n=RaOwCZDRMIUnRjWu&q=85&s=179d776097cc8cb7c66ffc8bd1eacf4a" alt="Settings, Channels" width="2880" height="2000" data-path="images/en/settings-channels.png" />
</Frame>

If nothing is connected yet, the page says so and offers **Add channel**. Only
an owner or an admin can add one.

<Frame caption="A workspace with no channel connected yet.">
  <img src="https://mintcdn.com/kai-support/RaOwCZDRMIUnRjWu/images/en/settings-no-channels.png?fit=max&auto=format&n=RaOwCZDRMIUnRjWu&q=85&s=49c12f87176136fd91a81a3fce68c9c5" alt="Settings, Channels, with nothing connected" width="2880" height="2000" data-path="images/en/settings-no-channels.png" />
</Frame>

## Connect Intercom

Kai works inside the inbox your team already uses. Kai writes drafts as
internal notes and hands a conversation over by assigning it.

<Steps>
  <Step title="Get an access token">
    In Intercom, open **Developer Hub → your app → Configure →
    Authentication**. Copy the access token. The token is scoped to one
    workspace, so Kai learns the workspace from the token.
  </Step>

  <Step title="Get the client secret (recommended)">
    In the same app, open **Basic Info** and copy the client secret. It is
    optional in Intercom's own token flow, so Kai treats it as optional too.
    Read [Which secret to use](#which-secret-to-use) before you skip it.
  </Step>

  <Step title="Paste both into Kai">
    In **Settings → Channels**, select **Add channel**, then **Intercom**.
    Paste the access token, and the client secret if you have one. Select
    **Connect**. Kai checks the token with Intercom before it stores anything.
  </Step>

  <Step title="Add the webhook endpoint in Intercom">
    Kai shows a URL after it connects. In Intercom, open **Developer Hub →
    your app → Webhooks** and add that URL.
  </Step>

  <Step title="Subscribe to four topics">
    Subscribe to `conversation.user.created`,
    `conversation.user.replied`, `conversation.admin.replied` and
    `conversation.admin.closed`. Kai needs the admin replies to know that a
    human took over.
  </Step>
</Steps>

<Note>
  Kai stores the token encrypted on your own server. To rotate a token, or to
  add a client secret later, run the connect flow again with the new values.
</Note>

### Which secret to use

Kai has two ways to prove that a delivery is genuine.

| What you give Kai              | How Kai checks a delivery                             |
| ------------------------------ | ----------------------------------------------------- |
| Access token and client secret | Kai verifies the signature on each delivery body.     |
| Access token only              | Kai puts a secret in the webhook URL and checks that. |

The signature is the stronger of the two, because it authenticates the message
and not only the caller. A URL reaches a log file more easily than a header
does.

<Warning>
  If your webhook URL holds a secret, treat the URL like a password. Add the
  client secret and connect again to move to signature checks.
</Warning>

## Connect WhatsApp Cloud

A WhatsApp Business number talks to Kai directly. There is no provider inbox,
so your team answers from [Kai's inbox](/product/inbox).

<Steps>
  <Step title="Collect three values from Meta">
    Open **Meta App Dashboard → WhatsApp → API Setup**. Copy the **Access
    token**, the **Phone number ID** and the **WhatsApp Business Account ID**.
    Use a permanent system-user token, not the 24-hour test token.
  </Step>

  <Step title="Copy the app secret (recommended)">
    Open the app's **Basic Settings** and copy the app secret. With it, Kai
    verifies the signature on each delivery. Without it, the secret webhook
    URL authenticates the caller instead.
  </Step>

  <Step title="Paste them into Kai">
    In **Settings → Channels**, select **Add channel**, then **WhatsApp
    Cloud**. Paste the values and select **Connect**. Kai checks them against
    Meta before it stores anything.
  </Step>

  <Step title="Read what Kai did for you">
    Kai registers the number for Cloud API and subscribes the webhook fields
    to its own callback URL. The result page lists each step and says which
    ones are done.
  </Step>

  <Step title="Finish anything Kai could not do">
    If Kai could not subscribe the webhook, it shows the **Callback URL** and
    the **Verify token**. In Meta, open **App Dashboard → WhatsApp →
    Configuration → Webhook**, paste both, then subscribe the `messages`
    field.
  </Step>
</Steps>

<Warning>
  The callback URL contains the verify token. Treat that URL like a password.
</Warning>

A WhatsApp channel card holds a **Delivery setup** panel. It shows each step
that must hold for a message to arrive: number ownership, registration, the
`messages` subscription, the callback URL, and the app subscription. If
messages stop arriving while the credentials are still valid, read that panel
first.

## Sources inside one channel

One Intercom workspace carries several surfaces on one credential and one
webhook. Intercom calls each of them a **source**. Kai knows Messenger,
WhatsApp, Email, SMS, Instagram, Facebook and Phone.

Those surfaces are not one audience. A Messenger visitor is often anonymous. A
WhatsApp thread is a phone number that already chose to write to you. Most
teams trust the two differently.

So each source can carry its own mode. Open the channel card and find
**Per-source modes**. Each source offers **Inherit**, **Copilot**,
**Autopilot** and **Off**. **Inherit** is the resting state, and it follows the
mode set on the channel above.

<Frame caption="A channel card open: mode, autopilot scope, wait, confidence and per-source modes.">
  <img src="https://mintcdn.com/kai-support/RaOwCZDRMIUnRjWu/images/en/settings-channel-open.png?fit=max&auto=format&n=RaOwCZDRMIUnRjWu&q=85&s=dc851fb0921392d0412e3eb124ff75c9" alt="A channel card, expanded" width="2880" height="3000" data-path="images/en/settings-channel-open.png" />
</Frame>

A green dot beside a source means Kai has seen traffic on it. A source that
Intercom adds later still works: it inherits the channel mode until you set
one.

<Tip>
  Move one source to autopilot first, not the whole channel. See
  [Copilot, autopilot and off](/product/modes).
</Tip>

## Test connection

An Intercom card has a **Test connection** button. It asks Intercom whether
the stored credential still works, and names the workspace when it does. Use it
when a channel goes quiet, before you change any policy.

A WhatsApp card has no single button, because a WhatsApp connection is four
steps that break on their own. The **Delivery setup** panel checks each one.

## Recent activity

Every channel card holds a **Recent activity** list. It records what arrived
and what Kai refused: deliveries, rejections, subscriptions, archives, and the
account notices Meta pushes about a WhatsApp Business Account.

Read it when a channel looks connected but nothing happens. An account notice,
such as a quality drop or a template decision, stops delivery while the
credentials stay perfectly valid.

## Disable a channel

Select **Disable channel** in the card footer. Kai stops acting on that
connection. Nothing changes in Intercom or in Meta.

Two more actions appear only on a disabled channel:

* **Archive conversations** files the remaining threads as history. They stay
  readable and searchable in Kai, and they accept no new reply. Nothing is sent
  to the provider.
* **Delete channel** removes the connection and every conversation, message and
  template that Kai holds from it. The provider itself is untouched.

<Warning>
  Deleting a channel cannot be undone.
</Warning>

## Message templates

WhatsApp closes a conversation 24 hours after the customer's last message.
After that, a free-form message fails. To write first, or to write late, you
must send a template that Meta approved.

Meta owns the template library. Kai mirrors it. Open **Settings → Templates**.

<Frame caption="Settings, Templates: the mirrored library and how each variable is filled.">
  <img src="https://mintcdn.com/kai-support/RaOwCZDRMIUnRjWu/images/en/settings-templates.png?fit=max&auto=format&n=RaOwCZDRMIUnRjWu&q=85&s=774b66fb18094e80b64e97343fd02dd9" alt="Settings, Templates" width="2880" height="2000" data-path="images/en/settings-templates.png" />
</Frame>

<Steps>
  <Step title="Sync from Meta">
    Select **Sync from Meta**. Kai pulls every template this number has, both
    approved and not, and reports how many it stored and removed.
  </Step>

  <Step title="Read each status">
    A template is approved, pending, rejected, disabled or paused. Only an
    approved template can be sent.
  </Step>

  <Step title="Bind each variable">
    For every `{{variable}}` in the body, choose where its value comes from:
    typed by the agent, or a name taken from the record. Kai saves each choice
    on its own.
  </Step>
</Steps>

Name bindings are read-only in the composer. A customer name comes from the
[contact](/concepts/contacts) details, and a sender name comes from the
teammate's profile. If the source is missing, Kai blocks the send instead of
writing a wrong name.

<Note>
  Kai fills body variables only. A template with variables in its header or its
  buttons is not offered to agents, and the row says so.
</Note>

Only people send outbound messages. A template never changes what Kai does on
its own.

### Direct Send

A WhatsApp channel card holds a **Direct Send** setting. With it, agents write
free-form service messages after the 24-hour window instead of picking a
template. Meta grants this per account. Turn it on only after your account is
in that beta, because elsewhere those sends fail rather than fall back to a
template.

## Next

<CardGroup cols={2}>
  <Card title="Copilot, autopilot and off" icon="sliders" href="/product/modes">
    What each mode does, and what still holds a reply back.
  </Card>

  <Card title="People and permissions" icon="users" href="/product/team">
    Who may connect a channel and change its policy.
  </Card>
</CardGroup>
