All guide topics

Guide Customers & CRM

AI: triage, chat and phone agents

AI Ticket Triage is an optional part of CRM, switched on per store. It reads inbound customer messages, drafts a reply in your brand voice, and decides what happens next: send it, leave it as a one-tap draft, or escalate it to a person. It works on your existing support tickets, so triaged messages show up in the same Customers & CRM → Tickets inbox.

Where to find it

When triage is on for your store (it needs CRM), Customers & CRM → AI Triage appears in the sidebar. Its pages are linked across the top: Metrics, Live Chats and Settings. Settings is also a card at Settings → AI, which holds triage, live chat, the voice receptionist and phone agents.

Turning it on

Open Settings → AI and:

  1. Enter your Anthropic API key. Triage uses your own key, and Anthropic bills your store directly. Nothing runs until a key is set.
  2. Add your business context under Business context / brand voice / policies: hours, shipping and return policy, tone, do's and don'ts. This keeps replies accurate and on-brand. It is sent with every message, so more text costs more per reply.
  3. Set the Confidence threshold. Below it, messages are escalated to a person instead of drafted or sent.
  4. Decide on Auto-send high-confidence replies (off by default). When it's on, replies at or above the threshold and in your Auto-send categories are sent automatically. When it's off, every reply becomes a one-tap draft.
  5. Optionally list Force-escalate keywords (for example chargeback, attorney, injury). A message containing one always goes to a person, however confident the AI is.
  6. Click Save Settings.

Auto-acknowledge escalated emails & DMs (off by default) sends the customer one of your handoff messages when an email, contact-form or social message is escalated, so they know a person will follow up.

How replies work

Each inbound message gets a category, an urgency, a confidence score, and a drafted reply based on your products, the customer's recent orders, your knowledge base and your business context.

On the ticket, the AI Suggested Reply panel shows the draft. Click Send Reply to send it (edit it first if you like) or Discard draft. Low-confidence and force-escalate messages are left for a person.

Did the email go out? Under every reply sent by email, yours or the AI's, the ticket shows Emailed to the customer's address with the time it left, or Email not sent with the reason (for example, no email address on the ticket). Right after you reply it reads Sending email… for a moment while the email goes out. Internal notes, live chat and Messenger replies have no email line.

Channels

  • Contact form: storefront submissions become tickets automatically.
  • Email: connect your support mailbox under Inbound email — connect your support inbox (IMAP) with the IMAP host, Port, Encryption, Username (email) and an App password, then tick Poll this inbox for inbound email. For Zoho, use imap.zoho.com, port 993, SSL. Gmail, Outlook and cPanel mailboxes work too. Replies are threaded onto the same ticket. Providers that support inbound parse can instead post to the webhook under Or: inbound-email webhook (advanced).
  • Facebook / Instagram DMs: enter your Facebook Page ID, optional Instagram Account ID and Page Access Token.
  • Live chat: see below.

Tickets from these channels stay internal by default: logged-in customers only see tickets they opened in your support portal. To let customers see and reply to their contact-form and email tickets there, turn on Show contact-form & email tickets in the customer support portal.

Live chat

Turn on Enable the storefront live-chat widget and set a Greeting message. A chat bubble appears on your storefront. You can also set the AI assistant name, Team name, Accent color and your own Handoff messages.

The AI answers briefly and can look up order status and tracking, but only after the customer gives both the order number and the email on the order. It hands off to a person when the customer asks, gets frustrated, or it can't help. Let the AI keep helping after a human takes over keeps it answering after a handoff.

Manage chats on the Live Chats tab of Customers & CRM → AI Triage: Take over stops the AI so you can reply yourself, and Hand back to AI resumes it. Open shows the transcript. Every chat is saved as an ordinary ticket.

Visitor contact and reply by email. After answering the visitor's first question, the AI asks once for their name and email and saves whatever they share. It never requires it and never holds up a handoff for it. If a team member replies while the visitor is away from the chat, Kaniva emails them the reply with a Continue the Conversation button that reopens the chat.

Voice receptionist (phone)

