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 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
| Prompt | Job |
|---|---|
| Agent prompt | Run 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:
| Input | Does the outcome AI see it? | Role |
|---|---|---|
| Agent prompt (conversation script) | No | — |
Post-call instructions (configuration.postCallPrompt) | Yes | Your rules for summary + outcome choice |
Outcome descriptions (call_outcomes) | Yes | One line per outcome: name, slug, description |
| Transcript | Yes | Passed as the user message |
| Lead status | Yes | Its own section in the prompt |
| Email templates | Yes (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, otherwisenicht_erreicht. - Never connected (no answer, busy, failed …) or no customer line →
nicht_erreicht. - Otherwise →
erreicht, falling back tokeine_zeit.
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
- Never leave outcome descriptions empty — they are part of the prompt. An outcome with no description gives the AI nothing to recognise it by.
- Always set an explicit voicemail rule — otherwise a voicemail lands as "Callback requested" or "Not interested".
- Create a "Reached" outcome so short but genuine conversations are not left without a fitting outcome.
- Workflows filter on the slug, not the name — renaming an outcome does not
change its slug. A
call_endedtrigger with anoutcome_slugsfilter still reacts to the old slug.
Doing it via MCP
Every step goes through the MCP tools:
- Read the current field —
agents_get(GET /api/agents/{id}) and inspectconfiguration.postCallPrompt. - Set the post-call instructions —
agents_update(PUT /api/agents/{id}) with the fieldconfiguration.postCallPrompt. Send the wholeconfigurationobject so no other fields are lost. - Maintain outcome descriptions —
call_outcomes_list(GET /api/call-outcomes) to read,call_outcomes_update(PUT /api/call-outcomes/{id}) to setname,slug, anddescription.
Example snippet for agents_update:
{
"configuration": {
"postCallPrompt": "After every conversation, assign exactly one call outcome … (template above)"
}
}
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.
Related pages
- Agents & Assistant — agent configuration and booking.
- Custom fields & metadata — create and maintain call outcomes.
- Workflows —
call_endedtrigger with a filter on outcome slugs. - MCP tools —
agents_get,agents_update,call_outcomes_list,call_outcomes_update.