Description
@call-e/n8n-nodes-calle
This package provides an n8n community node for CALL-E AI-agent phone-call workflows. New nodes use Calls API v2 to create one call, read its result and events, or wait for its business result. The node also executes published Goals.
n8n is a workflow automation platform. CALL-E provides a Developer API for server-side AI-agent phone-call tasks.
Installation
Install this package as an n8n community node:
npm install @call-e/n8n-nodes-calle
For local development, run:
npm install
npm run build
npm run dev
The development server starts n8n with the CALL-E node linked into the local custom nodes directory.
Credentials
Create a CALL-E API credential in n8n with:
API Key: Open CALL-E dashboard → API Keys, then select Create API key in the upper-right corner. The value is stored as a password field.Base URL: Defaults tohttps://api.heycall-e.com.Request Timeout (MS): Timeout for each individual CALL-E API request.Create: Submits one call toPOST /v2/calls. HTTP202means accepted, not answered or completed.Get: Reads the current Call by its API resource ID.Create and Wait: Submits one call, then waits untilresultstatusisavailable,unavailable, ornotapplicable.List Events: Reads one page of persisted Call events usingcursorandlimit. Passnextcursorto read more pages. To poll for new events, keep the last event ID even whennextcursoris null or a subsequent page is empty.List: Lists published Goals. Its Cursor input sends the previousnext_cursoras the API’safterparameter.Get: Gets one published Goal by ID.Prepare Configuration: Selects an active published Goal and checks a business mapping without creating a run.Create: Creates one phone-specific execution of a published Goal.Get: Gets one Goal Run by Goal ID and Goal Run ID.Create and Wait: Creates a Goal Run, then waits untilresultstatusisavailable,unavailable, ornotapplicable.Phone Number: Required E.164 number, for example+14155550100.Task: Required phone agent task boundary and expected outcome.Idempotency Key: Required, 1–255 characters. Supply a durable business key such asorder-8472-confirmation-1. Keep the same key and exact original inputs across workflow retries; an n8n execution ID changes when a workflow is executed again.Result Schema: Required. A closed object withadditionalProperties: falseand at most 32 string, boolean, integer, or number properties. Nested objects, arrays, null values, and schema combinators are unsupported.Locale: Optional language and locale hint, for exampleen-US.Region: Optional routing or country/region hint, for exampleUS.Metadata: Optional JSON object returned with the call task for business-system correlation.Webhook URL: Optional callback URL for terminal CALL-E events.
Do not expose CALL-E API keys in browser code, workflow logs, screenshots, or issue reports.
Saving credentials checks the configured API with a read-only GET /v2/calls/n8ncredentialtest. A documented 404 not_found confirms authentication without placing a call. Authentication and server failures are reported as errors.
Operations
The node provides Call, Goal, and Goal Run resources.
Call operations:
The node does not expose a Cancel operation. The API supports cancellation before provider submission; it cannot hang up an active call. Stopping an n8n execution does not cancel the telephone call.
Goal operations:
Goal Run operations:
Goal endpoints remain under /v1/goals. Goal Run requests send phone and optional variables; their result schema belongs to the published Goal.
Call Parameters
Create and Create and Wait support:
For example, use this Result Schema and include instructions in Task to return unknown when the call does not establish an answer:
{
"type": "object",
"properties": {
"confirmed": { "type": "string", "enum": ["yes", "no", "unknown"] }
},
"required": ["confirmed"],
"additionalProperties": false
}
Create and Wait also supports:
Polling Interval (MS): How often n8n polls CALL-E for the current call status.Timeout (MS): Maximum total wait time before the node fails.Goal Run Parameters
For new mappings, start with Goal Run → Prepare Configuration:
1. Choose Published Goal → From List (search and pagination use your credential), or enter its ID. The list shows each Goal’s published version and ID.
2. Leave Reviewed Goal Interface empty and execute this read-only operation. Inspect inputfields, resultfields, required flags, scalar types, defaults, enums, and runspecid / runspecversion.
3. Map upstream business data into Variables. After reviewing both input and result mappings, save the returned goal_json as a fixed value in Reviewed Goal Interface. Keep that value until you deliberately review another publication; binding it to a fresh Goal response defeats change detection.
4. Gate creation on ready === true, then use goalid and variablesjson. Missing inputs, wrong types, undeclared fields, and publication changes block readiness and leave these routing outputs empty. errors and changes name affected fields. Optional published defaults are applied before required-field checks; values are never coerced.
This supports the published closed, flat scalar schema profile, including nullable scalar results. Nested fields, unsupported constraints, and future schema keywords stop preparation with the affected interface path. It does not generate a dynamic form.
For example, map a business row’s appointment reference to the Goal’s declared input:
{ testreference: $json.appointmentreference }
test_reference is an example field, not a standard Goal parameter. Use the names returned by your Goal. The Goal mapping example includes a preview gate and an explicit business-result branch.
Preparation and creation are separate requests. The API pins the current publication when accepting a new run and has no per-run version selector. Compare the accepted response’s runspec.id and runspec.version with the prepared values before applying the result. If they differ, retain the accepted Run ID and review its mapping; do not create a replacement run. Existing Create/Get operations remain available for recovery with the original request/key or saved Run ID even after a Goal changes.
Create and Create and Wait require:
Goal ID: The public ID of a published CALL-E Goal.Phone Number: An authorized E.164 recipient number.Idempotency Key: A durable key for exactly one business event. Reuse the same key only to retry the identical Goal Run request.Variables: An optional flat JSON object of finite strings, booleans, or numbers accepted by the Goal’s published input schema.Create and Wait continues after status=completed while result_status=pending. It finishes for an unavailable result even when both result and error are null. Timeout and polling-request errors include the accepted Goal Run ID. They do not cancel the run; use Get with that ID rather than creating another run.
Outputs
Execution operations return the raw CALL-E API response. Prepare Configuration returns the configuration check described above:
Create returns the accepted Call.Get returns the current Call.Create and Wait returns the Call once resultstatus is available, unavailable, or notapplicable.List Events returns the CALL-E events response.If n8n Continue On Fail is enabled, the node returns an item with an error field instead of stopping the workflow.
Calls v2 and Goal Runs return result, resultstatus, calloutcome, error, and a separate top-level transcript. An available result can be {}. No answer, busy, or declined can produce status=completed with an unavailable business result and no technical error; evaluate the result fields to determine business success.
For Calls, use response id for Get and List Events. Response call_id is a separate Billing identifier and can be null. Never substitute it for the API resource ID.
Migrating existing workflows
Saved nodes with typeVersion: 1 keep the legacy /v1/calls creation, read, event, and result formats. New nodes use version 2. Package updates do not convert old Call IDs or automatically migrate a saved node.
To move a workflow to node version 2:
1. Move the needed fields from the old task and recipient schemas into the required Result Schema field. Flatten nested data; use explicit scalar unknown values where needed. Remove Recipient Result Schema from Additional Fields.
2. Configure a stable business idempotency key and update downstream nodes to read result, error, calloutcome, resultstatus, and top-level transcript.
3. Test an authorized call, then switch new work to version 2. Keep version 1 readers and the existing webhook receiver for accepted legacy calls. Do not submit the same task through both interfaces.
Goal requests, pagination, and result-readiness handling are updated in both node versions. Existing saved Goal inputs remain usable; new Goal Run nodes require an explicit business key.
See the migration guide and legacy retirement notice for the API boundaries and support deadline.
Safety
Phone calls are real-world side effects. Use this node only when the workflow has explicit user intent to place the call.
Operational safeguards:
Create and Wait has a node-level timeout. If it expires, the error includes the accepted API resource ID; resume with Get. A client timeout does not cancel the call. If a creation response was lost before an ID was returned, replay the same key and unchanged request. Do not copy inferred region or locale from a response into the retry, generate a replacement key, or fall back to legacy creation.
For longer appointment workflows, use the recoverable appointment example. It saves the original request and key in an existing n8n Data Table row before creation, saves the accepted Call ID, waits with n8n’s native Wait node, and caches terminal results before idempotent business writeback. A repeated trigger resumes that row; a writeback retry makes no CALL-E requests.
Compatibility
This package is intended for current n8n community node development flows using @n8n/node-cli.
Run the local checks before submitting changes:
npm run lint
npm test
npm pack --dry-run
Release
This package is published from this repository through .github/workflows/publish.yml.
To publish a release, make sure package.json and package-lock.json have the target version, then push a matching tag:
git tag v0.3.0
git push origin v0.3.0
The workflow validates that the tag version matches package.json, runs lint, tests, build, and publishes with npm provenance.
For npm Trusted Publishing, configure npm with:
CALLE-AIn8n-nodes-callepublish.ymlIf Trusted Publishing is not configured, add an npm automation token as the GitHub Actions secret NPM_TOKEN.


