Voice agents
Per-site context — business name, hours, service area, dispatch fee — is injected at ring time by the inbound webhook resolving the dialled number, so agents never hold a market’s details. What they do hold is the script, and that is per trade: a plumbing call cannot be served by a furnace script no matter how good the variables are. So there is one agent per trade, and this page is where you see all of them at once.
Fleet
One row per agent — versions collapsed, since list-agents returns one row per version and a picker of five agents would otherwise read as nine.
| Agent | Engine | Version | Audit | Sites | Numbers |
|---|---|---|---|---|---|
| Conversation Flow Agent agent_c9208fd6b3aef67d2211fd0f30 | conversation-flow | v1 · published v0 | pass | Willow Crest Plumbing San Jose CA Plumber | +16693695287 |
| Conversation Flow Agent agent_664656ef9dbaf61870c3410a70 | conversation-flow | v0never published | never read | — | — |
| Roger - Old Pueblo Heating and Air Intake agent_57f4e0346389a82e7b699a4fbf | conversation-flow | v3 · published v2 | pass | Old Pueblo HVAC Tucson AZ HVAC Repair | +15203694399 |
| Conversation Flow Agent agent_1e6b0f0036c4b2fc4544299d44 | conversation-flow | v1 · published v0 | never read | — | +18654216517 pinned 0 |
webhook_url and post_call_analysis_data, because a PATCH that touched a flow would replace hand-built dialogue with a guess and there is no undo.Connect to Retell
Pull reads the agent over the API, so the dashboard stays the place you edit and this just reads the result. No re-importing after every change.
Import agent JSON
Accepts a bare agent export, or { "agent": {…}, "flow": {…} }. Useful for pinning a known-good version. It is a snapshot of a file, not a reading of Retell — if the agent changed since the export, these checks describe the export.
What Retell holds
Integration checks
These check only the wiring this repo owns — where webhooks go, the save_lead function, analysis fields. Nothing here is an opinion about your script: the conversation belongs to whoever built it in Retell.
| Check | Status | Now | Fix |
|---|---|---|---|
| Agent webhook URL | pass | https://rank-and-rent-beta.vercel.app/api/retell/events | — |
| save_lead custom function | pass | https://herbal-punisher-flyaway.ngrok-free.dev/api/retell/tool/save-lead | — |
| Post-call analysis fields | pass | name, phone, address_line, city, zip, problem, system_type, system_age_years, is_emergency, is_owner, is_commercial | — |
| Recording retention | pass | data_storage_setting is "everything", so Retell keeps recordings and the fetch job is not racing a 10-minute link expiry. | — |
| Published | warn | Version 3 is not published. | Publish it in the Retell dashboard once the integration checks pass, or calls may be served by an older version that lacks them. |
Adding save_lead yourself
This is the one fix left manual, and the reason is real: a custom function only fires from the nodes it is attached to. Guessing which of your nodes should call it would either do nothing or corrupt the flow, so it is your call — but it is also the difference between capturing a lead mid-call and losing it when the caller hangs up.
Other agents read
| Agent | Engine | Nodes | Webhook | Last read |
|---|---|---|---|---|
| Conversation Flow Agent agent_c9208fd6b3aef67d2211fd0f30 | conversation-flow | 12 | set | 2026-08-17 01:46 |
| San Jose CA Plumber intake agent_3b52631735fc765b0a6ebdd734 | retell-llm | — | set | 2026-08-17 01:27 |
| Roger - Old Pueblo Heating and Air Intake agent_57f4e0346389a82e7b699a4fbf | conversation-flow | 17 | set | 2026-08-04 19:02 |