Skip to main content
Respond to inbound emails in seconds — not hours. This workflow uses an AI Agent to filter out noise (newsletters, spam, auto-replies) and draft a personalized response to real messages, then sends it as a threaded reply inside the original conversation.

How email threading works

Every email carries a hidden Message-ID header — a unique fingerprint assigned by the sender’s mail server. When you reply to an email, your mail client sets an In-Reply-To header referencing that fingerprint. That’s how Gmail, Outlook, and every other client groups messages into threads. In Twenty, that fingerprint is stored as headerMessageId on the Message object. Your workflow grabs it and passes it into the Send Email action’s In-Reply-To field.

Building the workflow

Step 1: Create a new workflow

Head to Settings -> Workflows and click + New Workflow.

Step 2: Trigger on incoming messages

Pick When a Record is Created and choose Messages. Every time an email lands in Twenty, this fires.

Step 3: Look up who sent it

Add a Search Records action. The sender’s address isn’t on the message itself — it’s on the related Message Participant record.
FieldValue
ObjectMessage Participants
FilterMessage is {{trigger.id}}
FilterRole is From
Limit1
This gives you the sender’s email in handle and their name in displayName.

Step 4: AI triage and draft reply

Add an AI Agent action. This single step does two things: decides whether the email deserves a reply, and if so, writes one. Use a prompt like:
You are an email triage assistant for a sales team. Read the following
inbound email and decide if it deserves a reply.

Subject: {{trigger.subject}}
Body: {{trigger.text}}
From: {{Find Sender.first.displayName}} ({{Find Sender.first.handle}})

If this email is spam, a newsletter, an automated notification, or
otherwise does not need a human reply, respond with exactly: SKIP

Otherwise, write a short, professional reply (3-4 sentences max) that:
- Acknowledges their specific message
- Lets them know someone from the team will follow up shortly
- Is warm but not overly casual

Respond with only the reply text, no subject line or greeting prefix.
The AI Agent outputs its response in a response field that the next steps can reference.

Step 5: Branch on the AI decision

Add an If/Else action to check whether the AI decided to reply or skip.
FieldValue
ConditionAI Agent response does not contain SKIP
If trueContinue to Send Email
ElseDo nothing (workflow ends)
Spam, newsletters, and auto-generated messages get dropped. Everything else moves to the next step.

Step 6: Send a threaded reply

Add a Send Email action on the “if true” branch. Click Advanced options, then Add In-Reply-To.
FieldValue
To{{Find Sender.first.handle}}
SubjectRe: {{trigger.subject}}
Body{{AI Triage & Draft Reply.response}}
In-Reply-To{{trigger.headerMessageId}}
The In-Reply-To field is what makes this a reply instead of a new conversation. The recipient sees it threaded under the original email in Gmail, Outlook, or any other client.
In-Reply-To expects a message.headerMessageId from the trigger — it’s the email’s unique fingerprint, not a recipient address. If you leave it empty, the email still sends, just as a standalone message.
Gmail uses the subject line to group messages into threads. The subject must start with Re: (including the colon and space) for Gmail to display the reply inside the original thread. Without it, the reply will appear as a separate conversation — even if the In-Reply-To header is set correctly.

Step 7: Test and activate

Hit Test, then check your email client. The reply should appear nested under the original message. Activate when you’re happy with it.

Ideas to build on

  • Only reply to VIPs — add a branch that checks the sender’s domain or whether they exist as a Contact in Twenty
  • Route by intent — use separate AI Agent prompts to handle sales inquiries differently from support requests
  • Enrich before replying — add a Search Records step to pull the sender’s company or deal history into the AI prompt for more personalized replies