<!-- Source: https://docs.vinsi.ai/tools/after-call-actions -->
# After Call Actions

Automatically send an email or create a support ticket when an AI agent call ends with a specific disposition.

Created: September 16, 2026

Updated: September 16, 2026

## Overview

Open **Tools** and select the **After Call Actions** tab ("Automatically trigger actions when a call ends with a specific disposition"). There are two kinds of action:

| Tab        | What happens when a call matches                                                                                            |
| ---------- | --------------------------------------------------------------------------------------------------------------------------- |
| **Email**  | Sends your custom email (subject and HTML body with call variables), optionally with the transcript and recording attached. |
| **Ticket** | Creates a ticket in VINSI Desk, optionally assigned to a user or group, and can email a notification.                       |

Actions are triggered by **dispositions** — the call outcomes you define in the agent editor under **⚙️ Tools & Data → Dispositions** (for example _Appointment Booked_, _Needs Callback_, _Complaint_). At the end of each call the AI picks the disposition that fits; every action whose trigger list includes it runs. Matching ignores upper/lower case.

Organization admins and members with write access to Tools can create and change actions. Others can view the list.

## Required Setup

After Call Actions only run for agents that send their end-of-call data to VINSI. Do this once per agent (and per direction):

1. On the After Call Actions tab, in the **Required setup** box, click **Copy** to copy the webhook URL (it ends in `/api/webhooks/ai-phone-agent`).
2. Open the agent in **AI Phone Agents**. On the **Inbound Agent** tab, go to **⚙️ Tools & Data** and paste the URL into **After Call Webhook**.
3. If the agent also makes outbound calls, paste the same URL on the **Outbound Agent** tab.
4. Make sure the agent has **Dispositions** on each tab you use — they are what your actions trigger on.
5. Click **Save**.