Connect a Vapi phone assistant so callers get the same AI as your chat.

  1. Under Voice receptionist (Vapi) in triage settings, set a Vapi shared secret and a Transfer destination (a phone number or SIP URI the call goes to when a caller asks for a person).
  2. In Vapi, either point the assistant's Custom LLM and end-of-call webhook at the two addresses shown in Settings (both with the X-Voice-Secret header set to your secret), or use Fast mode: Vapi-native brain (recommended): pick a Vapi model, paste the system prompt shown in Settings, and add the two tools it describes. Re-copy the prompt after changing your business context.
  3. Route your phone number to the Vapi assistant.

Saved secrets and API keys on this page are never shown again: the field stays blank with Saved — leave blank to keep and the last few characters, so leave it blank to keep the saved one, type a new one to replace it, or tick Remove to clear it. The tools address for Fast mode has your secret in it, so it is shown masked; an owner or admin can click show the full address to copy it into Vapi.

On a call, the AI answers product, policy and order questions. It only gives order details once the caller is verified: the caller ID matches the phone on the order, or they give the ZIP code or email on it. It transfers to your destination when the caller wants a person, and otherwise takes a message. Every call becomes a ticket with the transcript. Fully handled calls close themselves; calls needing follow-up stay open.

Phone agents (ElevenLabs)

Kaniva can file every finished call to your AI voice agents in ElevenLabs into your CRM. Phone agents only need the CRM: Settings → AI is there even when AI Ticket Triage isn't switched on for your store, with just this section.

If Kaniva set up your agents (they live in Kaniva's ElevenLabs account), enter each agent's ID in Sales agent ID and Support agent ID and click Save Settings. That's all: Kaniva sends each call to the store that saved its agent. An agent can belong to one store only, so Save refuses an ID another store already has.

Your own phone receptionist, in one click

Kaniva can build a receptionist for your store in your own ElevenLabs account, so the minutes are yours and the agent is yours to tune. It answers from your store's own data: order status (verified by the caller's number, ZIP code, or name and ZIP), products with price and availability, your hours, address and policies, takes messages, and puts callers through to you during your Live transfers hours. A caller without an order number is found by the number they are calling from, or by name and ZIP. Putting a caller through is the last resort: when someone asks for customer service, the receptionist first asks what it is about and answers what it can (order status, products, hours, policies), and only transfers for what it can't do, such as a refund, a change to an order or a custom quote, or when the caller still wants a person. Every call lands in Customers & CRM as a ticket with the transcript.

  1. Start
    You have an ElevenLabs account
  2. 1
    In ElevenLabs, make an API key (Developers → API keys) with the Agents and Webhooks permissions
  3. 2
    Paste it into ElevenLabs API key under Your ElevenLabs account on Settings → AI, give the receptionist a name, and click Save Settings
  4. 3
    Click Set up my receptionist. Kaniva creates the agent, its tools and the post-call webhook in your ElevenLabs account and fills in Receptionist agent ID
  5. 4
    In ElevenLabs, add or import a phone number (Phone numbers) and assign it to the agent
  6. Done
    Call the number. The call appears in your CRM as a ticket

With Live transfers on, every transfer request reaches you as a push notification with the brief, and you tap Accept or Decline there. Also make me press a key on the phone (under Live transfers) adds a second check: after you accept, your phone rings, you hear the brief, and you press a key before the caller is connected, so voicemail can never take a transfer. It needs ElevenLabs to have enabled call screening on your account; if Update my receptionist reports that it is not enabled, ask ElevenLabs support.

Two of your stores can share one ElevenLabs account: each store still saves its own API key and runs Set up my receptionist, and every call is filed in the store whose receptionist took it.

Update my receptionist (the same button, once it is set up) pushes your current hours, transfer number, accept-on-the-phone choice, policies and the latest prompt to the agent in ElevenLabs. It never makes a second agent. Changes you make to the agent in ElevenLabs (voice, model, extra instructions) are kept unless you update from Kaniva, which rewrites the prompt and tools.

Before the first call, fill in Settings → General (phone, address, hours) and the store notes: What the receptionist knows about your store under Your ElevenLabs account (or the Business context box, when AI Ticket Triage is on; it is the same text). That is what the receptionist knows about your store.

