---
title: Chat Trigger
description: Run the flow on each chat message from the user.
---

Turn a workflow into a chatbot: every message you send runs the workflow once.

## What it does

The Chat Trigger opens a chat window. Each message you send starts one run of the workflow, from this trigger only, with your text in `chatInput`.

The trigger never writes a reply itself. A downstream agent that uses the **same Chat Memory** as the trigger does:

1. The agent saves your message to the memory.
2. It reads the earlier conversation, calls the model (and any tools), and saves its reply to the same memory.
3. The chat window re-reads the conversation from the memory and shows both messages. On the canvas this is immediate; on a web page the chat checks every 1.5 seconds, so the reply can take a moment to appear.

Because the conversation lives in the memory, it also shows on the [Memory page](/app/memory/overview/), and other workflows using the same conversation see the same messages.

**Where you can chat:**

* **On the canvas.** **Test Workflow** opens the chat when the Chat Trigger is the only trigger. You can also pick it in the trigger picker or press the node's **Test step** button.
* **On web pages (extension).** When the workflow is activated, a chat bubble appears on pages matching **URL Patterns**. If several chat workflows match, the bubble lets you pick one. You can also right-click and choose **Open chat**. The run still happens in the AWFlow app tab, and the page's `url`, `title` and `tabId` are passed to the trigger.

## When to use it

* Build an assistant you can talk to while designing a workflow.
* Put a helper on specific websites, for example your internal tools, using **URL Patterns**.
* Give an agent a running conversation, so each message builds on the earlier ones.

For a one-off question without a chat window, start the agent from [When Started](/nodes/builtin/trigger/whenstarted/) or [Context Menu](/nodes/builtin/trigger/contextmenu/) instead.

## Inputs and settings

**Assistant name**, **Icon**, **Greeting**, **Input placeholder** and **Starter prompts** only change how the chat window looks. **URL Patterns** decides on which pages the chat bubble shows (`<all_urls>` means every page); it uses the form `https://*.example.com/*`.

## Outputs

Each output item has these fields:

```json title="Shape of an output item"
{
  "triggerType": "chat",
  "triggeredAt": "…",
  "chatInput": "…",
  "sessionId": "…",
  "url": "…",
  "title": "…",
  "tabId": 0
}
```

Set the agent's prompt to `{{ $input.chatInput }}`. `sessionId` is empty when the memory uses **This run only** storage. `url`, `title` and `tabId` are only set when you chat from a web page.

## Dependencies and credentials

Connect a [Chat Memory](/nodes/builtin/ai/aidependencies/chatmemories/chatmemory/) to the **Memory** slot, and connect the **same** Chat Memory node to the memory slot of the agent that answers ([Tools Agent](/nodes/builtin/ai/aiagents/toolsagentnode/) or [RAG Agent](/nodes/builtin/ai/aiagents/ragnode/)). Use **Conversation** storage (pick a conversation, or leave it empty to give the node its own) or **Key** storage with a fixed key.

> **CAUTION:**
>
> The chat window needs to know the conversation before a run. That works with **Conversation** storage and with a fixed key. With **This run only**, or a key written as an expression such as `{{ $input.userId }}`, the chat keeps no history and each message is answered on its own.

Workflows built with the older Local Memory, Persistent Chat Memory or Window Buffer Memory keep working; those nodes are now [upgraded to Chat Memory](/nodes/builtin/ai/aidependencies/chatmemories/chatmemory/).

## Example workflow

1. Add a **Chat Trigger**.
2. Add a [Chat Memory](/nodes/builtin/ai/aidependencies/chatmemories/chatmemory/) with **Conversation** storage and connect it to the trigger's **Memory** slot.
3. Add a [Tools Agent](/nodes/builtin/ai/aiagents/toolsagentnode/) after the trigger, connect a chat model, and connect the **same** Chat Memory to its memory slot.
4. Set the agent's prompt to `{{ $input.chatInput }}`.
5. Click **Test Workflow** and start chatting.

## Common issues

* **"Dependency memory is required", or the chat says no Chat Memory is connected.** Connect a Chat Memory to the trigger's **Memory** slot.
* **Nothing appears, not even my own message.** The trigger does not save messages; the agent does. Check that an agent runs on every message and uses the same memory node as the trigger.
* **The agent answers but the chat stays empty.** The agent uses a different memory, conversation or key than the trigger.
* **The chat forgets earlier messages.** The memory uses **This run only** or a key written as an expression. Use **Conversation** storage or a fixed key.
* **Each message shows twice, or several replies appear.** Every agent connected to the same memory saves its own copy. Use one agent per conversation.
* **On a web page, the "thinking" indicator never stops.** The run failed before a reply was saved. Press stop, then check the run in the execution history. Stop only resets the chat window; a run that is still going keeps going.
* **No chat bubble on a page.** Activate the workflow and check that a **URL Patterns** entry matches the page.

## Related nodes

* [Chat Memory](/nodes/builtin/ai/aidependencies/chatmemories/chatmemory/): stores the conversation the chat shows.
* [Tools Agent](/nodes/builtin/ai/aiagents/toolsagentnode/): answers each message, with tools.
* [RAG Agent](/nodes/builtin/ai/aiagents/ragnode/): answers from your own documents.

See also [Memory & Context](/concepts/ai/memory-context/).