Each agent tab has one After Call Webhook field. If you put the VINSI URL there, you can't also send that tab's call data to your own endpoint (see [After Call Webhook](https://docs.vinsi.ai/tools/after-call-actions#aca-webhook)).

## Create an Email Action

1. On the **Email** tab, click **Add Email Action** (or **\+ Add your first email action**).
2. **Scope to agent** — leave **All agents** to run for calls from any agent, or pick one agent. Each agent is listed as "Name — Inbound" or "Name — Outbound", so you can target one direction.
3. **Disposition trigger(s)** — choose one or more dispositions. The list comes from the selected agent (or from all agents).
4. **Send email to** — the recipient address, e.g. `team@company.com`.
5. **Subject** — can include variables.
6. **Email body** — HTML supported, can include variables.
7. Optionally tick attachments.
8. Check the **Preview with sample data** tab, then click **Create action**. The button stays disabled until at least one disposition, a recipient, and a subject are filled in.

The action is named automatically, e.g. **On "Appointment Booked, Needs Callback" → Email**. Emails are sent from **VINSI.AI <noreply@vinsi.ai>**.

### Template Variables

Click in the Subject or Email body, then click a variable chip to insert it at the cursor. You can also type them.

| Variable            | Value                                                                                  |
| ------------------- | -------------------------------------------------------------------------------------- |
| {{user\_phone}}     | Caller's phone number (the person the agent spoke with)                                |
| {{agent\_phone}}    | The agent's phone number                                                               |
| {{disposition}}     | The call's disposition                                                                 |
| {{summary}}         | AI-written call summary                                                                |
| {{call\_id}}        | Call ID                                                                                |
| {{recording\_url}}  | Link to the call recording (empty if none)                                             |
| {{transferred\_to}} | Number the call was transferred to (empty if not transferred)                          |
| {{transcript}}      | Full transcript                                                                        |
| {{call\_data.KEY}}  | A field the agent collected, where KEY is the **Key** of a Call Data item on the agent |

When you scope the action to an agent that has **Call Data**, its fields appear as chips (e.g. `{{call_data.customer_name}}`). Otherwise example chips are shown — replace `KEY` with your own field key. If the caller never provided a Call Data field, the email shows **Not provided**. A misspelled variable is left as-is in the email, so check the preview.

Example email body

```
<p>New callback request from {{call_data.customer_name}} ({{user_phone}}).</p>
<p><strong>Outcome:</strong> {{disposition}}</p>
<p><strong>Summary:</strong> {{summary}}</p>
<p><a href="{{recording_url}}">Listen to the recording</a></p>
```

### Attachments

| Option                                           | Result                                      |
| ------------------------------------------------ | ------------------------------------------- |
| **Include recording URL as attachment**          | Attaches the call recording as an MP3 file. |
| **Include call transcript as attachment (.txt)** | Attaches the transcript as a text file.     |

Phone recordings can take a while to become available after hang-up. When the recording attachment is ticked, the email waits until the recording is ready and is then sent automatically, so it may arrive later than the call ended. Website text chats have no recording and send right away.

## Create a Ticket Action

1. On the **Ticket** tab, click **Add Ticket Action**.
2. Set **Scope to agent** and **Disposition trigger(s)** as for email.
3. **Assign to user (optional)** — a member, or **Unassigned**. **Assign to group (optional)** — a ticket group, or **No group**. Assigned users and group members get the usual ticket assignment email.
4. Optionally tick **Send email notification when ticket is created**, enter **Send ticket notification to**, and choose attachments.
5. Click **Create action** (a disposition is the only required field).

Each matching call creates a ticket in [VINSI Desk](https://docs.vinsi.ai/tickets/tickets) with:

| Field                    | Value                                                                              |
| ------------------------ | ---------------------------------------------------------------------------------- |
| Subject                  | Phone Support: followed by the start of the call summary                           |
| Description              | The summary and full call transcript                                               |
| Status / Priority / Type | Open / Medium / Support Request                                                    |
| Source / Tag             | AI Phone Agent / Phone Support                                                     |
| Due                      | 4 days after the call                                                              |
| Extra details            | Call ID, caller and agent phone, recording link and transfer number when available |

The notification email is titled **Ticket #… Created — \[disposition\]** and includes the summary and a **View Ticket in Vinsi Desk** button. Ticket workflows set to run on ticket creation also run.

## Edit, Duplicate, Delete

Each tab lists its actions with **Name**, **Type**, **Description**, **Ownership**, and **Actions**. Use **Search by disposition or email...** to find one.

- **Edit** — click the row or the edit button, change settings, and click **Save changes**.
- **Duplicate** — creates _Copy of …_ with the same settings, handy for a second recipient.
- **Delete** — confirm in the dialog. This can't be undone.

Actions have no on/off switch — delete an action to stop it.

## Examples

| Goal                                               | Setup                                                                                                                      |
| -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| Email the front desk when an appointment is booked | Email action, disposition _Appointment Booked_, to frontdesk@clinic.com, subject New booking: {{call\_data.patient\_name}} |
| Open a ticket for complaints                       | Ticket action, disposition _Complaint_, assign to group _Customer Care_, notification with transcript attached             |
| Send sales every hot lead with the recording       | Email action scoped to your outbound agent, dispositions _Interested_ and _Callback Requested_, recording attached         |

## After Call Webhook (Your Own Endpoint)

Instead of the VINSI URL, you can enter your own HTTPS endpoint in **⚙️ Tools & Data → After Call Webhook** (placeholder `https://api.domain.com/endpoint`) to push call results into your CRM, Zapier, Make, or a custom app. Inbound and outbound tabs each have their own field. The agent won't save an invalid URL ("Please enter a valid url for the after call webhook").

When a call ends, VINSI sends one `POST` request with a JSON body to that URL. It isn't signed and isn't retried, so make your endpoint quick and reliable.

### Webhook Payload

Phone call (inbound or outbound)

```
{
  "user_phone": "+16615550123",
  "agent_phone": "+16615550199",
  "variables": { "firstName": "Ada" },
  "organization_id": "org_...",
  "disposition": "Appointment Booked",
  "summary": "The caller booked a cleaning for Tuesday at 10 AM.",
  "transcript": "BOT: Thank you for calling...\nHUMAN: Hi, I'd like to...",
  "recording_url": "https://...",
  "call_id": "c_...",
  "call_data": {
    "customer_name": { "value": "Ada Lovelace" }
  },
  "transferred_to": null
}
```

| Field                      | Notes                                                                                          |
| -------------------------- | ---------------------------------------------------------------------------------------------- |
| user\_phone / agent\_phone | Caller (or person called) and the agent's number.                                              |
| variables                  | Variables passed to the call (e.g. from Call Me, batch calls, or the API).                     |
| disposition                | One of the agent's dispositions.                                                               |
| recording\_url             | Temporary link (about 1 hour), or null if the recording isn't ready yet. Download it promptly. |
| call\_data                 | Each Call Data key holds an object with a value.                                               |
| transferred\_to            | Transfer destination, or null.                                                                 |

Conversations from the [website widget's text chat](https://docs.vinsi.ai/ai-phone-agents/website-widget) send the same fields except `variables`, with `user_phone` and `agent_phone` set to `text_chat`, `recording_url` `null`, and an extra `"call_type": "widget_text"`.

See also [Call Logs](https://docs.vinsi.ai/telephony/callLogs) for the same data in the dashboard, and [Go High Level](https://docs.vinsi.ai/api-integration/gohighlevel) for a built-in CRM integration.

## Troubleshooting & FAQ

| Problem / question                        | Answer                                                                                                                                         |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| No emails or tickets at all               | Check the agent tab that handled the call has the VINSI webhook URL in **After Call Webhook** and was saved.                                   |
| Works for inbound, not outbound           | Paste the URL on the **Outbound Agent** tab too.                                                                                               |
| Disposition trigger list is empty         | Add **Dispositions** to the agent, save, then reopen the action.                                                                               |
| Action didn't fire for a call             | Open the call in [Call Logs](https://docs.vinsi.ai/telephony/callLogs) and compare its disposition with the action's triggers and agent scope. |
| Email arrived late                        | The recording attachment was ticked; the email waits for the recording. Untick it for instant emails.                                          |
| Email never arrived with recording ticked | Make sure call recording is enabled for that number; without a recording the email can't be sent. Also check spam.                             |
| {{something}} shows literally             | The variable name is misspelled. Use the chips.                                                                                                |
| Can one call trigger several actions?     | Yes. Every matching email and ticket action runs.                                                                                              |
| Can't add or edit actions                 | You need admin rights or write access to Tools.                                                                                                |
