Every conversation on your website, typed or spoken, and on your phone numbers, lands in Inbox. The agent answers first; a member of your team can take any conversation over, write to the person, and hand it back. A conversation stays open across visits: a visitor who comes back days later, or who switches between typing and a call, continues the same one.
The agent can also ask for a person when the visitor asks for one or needs what it cannot do. The conversation then shows Needs a person and the agent's notification channels (email, WeCom, Telegram) get a link to it. The agent keeps helping until someone takes over.
/ and a shortcut to insert a canned reply. Manage them from the inbox's header. A canned reply can hold {{contact.name}}, {{contact.first_name}}, {{contact.email}}, {{member.name}} and {{agent.name}}, filled in when you insert it./.Click Email at the top of the inbox to take your support mailbox's mail into the inbox:
support@your-store.com), the sender name, and the agent that answers.Then send a test email to your support address: it appears in the inbox within a minute or two.
Each email joins the conversation it answers, else the sender's open one, else a new one. The agent answers each email by itself, in the email's language, and hands the conversation to your team when it cannot help; each answer is billed like a typed message. Turn The agent answers emails off to have every email wait for a team member instead. Emails from machines (auto-replies, mailing lists, no-reply senders) wait for a team member. Your team's replies in an email conversation go out as email replies in the same thread.
Messages to your WhatsApp number come into the inbox, and the agent answers them there. EvaSay uses a WhatsApp sender on your own Twilio account: register your number as a WhatsApp sender in Twilio first (Twilio Console → Messaging → Senders → WhatsApp senders). Twilio bills WhatsApp messages to you directly.
Then send a WhatsApp message to your number: it appears in the inbox in a few seconds. The agent answers each message by itself, in the customer's language, and hands the conversation to your team when it cannot help; each answer is billed like a typed message. Turn The agent answers by itself off to have every message wait for a team member. WhatsApp lets a business answer only within 24 hours of the customer's last message: a reply after that is not sent, and the inbox tells you. Pictures, voice notes and files are counted in the conversation but not shown yet.
Calls to your numbers, and calls you place one at a time, are conversations in the inbox too, marked with a phone icon. The caller is known by their number: when they call again, the same conversation continues. Take a call over, and what you type is spoken to the caller in the agent's voice. Campaign calls stay with their campaign. If the agent has a transfer number, a caller who asks for a person is put through to that number instead.
When your Shopify store is connected, the panel beside a conversation shows the customer and their latest orders: status, items and tracking, with links into your Shopify admin. The customer is found by their store sign-in (when the widget runs from the EvaSay app in your theme), their email, or their phone number.
When an agent may cancel orders, change shipping addresses or refund (Agent → Knowledge & tools → Orders and products (Shopify)), a change the customer asked for waits above the reply box, with what would be done to which order. Approve makes it in the store at once; Decline leaves the order as it is. The conversation is marked as needing a person and your notification channels are told, and the timeline records who decided and how it went. Shopify emails the customer about a cancellation or a refund; tell them yourself about a declined request.
A reply the visitor cannot see now waits in the conversation and appears when they come back to the widget. If they left their email (the widget offers it), the reply is also emailed with a link back to the conversation, and their answer by email joins the conversation. The link opens the conversation once, so a forwarded email does not show it to anyone else; answering the email always works.
Open the inbox and choose Notify me to get a notification on that device when a conversation needs a person, or when the visitor writes in one you took over. On an iPhone, first add the dashboard to your Home Screen (Share → Add to Home Screen), then turn notifications on from there. Once notifications are on, choose Also every new conversation in the same menu to be told of each conversation as the customer's first words arrive, not only of those that need a person.
When a conversation is resolved, the AI writes a one- or two-sentence summary and up to three topics: in the agent's summary language (Analysis in the agent's settings), else the customer's. It shows beside the conversation, in the list for resolved conversations, and in the customer's earlier conversations. Taking over a long conversation? Click Summarize beside it to get one now. Summaries are not charged.
Use the assign menu at the top of a conversation to give it to a teammate (with how many conversations each has open), to yourself, or to nobody. The teammate gets a notification on their devices, and the conversation shows under Mine for them. While a member has the conversation the agent does not reply; Hand back to AI returns it to the agent. Only members whose role can answer (see Inbox settings) can be given conversations.
Settings at the top of the inbox (owners and admins change them):
Read-only members can do neither.
Reports at the top of the inbox shows the last 7, 30 or 90 days: how many conversations started (by channel), how many were resolved by the AI alone, the median time to the first answer and to resolution, customer satisfaction (average rating, share of 4–5 stars, how many rated), and each member's conversations, replies and rating. Imported conversations are left out.
Your own systems can work in the inbox with an API key (Settings → API keys), acting as the key's owner: their role in the workspace counts, as in the dashboard (see Inbox settings).
| Method | Path | What it does |
|---|---|---|
| GET | /api/v1/voice/conversations?status=open|needs_human|mine|resolved | The conversations, the latest first; label, contact_id, limit (up to 100); next_before pages on |
| GET | /api/v1/voice/conversations/{id} | One conversation with its contact, AI summary and latest messages; before and before_id page back |
| POST | /api/v1/voice/conversations/{id}/messages | { "text" }: reply to the person; it takes the conversation over from the agent |
| POST | /api/v1/voice/conversations/{id}/notes | { "text" }: a note for the team |
| POST | /api/v1/voice/conversations/{id}/assign | { "member_id" }, or null for nobody |
| POST | /api/v1/voice/conversations/{id}/resolve | Resolve it (the customer may be asked to rate it) |
| POST | /api/v1/voice/conversations/{id}/reopen | Open it again |
| POST | /api/v1/voice/conversations/{id}/hand-back | The agent answers it again |
| PUT | /api/v1/voice/conversations/{id}/labels | { "labels": [...] }: all its labels |
The SDKs have them as evasay.conversations.list, get, sendMessage, addNote, assign, resolve, reopen, handBack and setLabels, and the MCP server as tools. With the conversation.* webhooks, you hear about new conversations and messages as they happen.
Connect them under Integrations with your own keys.
The events are sent in the background and tried again if the app does not answer; nothing is sent when the customer has no email or phone number.
Open Settings at the top of the inbox, then Rules (owners and admins). A rule runs when a conversation starts (on the customer's first words) or when it needs a person. If the conversation meets every condition you set (any of the chosen channels, a given agent, any of the words the customer said), the rule adds labels, assigns it to a teammate, or resolves it, for example to file out-of-office replies. Rules run in the order they were made; once one resolves the conversation, no later rule runs. The conversation's timeline shows which rule ran. Rules run before auto-assignment, so a conversation a rule gave to someone is not given out again.
Moving from Gorgias, Zendesk or Tidio? Open Settings at the top of the inbox and click Import (owners and admins). Your customers and their conversations from the last 12 months come into the inbox as resolved conversations, so when a customer writes again, their history is in the panel beside the conversation. Nothing is charged.
Choose the agent whose inbox the conversations join and start. The import runs in the background; a large help desk can take a few hours, and you can close the window. Customers are matched by email, else by phone number, so an imported customer who later emails you or calls is the same contact. Running the import again adds nothing twice. Your key is kept, encrypted, only until the import ends. If your workspace keeps call content for less than a year (Data settings on the Calls page), only that period is imported.
Without help, a visitor is known only by their browser. To recognize your signed-in users across devices and show them their earlier conversations, sign their user id on your server with your workspace's visitor identity key (Settings → API keys) and pass both to the widget:
// on your server
import { visitorUserHash } from '@evasay/sdk';
const hash = await visitorUserHash(process.env.EVASAY_IDENTITY_KEY, user.id);
<!-- on your page -->
<script>
window.evasay = window.evasay || [];
evasay.push(function (agent) {
agent.identify({ id: 'USER_ID', hash: 'HASH_FROM_YOUR_SERVER', email: 'lee@example.com', name: 'Lee' });
});
</script>
The hash is the hex HMAC-SHA256 of the id under the key (visitor_user_hash in the Python SDK). A claim whose hash does not hold is ignored and the visitor stays anonymous. Making a new key stops old hashes from working.
In Agent → Deploy you can set a greeting bubble shown by the closed widget after a few seconds on the page, and your team hours. On a Shopify store, an agent that shops can greet product pages with their own line, where {product} becomes the product's name. Outside them the widget says your team is away and offers replies by email; the agent still answers.