Talki

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

1

Customer sends email to support@yourdomain.com

2

Email is forwarded (or routed via Mailgun) to Talki

3

Talki creates a ticket with the email content and sender info

4

Agent replies in Talki — email is sent back via Resend from your domain

Setup

1

Enable the Email channel

In your Console, go to Settings → Channels → Email and click Enable.

2

Copy your inbound address

Talki generates a unique inbound email address for your organization:

acme-f8c2a9@inbound.talki.tech

This address accepts all inbound email. Copy it — you'll use it in the next step.

3

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.

bash
# 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

In Google Workspace: Admin Console → Apps → Google Workspace → Gmail → Default routing. In Cloudflare Email Routing: Dashboard → Email → Email Routing → Rules.

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.

bash
# 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:

bash
# 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

Find YOUR_INBOUND_SECRET in Settings → Channels → Email → Mailgun secret. This authenticates the webhook so only Mailgun can post to it.
4

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.

reply flow
# 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

To send from 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.

json
{
  "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..."
}
NameTypeDescription
senderstringEmail address of the customer who sent the message.
recipientstringThe address the email was sent to (your inbound address or custom domain).
subjectstringEmail subject line. Used as the ticket title if no thread exists yet.
body-plainstringPlain-text body of the email.
body-htmlstringHTML body of the email, if provided by the sender.
Message-IdstringRFC 2822 Message-ID header. Used as the thread anchor for new tickets.
In-Reply-Tostring | nullIf set, Talki matches this to an existing ticket and appends as a reply instead of creating a new ticket.
timestampstringUnix timestamp (seconds) of when Mailgun received the email.
signaturestringHMAC-SHA256 signature for webhook verification. Talki verifies this automatically.