These are the same agents we put in front of paying customers. The hosted Teams product gave you a pretty form to pick a voice + persona. The open-source package gives you the same picks as a TypeScript object — and the actual TwiML, the actual prompt, the actual outcome classifier we shipped.
Each voice is mapped to a Polly Neural or Google Wavenet voice in the underlying TwiML. You can substitute any Twilio-supported voice via voice_override in the agent config.
"Hey — I know cold calls are the worst, so I'll be quick…"
"voice": "female-warm""James from Crixin. Two minutes — looking at your Q3 spend on…"
"voice": "male-professional""Hey, this is Mike — y'all open right now? Just had a quick…"
warm_intro persona."voice": "male-friendly""This is Emily Chen — I'd like to schedule fifteen minutes regarding…"
"voice": "female-professional"A persona is a system prompt + a TwiML opening template + an outcome-prompt tuned to the persona's goal. The four below ship in the box. Define your own by exporting an AgentPersona from your config.
Balanced. Professional and friendly. Asks discovery questions before any pitch. Use this when you don't have a strong opinion about which way the call should lean.
Direct and persuasive. Drives toward commitment. Won't take "send me an email" as a final answer — pushes for a 15-minute slot on calendar. Use on warm leads or replays of inbound interest.
Soft opener, builds rapport first. Apologizes for the cold call, lowers stakes, invites them to hang up. Counter-intuitively gets the highest "yes, send me info" rate of the four.
Re-engages cold leads. Knows the prior context (last call outcome, last touch date). Opens with "we spoke about X — checking in." Use on leads in callback or stale not_interested states.
Same shape as the hosted dashboard's "hire agent" form. Each agent gets a Twilio number provisioned in the area code you specify; subsequent calls and SMS go from that number sticky.
// agents/sarah.ts import { hireAgent } from "crixin/voice"; const sarah = await hireAgent({ name: "Sarah", voice: "female-warm", // Polly.Joanna-Neural persona: "warm_intro", areaCode: "415", // provisions a SF Twilio number }); await sarah.placeCall({ to: "+15555550100", prompt: "Calling about Q3 catering for tech offices in SoMa.", campaignId: "q3-tech-catering", });
Or skip the wrapper entirely and call the underlying tools — see the API reference.