How I would take Mandarin-speaking customers from first call to production on Retell, and the deployment desk I built against the Retell API to do it.
Retell reports $80M ARR with a team of 50, up from $5M at the start of 2025. Customers include CVS/Aetna, American Airlines, Lenovo and Grab (8 SEA countries).
Get Mandarin-speaking enterprise customers live and keep them live: build agents with them, debug the seams (SIP, webhooks, custom LLMs, latency), and turn what breaks into product input.
A deployment desk on the Retell API: call triage with bilingual replies, a live webhook inbox with signature checks, a custom-LLM WebSocket probe, and an agent audit.
| Takeaway | Why it matters for this seat |
|---|---|
| Most failures sit at a seam the customer owns | Of the 26 disconnection reasons that are not normal endings, 13 point at the customer's trunk, server, client or data, 6 at carriers or callees, and 4 at Retell. The first reply should already say which side owns the fix. |
| Chinese coverage is one locale | Mandarin runs on zh-CN everywhere; Taiwan and Hong Kong customers get Simplified-script output and need Cantonese split out. Expectation-setting starts at the kickoff call. |
| Greater-China calling is BYO SIP | Retell's supported outbound list has no China, Taiwan, Hong Kong or Singapore, so those deployments ride the customer's own trunk. SIP skills decide time to live. |
| This month moves the ground | The legacy SIP host retired and billing moved to prepaid credits on 30 September; the v2 browser SDK is deprecated on 18 October. Early tickets will come from these. |
A YC W24 voice-agent platform that sells both self-serve and enterprise. The CSE sits where self-serve depth meets enterprise telephony.
| Surface | What a customer configures | Where it breaks |
|---|---|---|
| Agent | Single prompt, multi prompt or conversation flow; Retell LLM or a custom LLM over WebSocket; voice, language, speech settings. | Prompt length (paid on every turn), language mix, tool calls announced but never made. |
| Telephony | Retell numbers (Twilio, Telnyx), imported numbers, elastic SIP trunks, CCaaS (Five9, Genesys, Avaya). | Trunk auth, country restrictions, transfers, one-way audio. |
| Integration | Webhooks (call_started, call_ended, call_analyzed), inbound webhook for routing, function calls, knowledge base. | Signature checks, duplicate deliveries, timeouts, the wrong API key. |
| Operations | Concurrency (20 by default, burst at +$0.10/min for the whole call), batch calling, AI QA, alerting. | concurrency_limit_reached on batch launches; bills that jump with long prompts. |
Status history, last 6 months: 13 incidents. The two September postmortems name a custom-LLM WebSocket init race (5 Sep) and a half-rolled deploy that put two workers on one call (16 Sep).
What a customer evaluating Retell is comparing, and what the CSE has to defend in a deployment.
| Player | Position | Public price | Gap vs Retell |
|---|---|---|---|
| Vapi | Developer orchestration, bring your own providers | $0.05/min platform plus pass-through; HIPAA add-on $2,000/month | More assembly; HIPAA is paid where Retell's BAA is self-serve |
| Bland AI | Own models, enterprise outbound | $0.12 to $0.14/min, call caps on lower tiers | Caps and fewer model choices |
| ElevenLabs Agents | Voice-quality leader | Plan minutes, overage about $0.08/min | Thinner CCaaS and SIP integrations; Retell resells its voices |
| Synthflow | No-code, SMB and agencies | Enterprise from $30K/year | Less developer depth |
| Parloa, PolyAI | Managed enterprise contact centre (EU, UK) | Custom | Parloa offers EU data residency, which Retell does not; both are services-heavy |
| Sierra, Decagon | Agent platforms, outcome pricing | Custom | Chat-first or big-enterprise only; voice is one channel |
| LiveKit Agents, Pipecat, OpenAI Realtime | Build-it-yourself primitives | Token or open source | No hosted QA, flows or telephony operations |
| Chinese stacks (Volcano Engine, Alibaba, iFlytek) | Domestic voice AI | Not public | Stronger mainland compliance and dialects; weaker global telephony for companies calling abroad |
Where Retell wins a Mandarin deal: a company headquartered in Greater China calling customers across SEA, the US and LatAm, needing global telephony, CCaaS hooks and a self-serve BAA, with a Mandarin-speaking engineer on its side of the call.
Retell names growth with enterprise customers in China. The deployments behind that land in four markets, each with its own traps.
| Market | Script and speech | Telephony | What I set up at kickoff |
|---|---|---|---|
| Mainland HQ, calling abroad | Simplified; Mandarin | Destination country rules apply; the team works in Beijing time | Async handover notes in 简体, a shared glossary, and an overlap window agreed on day one |
| Taiwan | Traditional; Taiwan Mandarin vocabulary | +886 is off the supported outbound list: BYO SIP | Say up front that transcripts and summaries come back in Simplified under zh-CN; plan a conversion step |
| Hong Kong, Macau | Traditional; Cantonese first | BYO SIP | A separate yue-CN agent (Platform or MiniMax voice), routed by number or menu |
| Singapore, Malaysia | Simplified; Mandarin mixed with English and Malay | Singapore is BYO SIP; Malaysia has Retell numbers | Multilingual zh-CN plus en-US on an ASR that code-switches (Deepgram or Soniox); test code-switched scripts |
Sources: docs language support, multilingual agents ("will mix them up frequently" on Cantonese and Mandarin), international calling.
Small gaps I hit while coding against the public docs and API. Each one is the kind of thing that turns into a customer ticket.
| Finding | Evidence | Suggested fix |
|---|---|---|
| The List Calls page points to a get-call path that returns 404 | The note on List Calls says to fetch transcripts with GET /v1/get-call/{call_id}. That route answers 404 "Cannot GET"; /v2/get-call/{call_id} is the live one. | Change the note to /v2. |
| Two pages disagree on v2/list-calls | List Calls says "there is no v2/list-calls". The API overview uses POST /v2/list-calls as its example, and that route still answers (401 without a key). | Point the overview example at /v3/list-calls. |
| The disconnection table and the API enum differ | Debug call disconnection documents network_blocked; the OpenAPI enum has no such value. The enum has manual_stopped; the table does not. | Sync both. Typed SDK users will not see network_blocked. |
| Speech providers: three on one page, four on another | The ASR provider page names Azure, Deepgram and Soniox; the language-support page adds an AssemblyAI column. | Add AssemblyAI to the provider page. |
| Compliance lists differ | The homepage lists ISO 27001 alongside HIPAA, SOC 2 Type II and GDPR; the docs compliance page lists HIPAA, GDPR and SOC 2 only. | Align the two, since security reviews quote both. |
Try it: the desk's Custom LLM tab grades a WebSocket server against the protocol (a correct reference server and one with three classic bugs are built in), and the Webhooks tab shows a signature pass and a failure end to end with no Retell account.
| JD duty | How I would do it | Detailed in |
|---|---|---|
| Support technical onboarding and deployment | Kickoff checklist per market (§03): language and script, telephony path, webhook and signature, concurrency for launch day, data storage setting, BAA if health data. | §03, §07 |
| Help customers launch and scale AI voice agents | Staged launch: 20 test calls, then 5% of traffic, then full. Watch e2e p90, error reasons and sentiment per stage in the call list. | §07 |
| Build trusted relationships with customer engineering teams | Work in their language and their channel (WeChat, Lark, LINE or Slack), send written recaps in 简体 or 繁體 after every call, and answer with evidence. | §06 |
| Build AI voice agents alongside customers | Pair on prompts and flows; keep prompts short (billed and slower above 4,000 tokens); one agent per language where accuracy matters. | §03 |
| Design conversation flows and deployment strategies | Conversation flow for regulated scripts (collections, health), single prompt for open Q&A; transfers with a staffed fallback. | §05 |
| Debug APIs, webhooks, SIP, telephony, auth, integrations, latency | Reason code first, then the per-component latency, then logs or PCAP. The desk automates the first two. | ★, §05 |
| Work directly in customer codebases | Webhook handlers (raw-body verification), custom-LLM servers (response_id, ping_pong, text frames), E.164 normalisation in their CRM sync. | §05 |
| Identify product gaps; translate needs into improvements | One structured note per gap with affected accounts and call IDs. First candidates: a Traditional-script output option and a zh-TW locale. | §03, §06 |
| Help customers launch new use cases; expand adoption | After a stable inbound launch: outbound reminders via batch calling, AI QA on 100% of calls, then SMS follow-ups. | §07 |
Built from the docs, the status history and recurring community threads.
| Ticket | What I check, in order | Likely cause and fix | Escalate? |
|---|---|---|---|
| "Our Taiwan agent writes transcripts in Simplified and sounds mainland" (我們的客服記錄都是簡體字) | Agent language, voice provider, a sample transcript | zh-CN is the only Mandarin locale. Convert script downstream, choose a voice that suits Taiwan callers, set expectations. | Product note with affected accounts |
| Outbound to +886 or +65 fails on the customer's own trunk | disconnection_reason, destination country list, trunk logs for the SIP response | Destination not enabled, or trunk credentials (telephony_provider_permission_denied). | Only if the country list needs a change |
| Inbound went dead on 30 September | Trunk origination target | Still pointing at the retired legacy SIP host; move it to sip.retellai.com. | No |
| "Webhook signature always fails" | Raw body vs parsed, which key, timestamp age | Body re-serialised before verifying, or a key without the webhook badge. | No |
| "The agent goes silent after the greeting" on a custom LLM | disconnection_reason, then a probe of the WebSocket URL | content_complete sent as a string, wrong response_id, or no /{call_id} route. | No; pair in their code |
call_id, agent_id and version, direction and numbers, start time in UTC, disconnection_reason, e2e and component latency, public_log_url, twilio_call_sid when present, customer impact (how many calls, since when), what was already tried. The desk fills it from a call.
What happened, who owns the fix, the next step and when they hear back. Written in the customer's script:
简体: 通话 call_… 未接通,原因是号码格式运营商无法识别。请使用完整的 E.164 格式,例如 +8613812345678。
繁體: 通話 call_… 未接通,原因是號碼格式電信業者無法識別。請使用完整的 E.164 格式,例如 +886912345678。
| Window | Work | Measure |
|---|---|---|
| Days 1 to 30 | Shadow deployments; take the Mandarin queue; build a zh glossary and reply library in 简体 and 繁體; audit every Mandarin account's agents and numbers. | First response within one PT or Asia business day; every escalation packet complete |
| Days 31 to 60 | Own two enterprise launches end to end; write kickoff checklists per market; file the Traditional-script and zh-TW product notes with account evidence. | Time from kickoff to first production call; error-reason share under 2% at launch |
| Days 61 to 90 | Expand launched accounts into a second use case (outbound reminders, AI QA); publish Mandarin docs for the top ticket classes. | Minutes growth per account; repeat-ticket rate on documented classes |
Built from the public job posting (2026), Retell's docs, OpenAPI spec, pricing and status pages, the retell-sdk source, and the public community forum, all read on 30 September 2026. API route behaviour was checked with an invalid key only. The demo is my own tool, built for this application; it reads a Retell account only when its owner pastes a key, and sample mode uses synthetic data.
Docs: disconnection reasons · latency · custom LLM
Webhooks: secure the webhook · retell-sdk
Languages: language support · multilingual
Company: about · Grab partnership · status
Pricing: retellai.com/pricing · concurrency
Independent homework for the Retell AI Customer Success Engineer (Mandarin) role · 2026 · edwardtay.com