Channels
Email channel
Connect your support email address to Talki. Every incoming email becomes a ticket. Agents reply from Talki — customers receive normal email replies from your address.
How it works
Customer sends email to support@yourdomain.com
Email is forwarded (or routed via Mailgun) to Talki
Talki creates a ticket with the email content and sender info
Agent replies in Talki — email is sent back via Resend from your domain
Setup
Enable the Email channel
In your Console, go to Settings → Channels → Email and click Enable.
Copy your inbound address
Talki generates a unique inbound email address for your organization:
This address accepts all inbound email. Copy it — you'll use it in the next step.
Route email to Talki
Choose the method that fits your infrastructure:
Option A — Simple forwarding
The easiest option. In your email provider (Google Workspace, Namecheap, Cloudflare Email, etc.), create a forwarding rule that forwards support@yourdomain.com to your Talki inbound address.
# In your email provider (e.g. Google Workspace, Namecheap, Cloudflare Email)
# Create a forwarding rule:
# From: support@yourdomain.com
# Forward to: acme-f8c2a9@inbound.talki.tech
#
# Exact steps vary by provider — look for "email forwarding" or "aliases".✦Most providers call this Email Aliases or Forwarding
Option B — Mailgun inbound route
Use this if you already send email through Mailgun, or need more control (multiple recipients, filtering, logging). Set up a Mailgun route to forward to the Talki webhook endpoint.
# Mailgun CLI — create an inbound route
mg routes create \
--priority 10 \
--description "Talki inbound" \
--expression "match_recipient('support@yourdomain.com')" \
--action "forward('https://api.talki.tech/v1/email/webhook?secret=YOUR_INBOUND_SECRET')" \
--action "stop()"Or via the Mailgun dashboard:
# Or configure via the Mailgun dashboard:
#
# Routes → Create Route
# Filter expression: match_recipient("support@yourdomain.com")
# Actions: forward("https://api.talki.tech/v1/email/webhook?secret=YOUR_INBOUND_SECRET")
# stop()⚠Use your actual inbound secret
YOUR_INBOUND_SECRET in Settings → Channels → Email → Mailgun secret. This authenticates the webhook so only Mailgun can post to it.Verify the connection
Send a test email to your support address. It should appear as a new ticket in your Inbox within a few seconds. If it doesn't, check Settings → Channels → Email → Event log for errors.
Email threading
Talki uses the In-Reply-To header to continue existing tickets. When a customer replies to an agent's email, the reply is appended to the original ticket rather than creating a new one.
New ticket: email arrives with no In-Reply-To matching an open ticket — creates a new ticket.
Reply to ticket: email has In-Reply-To matching a Talki message ID — appended to that ticket as a new message.
Resolved ticket reply: if the matched ticket is resolved, it's automatically reopened and the message is appended.
Agent replies
When an agent replies in the Talki dashboard, the reply is sent as a normal email from your configured sender domain via Resend. The customer receives it in their inbox as a standard email reply — Talki is invisible to them.
# When an agent replies in Talki:
# 1. Agent types reply in ticket view → clicks Send
# 2. Talki sends email via Resend with:
# From: support@yourdomain.com (your configured sender domain)
# To: alice@example.com
# Subject: Re: Can't log in to my account
# In-Reply-To: <CA+abc123@mail.gmail.com> ← preserves thread
# 3. Email lands in customer's inbox as a normal replyⓘSender domain setup
support@yourdomain.com (rather than a Talki address), go to Settings → Channels → Email → Sender domain and verify your domain with the provided DNS records.Webhook payload reference
Talki receives a POST request from Mailgun with the following fields when an email arrives. This is for reference if you need to build custom integrations on top of the same endpoint.
{
"sender": "alice@example.com",
"recipient": "support@yourdomain.com",
"subject": "Can't log in to my account",
"body-plain": "Hi, I tried logging in three times ...",
"body-html": "<html>...",
"Message-Id": "<CA+abc123@mail.gmail.com>",
"In-Reply-To": null,
"timestamp": "1714567890",
"token": "abc123...",
"signature": "hmac-sha256-hex..."
}| Name | Type | Description |
|---|---|---|
| sender | string | Email address of the customer who sent the message. |
| recipient | string | The address the email was sent to (your inbound address or custom domain). |
| subject | string | Email subject line. Used as the ticket title if no thread exists yet. |
| body-plain | string | Plain-text body of the email. |
| body-html | string | HTML body of the email, if provided by the sender. |
| Message-Id | string | RFC 2822 Message-ID header. Used as the thread anchor for new tickets. |
| In-Reply-To | string | null | If set, Talki matches this to an existing ticket and appends as a reply instead of creating a new ticket. |
| timestamp | string | Unix timestamp (seconds) of when Mailgun received the email. |
| signature | string | HMAC-SHA256 signature for webhook verification. Talki verifies this automatically. |
