When actions run
Action sources
App Center
Custom HTTP
Custom code
In-call actions
Add an action to the script
Add an Action step
Choose the action

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

The HTTP action editor: name and trigger description on the left, the cURL import and test response on the right.
Configure and test
Custom HTTP action
What your endpoint receives
Callers builds the request from your template, substituting variables, then signs it. APOST with a JSON body arrives like this:
Content-Typefollows your Body Type (application/jsonfor JSON).X-Signatureis 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 andX-Signature-TypeisRSA. 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: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.- Code
- Inputs
- Dependencies
code. It receives the Inputs object and whatever it returns is passed to the agent.- 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 frominputs. - 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]].
Run options
Open the Action step’s menu: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 activeandAccount 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.
The Workflow tab: Triggers, Pre-Conversation Actions, the Script, Summary, Success Criteria, and Post-Conversation Actions.
Open the Workflow tab
Pick or create the action
Test and map the response
Set when it runs
- 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
contactIdandcallIdare reserved. - Request data can use contact values like
{{name}},{{phoneNumber}}, and{{contact.data.accountId}}, plus metadata like{{callId}}.
Pre-conversation action in POST /agents
Pre-conversation action in POST /agents
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.- On the Workflow tab, click Add on Post-Call Actions.
- In Add Webhook, pick an App Center action or click Create Custom Webhook.
- 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.
Security
IP allowlist
If your API is behind a firewall, allow requests from these Callers addresses:Request signing
HTTP actions include anX-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
The agent never calls my action
The agent never calls my action
The action times out
The action times out
The agent reads out too much data
The agent reads out too much data
Requests are blocked by my firewall
Requests are blocked by my firewall
I see "Call was not placed because it did not pass pre-call checks"
I see "Call was not placed because it did not pass pre-call checks"