Skip to main content
An agent in Zelto is the bot (or human) on the other end of a conversation. Each agent belongs to one organization and is tied to the provider its calls come from — Vapi, Retell, or LiveKit — or to none at all when you upload calls directly.

Anatomy of an agent

FieldWhat it holds
NameDisplay name, editable in Zelto and independent of the provider.
DescriptionOptional free-text note.
System promptThe agent’s prompt, shown next to transcripts when you review and audit it.
ProviderThe stack the calls came from (vapi, retell, livekit), or empty for direct uploads.
External IDThe provider’s own id for the agent — how Zelto matches incoming calls to an existing agent.
Typeai for a bot, human for a person on the line.
Agents are created the first time a call references them: ingestion looks up the provider’s external id and reuses the matching agent, or creates one if it’s new. If a provider rotates external ids from call to call, Zelto can collapse those onto a single agent with an org-level pattern, so you don’t accumulate duplicates.

Agent activity

Click into an agent for a call-volume trend chart, an hour-by-day heatmap, and its most recent conversations, alongside its system prompt and the findings surfaced from its calls. Each agent can also post a daily status message to Slack — yesterday’s conversation count, at a time you choose — once Slack is connected.

How calls reach an agent

Every payload Zelto receives lands in the append-only webhooks table first, then becomes a conversation with a turn-by-turn transcript. How each provider delivers a call:
ProviderHow calls arrive
VapiOne end-of-call-report webhook per finished call.
Retellcall_ended, then call_analyzed once Retell finishes its own post-call pass.
LiveKitYour worker POSTs each finished session to /webhooks/calls.
Custom & otherPOST the canonical call payload to /webhooks/calls.
Recording the raw payload first means ingestion is always replayable, so a delivery is never lost even if processing has to be re-run.

Connection status

Each agent’s detail page carries a Connections card — the at-a-glance signal that calls are reaching Zelto. It names the provider the agent ingests from and reports on the last call received:
  • “Last call received 2 hours ago” — calls are flowing; ingestion is healthy.
  • “No recent calls” / “integration may be stale” — connected, but nothing has arrived lately. Place a test call, or check that the provider is still sending.
  • “Last webhook errored” — the most recent delivery reached Zelto but couldn’t be turned into a conversation.
  • “No calls received yet” — the agent has a provider but has never received a call.
If a call never showed up, start here. For which signal to check per provider, see Connect a voice provider.

Recording storage

Most providers hand Zelto a recording URL that stays valid — Vapi, for example, returns a permanent URL that Zelto stores as-is. Some providers instead return a short-lived presigned URL that expires within the hour. For those, a background job downloads the audio and re-hosts it on Zelto storage, so the player on the conversation detail page keeps working long after the upstream URL is gone.