Skip to main content
Actions connect your agent to the rest of your stack. They can look up a customer before the call, check availability or create a ticket while the contact is on the line, and update your CRM when the conversation ends. You can use ready-made App Center integrations, any HTTP API, or your own code.

When actions run

Action sources

App Center

Prebuilt actions for HubSpot, Salesforce, Google Sheets, Slack, and more. Connect the app once in the App Center, then pick its actions.

Custom HTTP

Call any REST endpoint: method, URL, headers, query parameters, and body. Import from cURL.

Custom code

Run your own JavaScript with npm packages when you need logic, not just a request.

In-call actions

Add an action to the script

1

Add an Action step

Open a block on the Script tab and click Action. Edit the Action Phrase: what the agent says while the action runs (default: “Let me pull that up for you real quick.”).
2

Choose the action

Click Choose action. In Add Action, pick an action from My Actions or Connected Apps, or click Create Custom Action (HTTP) or Create Custom Code.
Add Action dialog with a category list on the left, app cards such as Twilio, Telegram Bot, HubSpot, Pipedrive, and Salesforce grouped under Telephony & Communication and Sales & CRM, and the Create Custom Action and Create Custom Code buttons highlighted in the top-right corner

The Add Action picker: App Center apps by category, with Create Custom Action and Create Custom Code in the header.

3

Describe when it runs

Fill Action Name and When should the custom action take place? Be specific: “When the caller gives their order number and asks where the order is”. The agent uses this description to decide when to call the action.
HTTP (Send HTTP request) action editor with Action Name look_up_customer and the trigger description The contact has confirmed they are an existing customer highlighted, followed by Variables Extracted with Prompt, Method GET, a URL field, Headers, and Query params, and a right-hand panel with cURL import and the message Click Send Request to get the response

The HTTP action editor: name and trigger description on the left, the cURL import and test response on the right.

4

Configure and test

Fill in the request (below), click Send Test Request, check the response, and click Add.

Custom HTTP action

Import from cURL: in the cURL panel, click Import, paste the command (Paste cURL Command Here), and click Import. The method, URL, headers, and body are filled in for you.

What your endpoint receives

Callers builds the request from your template, substituting variables, then signs it. A POST with a JSON body arrives like this:
  • Content-Type follows your Body Type (application/json for JSON).
  • X-Signature is the HMAC-SHA256 of the raw body, hex-encoded, using your account’s webhook secret. With Sign with RSA-SHA256 on, it’s a base64 RSA signature and X-Signature-Type is RSA. Verify it as described in Validate signatures.
  • Requests come from the IP addresses listed under Security.

What the agent receives back

The response body is handed to the AI as the result of the action. Keep it small and literal; the agent reads it to answer the contact:
Return only the fields the agent needs. Strip internal IDs, nested metadata, and long lists: everything you return is read by the model, slows the reply, and anything over 1 MB is rejected. If you can’t change the API, put a custom code step in front of it to trim the response. With Ignore Response on, the agent gets an empty object instead.
Insert values from the tag picker: Variables (contact data), Transcript (AI-extracted values), and Metadata (call and contact IDs, phone numbers). See Variables.

Custom code

Choose Create Custom Code to write a function that runs during the call. Write plain JavaScript (Node.js). The editor has three tabs: Code, Inputs, and Dependencies.
The file must export an async function named exactly code. It receives the Inputs object and whatever it returns is passed to the agent.
Rules worth knowing before you save:
  • Entry point. The source must contain export const code = async (inputs) => { … }. Anything else fails validation.
  • No placeholders in code. {{ }}, [[ ]], and << >> are not substituted inside the Code or Dependencies tabs; they’d ship as literal strings. Put the value in Inputs and read it from inputs.
  • Return JSON. Return a plain object, array, string, number, or boolean. Functions, class instances, and circular structures can’t be passed to the agent.
  • Build time. The build badge shows Preparing environment…, Ready, or Build failed. The first build installs your dependencies and can take a few minutes; later runs reuse it. An action called while the environment is still building is retried by the agent.
  • Response Timeout: how long to wait for the code to finish. Default 30 seconds.
  • Transcript Variables on a code action work like Variables Extracted with Prompt on HTTP actions: the AI fills them from the conversation, and you reference them in Inputs with [[name]].
Custom code and background runs are enabled per account. If you don’t see Create Custom Code or Run in background, email .

Run options

Open the Action step’s menu: To wait for one or more actions before choosing what to say next, use a Wait for results step with Ready and Fallback paths. See Steps.

Use the response

The response (up to 1 MB) goes to the agent, which uses it to answer the contact and to choose the next part of the script. Error responses (4xx/5xx) are passed on too, so the agent can explain that something went wrong.
  • Answer with real data: “Your order shipped on Tuesday and arrives Friday.”
  • Branch on the result: give subflows titles that describe the result, such as Account is active and Account is suspended, and the agent picks the matching path.
  • Insert a value directly: add an Action tag to a later step to speak a specific field from the response.