If you run the agents in your own ElevenLabs account and set them up by hand instead, your store also gets its own webhook address and secret, so its calls only ever land in your CRM:

  1. Start
    Your agents are set up and answering in ElevenLabs
  2. 1
    In your ElevenLabs settings, add a post-call webhook with HMAC signing and transcript events
  3. 2
    Paste the Webhook address from Settings → AI → Phone agents (ElevenLabs) as its URL
  4. 3
    Copy the webhook secret ElevenLabs shows and paste it into Webhook secret
  5. 4
    Copy each agent's ID from ElevenLabs into Sales agent ID and Support agent ID, then click Save Settings
  6. 5
    Make sure both agents use that webhook, then make a test call
  7. Done
    The call appears in Customers & CRM as a contact, a call with its transcript, and a task or ticket

What each call becomes:

Sales agent Support agent
Contact (matched by email, then phone number) a lead tagged phone-lead tagged phone-support
A call activity and call log with the transcript and the agent's answers, linked to the conversation in ElevenLabs ✓ ✓
A Call back … task due today, with the caller's message, number and best time, and a push notification when the caller asked for a person or left a message when the caller asked for a person or left a message
A ticket on the Voice channel — always; resolved straight away when the agent solved it on the call

A call from any agent other than the support agent is treated as a sales call. A delivered call is filed once, even if ElevenLabs sends it again.

Live transfers

During your hours, an agent can put a caller through to you, and you decide first. When a caller asks for a person, the agent says it will check if you're free and puts them on hold. Your phone gets a push with who is calling and why. Tap it, then:

  • Accept: put them through: the agent transfers the call to your phone.
  • Decline: pick a quick note (Back later today, Back tomorrow, With a customer, Email us instead) or type your own. The agent passes it on and takes a message, which becomes a Call back … task. Tick I'm unavailable for the rest of today to stop further transfers until tomorrow.

If you don't answer within 30 seconds, the agent takes a message. Set this up on Settings → AI → Phone agents (ElevenLabs) under Live transfers: tick Available for live transfers, enter your name (the agent says it), and choose your days and hours. Turn on push notifications for your admin on your phone first. Enter where accepted calls ring in Put calls through to (a phone number or a SIP address), then click Update my receptionist. For an agent you built yourself in ElevenLabs, the number is its transfer step there.

What your agents should collect

In each agent's Analysis → Data collection, add these fields (the names must match exactly). Kaniva reads them to fill in the contact, task and ticket. Anything else you collect is listed on the call too.

Field Used for
caller_name, caller_email The contact's name and email
follow_up_requested (yes/no) Makes the call-back task
message_for_team, callback_number, callback_time A message left for a call back: makes the call-back task and goes at the top of it (the number is only needed when it differs from the one they called from)
fit_verdict (strong_fit, partial_fit, not_a_fit) Sales, optional: a strong fit makes the task high priority
issue_summary Support: the ticket's subject
issue_type Support: the ticket's category
severity (blocking, degraded, minor) Support: ticket priority urgent, high or medium
resolved_on_call (yes/no) Support: files the ticket as resolved

The caller's phone number comes from the call itself.

Writing the agents' instructions

Keep each agent to one job. A sales agent learns what the caller needs, says honestly whether you can help, and offers a call back; a support agent answers order and product questions and takes down problems clearly. Give it your hours, policies and shipping times, tell it never to promise prices or dates it can't see, and tell it to collect the fields above before the call ends. Test it with a few calls in ElevenLabs before you put it on your phone number.

If calls don't appear: check that the secret saved here matches the one in ElevenLabs (the badge says saved), that the webhook URL is exactly the address shown, and that both agents use the webhook. Calls are refused while no secret is saved.

Metrics

The Metrics tab shows, over 7, 30 or 90 days: volume, average confidence, the draft discard rate, the edit rate per category, and token spend. A high edit rate on a category usually means missing or messy context (for example product fitment data) rather than a model problem.

This is the same manual that ships inside Kaniva. Start a free trial and follow along in your own store.