Chatwoot automation · runs daily
Triage new Chatwoot conversations with AI
Overnight, email, live chat and WhatsApp messages pile up unassigned in the shared inbox, and every morning someone opens each one to pick a label, a priority and a team before anybody can start answering.
Cotlet does it in your own Chatwoot account with list_conversations, get_conversation, list_labels, list_teams, add_labels, set_priority, assign_conversation and add_private_note, called by your AI agent, an n8n workflow or a script.
Hosted · nothing to install or maintain
Can Chatwoot do this on its own?
Chatwoot automation rules apply conditions you define in advance, with the operators "equal to" and "not equal to", and run actions such as Assign a team and Add a label (checked 22 Oct 2026). They do not read what the customer wrote and choose a label or priority. The Application API can set all of these fields, but it needs an access token and code you write and host.
How you do it in Chatwoot today
- An agent filters the conversation list with the filter icon at the top, using Conversation Status, Agent Assigned, Inbox, Team or Labels, and opens each conversation to read it.
- In the conversation actions panel on the right, the agent sets the Assignee or the Team, clicks Add Label to pick or create a label, and sets a priority in the sidebar or with Cmd+K and "Assign priority".
- To record why, the agent switches the composer from Reply to Private Note, types the note and clicks Send. The composer turns yellow, and only the team sees the note.
- Admins can build rules under Settings > Automation with an event such as Conversation created, conditions and actions like Assign a team and Add a label.
- Auto assignment divides new conversations evenly among available agents, and when nobody is available they stay Unassigned. The reading and sorting repeat every morning, so triage is the first thing to slip when the inbox is busy.
How to triage new Chatwoot conversations with AI
Go through unassigned open Chatwoot conversations. Add the label that fits (billing, bug or how-to), set the priority from what the customer wrote, assign billing to the Billing team, and leave a one-line private note with the reason. Leave unclear ones for me. - 01
Collect what is unassigned
list_conversations runs with status open and assignee unassigned, and follows the pages until has_more is false, so a Monday backlog is triaged as one batch and not only its first page.
- 02
Learn your vocabulary
list_labels and list_teams run once. Your rule ("billing questions go to the Billing team") is matched to a label and a team that exist. A rule that names a missing label or team is reported, not guessed, because labels are created in Settings > Labels.
- 03
Read before judging
get_conversation brings the whole thread, so the label and priority come from what the customer wrote and not from the subject line alone. Private notes are read as team context, never as the customer's words.
- 04
Set the fields
add_labels, set_priority and assign_conversation run on the clear cases. Chatwoot has four fixed priorities, and Urgent is set only when your rule names it. None of the three asks for your OK, because each is undone with one call.
- 05
Leave the reason
add_private_note writes one line per conversation on why it got that label, priority and team, so the agent who opens it sees the logic and can overrule it. Each note waits for your OK by default.
- 06
Skip what moved
Right before writing, the agent reads the conversation again. One that a colleague assigned in the meantime is logged as handled and left alone.
What you get back
Unassigned open conversations read: 14
Triaged 11:
- 4 to Billing, priority high (double charge, refund requests)
- 3 labeled bug, priority medium (login errors with a screenshot)
- 4 labeled how-to, priority low
Left for you 3:
- #1855 threatens a chargeback
- #1857 is in a language no rule covers
- #1860 asks for a call Other ways to ask
- Every hour, find conversations where the customer wrote "urgent" or "down", set them to Urgent and list them for me.
- Label every new conversation with the product it mentions, using my current labels, and change nothing else.
- Show me how you would triage today's unassigned conversations as a table and write nothing to Chatwoot.
- Triage only conversations in the Support email inbox that have waited more than 2 hours.
What Chatwoot allows, and what to know first
- Chatwoot has four fixed priorities, Low, Medium, High and Urgent, and its help center says to use Urgent judiciously.
- Chatwoot does not allow custom priorities. Its help center suggests labels or custom attributes instead.
- Chatwoot labels are account-specific, can be used across teams, and take only letters, numbers, hyphens and underscores in their names.
- In Chatwoot, Assignee and status are independent: a resolved conversation can keep its assignee, and an open one can be unassigned.
- A private note is never sent to the customer, so a reason written there is safe to leave on every conversation.
add_private_note asks for your OK by default. To run it daily without you, switch confirmation off for that tool in your dashboard.
Sources: Chatwoot Help: Lesson 3 (a), mastering core features · Chatwoot Help: How to add labels · Chatwoot Help: How to assign a priority · Chatwoot Help: How to use automation · Chatwoot Help: Assigning conversations in a round-robin fashion
Call add_labels from a script
curl -X POST https://cotlet.dev/api/v1/chatwoot/conversations/1842/labels \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"labels":["billing","refund"]}' {
"conversation_id": 1842,
"labels": [
"billing",
"refund"
],
"added": [
"billing",
"refund"
]
} MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is chatwoot_write → add_labels. Example data.
Schedule it in n8n, Make, Zapier or cronChatwoot tools this automation uses
| Tool | Parameters |
|---|---|
| list_conversations | status, assignee, inbox_id, label, contact_id, query, page |
| get_conversation | conversation_id |
| list_labels | none |
| list_teams | none |
| add_labels | conversation_id, labels |
| set_priority | conversation_id, priority |
| assign_conversation | conversation_id, agent_id, team_id, unassign |
| add_private_note | conversation_id, body |
Frequently asked questions
Is it safe to connect Chatwoot to Cotlet?
Yes. You sign in to Chatwoot yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Chatwoot once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.
Give your agent access to Chatwoot.
Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Chatwoot.