Pre-conversation actions

Pre-conversation actions run before each call (or chat) is placed. Use them to enrich the contact with fresh data or to stop calls that shouldn’t happen.
Workflow tab of the agent editor showing, from left to right, Triggers, Pre-Conversation Actions, a Script node set to Voice Call with a Summary node beneath it, Success Criteria with Goal Reached and Goal Not Reached outcomes, and Post-Conversation Actions

The Workflow tab: Triggers, Pre-Conversation Actions, the Script, Summary, Success Criteria, and Post-Conversation Actions.

1

Open the Workflow tab

Click Workflow in the header, then Add on Pre-Call Actions (Pre-Chat Actions for Text agents).
2

Pick or create the action

In Add Pre-Conversation Action, choose an App Center action or click Create Custom Pre-conversation action for an HTTP request.
3

Test and map the response

Click Send Test Request. Then click Map Contact Info Fields and, for each value you need, click Choose to pick a field in the response and give it a variable name. Click Done.
4

Set when it runs

Configure the options below and save the agent.
  • The request times out after 5 seconds.
  • Mapped variables don’t need to be in your CSV; they’re optional on upload. Names such as contactId and callId are reserved.
  • Request data can use contact values like {{name}}, {{phoneNumber}}, and {{contact.data.accountId}}, plus metadata like {{callId}}.
To keep phone numbers out of Callers, upload a reference ID instead and let a pre-conversation action fetch the real number before each call. See Dial-only phone numbers.
If Prevent call on unsuccessful response is off and the action fails, the call attempt fails. Turn the option on when the action is a gate (eligibility, consent) and you’d rather skip the contact.
Through the API, pre-conversation actions are the preCallActions array on the agent (POST /agents, PUT /agents/{agentId}). Each entry wraps an action (activePieceAction) with the settings above. A custom HTTP action uses the HTTP piece and its send_request action:
storeInfo is forced to true when executionScope is ONCE_PER_CONTACT, because the cached values must be stored for retries to reuse them. Request data accepts {{contact.phoneNumber}} and {{contact.data.<field>}} placeholders. Mapped variable names become {{leadScore}} in the script. App Center actions use the app’s piece id, actionId, and a connectionId.

Post-call actions

Post-call actions run after the conversation ends and post-call analysis finishes, based on the outcome.
  1. On the Workflow tab, click Add on Post-Call Actions.
  2. In Add Webhook, pick an App Center action or click Create Custom Webhook.
  3. Under Perform action for (or Send the webhook for), select the events that trigger it, for example a specific success criterion, voicemail, no answer, or call finished. An action with no events selected shows Not Selected and doesn’t run.
Post-call actions can use Call Data tags (status, transcript, summary answers, success criterion, recording URL) and their own Variables Extracted with Prompt, which the AI fills from the full transcript. See Webhooks and Webhook events.

Security

IP allowlist

If your API is behind a firewall, allow requests from these Callers addresses:

Request signing

HTTP actions include an X-Signature header so you can verify the request came from Callers. By default it’s an HMAC-SHA256 signature using your account’s secret (Settings → General → Webhook Signature); X-Signature-Type tells you whether it’s HMAC or RSA. See Validate signatures.

Test and debug

  • Before saving: Send Test Request asks for mock values for each variable. Click Generate mock values to fill them with AI. The response appears on the right.
  • During test calls: pre-conversation actions run by default. Turn off Run Pre-Conversation Actions in the test form to skip them.
  • After a call: open the call transcript. Actions appear in sections (Pre-Conversation Actions, in-call actions inline, Post-Conversation Actions). Click any action to see its Headers, Request, and Response. See all actions lists them by stage.

Troubleshooting

Make the trigger description (When should the custom action take place?) concrete, and make sure the script actually reaches the Action step. Check the transcript to see which step the conversation was on.
In-call actions wait 30 seconds by default (adjust Response Timeout); pre-conversation actions wait 5 seconds. Speed up the endpoint, or run the action in the background and use Wait for results. See Latency and conversation quality.
Return only the fields the agent needs. Large responses slow the reply, and anything over 1 MB is rejected. Use custom code to trim the response if you can’t change the API.
Allow the two IP addresses above and confirm the endpoint is reachable over HTTPS.
A pre-conversation action with Prevent call on unsuccessful response returned a 4xx or 5xx status. Check the action’s response in the contact’s history.

Variables

Contact, metadata, and transcript variables.

App Center

Connect apps and use their actions.

Advanced webhooks

Send custom requests after the call.

A2A connections

Call other AI agents during a conversation.

Actions overview

All action types and integrations at a glance.

Dial-only phone numbers

Fetch the number to dial before each call, without storing it.