Skip to main content

Post-call outcomes: how assignment works

After every call, exactly one AI call runs and produces two things: the summary and exactly one call outcome. Which outcome is set is decided by this AI alone, from the transcript, the outcome descriptions, and your post-call instructions.

The most common mistake

The agent prompt (the conversation script) is not passed to this AI. A "Postcall" heading inside the agent prompt is invisible to outcome selection. Outcome rules belong in the post-call instructions field (configuration.postCallPrompt), not in the agent prompt.

Typical result of this mistake: a voicemail greeting ending with "thanks, goodbye" lands as "Not interested" (the lead is never called again) or as "Callback requested" (a loop: the callback hits the voicemail again). With a rule in the post-call field, this does not happen.

Two prompts, two jobs​

PromptJob
Agent promptRun the conversation (during the call).
Post-call instructions (configuration.postCallPrompt)Write the summary and choose the outcome (after the call).

What the outcome AI sees in its system prompt:

InputDoes the outcome AI see it?Role
Agent prompt (conversation script)No—
Post-call instructions (configuration.postCallPrompt)YesYour rules for summary + outcome choice
Outcome descriptions (call_outcomes)YesOne line per outcome: name, slug, description
TranscriptYesPassed as the user message
Lead statusYesIts own section in the prompt
Email templatesYes (CRM path only)For follow-up actions after the call

Automatic fallback​

The AI must always choose exactly one outcome. A fallback kicks in only when it returns none — and only if the named slugs exist in the workspace:

  • Voicemail detected (voicemail-detected) → voicemail, otherwise nicht_erreicht.
  • Never connected (no answer, busy, failed …) or no customer line → nicht_erreicht.
  • Otherwise → erreicht, falling back to keine_zeit.
Keyword-based voicemail detection

True keyword-based voicemail detection currently exists only on the native telephony path. On the cloud path the AI decides from the transcript, outcome descriptions, and post-call instructions alone — which is why an explicit voicemail rule in the post-call field matters most there.

Template for the post-call field​

Copy it directly. Adjust the slugs to match the outcomes in your workspace (see call_outcomes_list / Call outcomes).

After every conversation, assign exactly one call outcome based on how the call
went. In the summary, always note what was promised.

- Voicemail (slug: voicemail): mailbox, answering machine, or a recorded
announcement. Recognisable by the announcement text, "after the beep",
"goodbye" without a real answer, or when there is no reaction to the opening
question. Never "Callback requested" or "Not interested" for a voicemail.
- Not reached (slug: nicht_erreicht): no pickup, busy, connection dropped.
- Reached (slug: erreicht): a conversation happened, but neither a commitment nor
an appointment.
- Callback requested (slug: rueckruf_gewuenscht): the person themselves names a
time or asks for a callback.
- Not interested (slug: kein_interesse): active rejection by the person.
- Email sent (slug: email_versendet): an email/link was promised.

Summary instructions belong in this field too, e.g. "In the summary, always state whether the link was promised."

Checklist & gotchas​

  1. Never leave outcome descriptions empty — they are part of the prompt. An outcome with no description gives the AI nothing to recognise it by.
  2. Always set an explicit voicemail rule — otherwise a voicemail lands as "Callback requested" or "Not interested".
  3. Create a "Reached" outcome so short but genuine conversations are not left without a fitting outcome.
  4. Workflows filter on the slug, not the name — renaming an outcome does not change its slug. A call_ended trigger with an outcome_slugs filter still reacts to the old slug.

Doing it via MCP​

Every step goes through the MCP tools:

  1. Read the current field — agents_get (GET /api/agents/{id}) and inspect configuration.postCallPrompt.
  2. Set the post-call instructions — agents_update (PUT /api/agents/{id}) with the field configuration.postCallPrompt. Send the whole configuration object so no other fields are lost.
  3. Maintain outcome descriptions — call_outcomes_list (GET /api/call-outcomes) to read, call_outcomes_update (PUT /api/call-outcomes/{id}) to set name, slug, and description.

Example snippet for agents_update:

{
"configuration": {
"postCallPrompt": "After every conversation, assign exactly one call outcome … (template above)"
}
}
Check the field names

The MCP tool parameter names match the fields of the REST API. configuration.postCallPrompt is the agent-configuration field; when it is empty, the assistant template's postCallPrompt is used as a fallback.