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

# Testing an Advanced Agent

> Test Chat with the live step highlight, the test link, and the checks that run at publish

## Test Chat on the canvas

On the **Flow** page, click **Test chat**. The chat opens beside the canvas, and as the agent replies:

* the step the conversation is on **glows**, the same way a Pathways test call highlights its active node;
* every step the conversation passed through is **tinted green**, including the conditions and functions between two messages;
* the lines along the way turn **green and animate**;
* the canvas **follows** the conversation to each new step.

Under every reply, a small link names the step it came from — `↳ S14 · Preview card (English)`. Click it to open that step.

**New chat** starts a fresh conversation and clears the highlight; closing the panel clears it too.

On every other page of the agent, Test Chat stays open on the right, without the highlight.

> [!NOTE]
>
> The highlight follows the steps that sent a message. Between two of them, the path through conditions and functions is drawn as the shortest way through the flow — if two routes lead to the same step, it may show the other one.

## What is real in a test

Test Chat runs the same agent as a live WhatsApp chat — the version you have open — with these differences:

| | In Test Chat |
| - | - |
| WhatsApp | Nothing is sent. Replies show in the panel only |
| Contacts page | The chat is saved under the test contact `0000000000`, one thread per test chat |
| Billing | Replies are charged like WhatsApp replies |
| Update contact / Ask & save | The CRM is **not** written; the step behaves as if it was, for the rest of the turn |
| Schedule call | No call is placed; the AI is told what would have happened |
| Custom functions | **Run for real.** Use `x_context["is_test"]` in your code to return a stand-in result instead of calling a live API — see [Custom Functions](/chat-agents/functions/custom-functions) |

The test contact has no CRM data, so contact attributes are empty in a test — this is where **fallbacks** on Contact attribute sources show their worth.

## Share a test link

**Copy test link** in Test Chat gives a public page anyone can chat with, without a dashboard login. Replies are charged to your account. **Reset link** revokes the old one at once. When the version you have open is not the published one, the copied link pins that version.

## Publish checks

The issues badge on the canvas shows the same problems as the publish check, before you publish. **Not publishable** lists errors; **Check warnings** lists things worth a look.

**Errors** — publish is blocked until they are fixed:

* The flow has no steps, or the Start step is not connected.
* A step points at a step that no longer exists, or at Start or a global intent.
* A Send text or Ask & save step has no message (or no guidance in **AI writes it**).
* A Send buttons step has no message, no buttons, more than 10 buttons, a button with no text, two buttons with the same text, or a button longer than 24 characters.
* A branch the AI decides has no **When**.
* A Send template step has no template, or a variable's source is incomplete (a fixed value that is empty, a contact source with no attribute, a function source with no function or no field).
* A Send media step's link is incomplete, or a fixed link is not `https://`.
* A Custom function step has no function, or calls a function the agent does not have.
* An Update contact step sets nothing, or a row has no attribute or an incomplete source.
* A Condition branch has no condition, or a rule is missing its attribute, function or field.
* A Global intent has no trigger, or is not connected.
* A Schedule call step has no voice agent, or its calling hours end before they start.
* A Send contact card step has no name, or has neither a phone number nor an email.

**Warnings** — publish goes ahead:

* A branch on the main path is not connected (nothing more is planned there).
* A step cannot be reached from Start or a global intent.
* An Ask & save step has a retry message but accepts any text, so the message is never sent.

## When the agent goes off-flow

The agent is told to answer side questions briefly and return to its step, so some drift is by design. When it skips or repeats a step:

1. Check the step link under each reply — it shows exactly which step each message came from.
2. Make the step's **guidance** and **branch conditions** more specific; vague branches are the usual cause.
3. Move rules that apply everywhere from step guidance into **Instructions**, and rules it must never break into **Guardrails**.
4. Prefer a **Rule** condition over a prompt one whenever code can check it.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.