RingCentral Call
trigger.ringcentral_call
TriggerVoice & SMSconnection requiredruns in-engine
Starts a run when a RingCentral call finishes. Emits the normalised call event for the rest of the flow to read.
Start a run when a RingCentral call finishes.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- JWT
- Providers
- RingCentral
- Secret shape
- {"client_id", "client_secret", "jwt"}
- Config it needs
- server_url
- Resolved by
- config.connection_id
- Note
- The subscription is registered at publish time, not here. Publishing needs MANTLE_APP_PUBLIC_BASE_URL set — it is the address RingCentral calls back on.
Configuration
This node takes no configuration beyond its connection.
Output
One shape.
call event
The normalised telephony-session event. The envelope is snake_case; parties[] is RingCentral's own payload, untouched.
| Field | Type | Example |
|---|---|---|
telephony_session_id RingCentral's id for the whole call. Used downstream as the dedup key, so one session yields one downstream record however many events arrive. | string | s-a0d7c48157068z19fcdbe136dz23e20a90000 |
session_id RingCentral's shorter session identifier. | string | sess-1 |
sequence Position of this event within the call. A finished call emits several deliveries — one observed session spanned 90 seconds and seven of them. | number | 3 |
server_id Which RingCentral node emitted the event. Diagnostic only. | string | 10.14.20.30.TAM |
event_time ISO-8601 timestamp of the event. | string | 2026-08-04T13:30:36.413Z |
origin_type How the call started, e.g. 'Call'. | string | Call |
parties Both endpoints of the call, passed through from RingCentral untouched — which is why these stay camelCase while the envelope above is snake_case. | array | — |
connection_id The RingCentral connection this delivery arrived on, stamped by the ingress route. Downstream nodes resolve their OWN connection from it, which is why this graph carries no credential id and one published workflow serves every tenant. | string | — |
parties[].id RingCentral's id for this endpoint. | string | — |
parties[].direction Inbound or Outbound as RingCentral reports it. NOT reliable for working out who the client was — on real inbound calls it names our own number as the far end. Carried for traceability; never route on it. | string | — |
parties[].missedCall RingCentral's missed-call flag. | boolean | — |
parties[].status.code Endpoint state, e.g. 'Disconnected'. The subscription only delivers finished calls. | string | — |
parties[].status.reason Why the endpoint reached that state. Seven values mean the call was never placed and there is nothing to log. | string | — |
parties[].from.phoneNumber Caller number in E.164 — or a bare extension like '101', which is not a dialable number and is eliminated downstream. | string | — |
parties[].from.name Caller-ID name. On real calls this is a LOCATION ('TORONTO ON'), not a person, so it is never used for matching. | string | — |
parties[].to.phoneNumber Called number in E.164. | string | — |
{
"connection_id": "00000000-0000-0000-0000-000000000000",
"event_time": "2026-08-04T13:30:36.413Z",
"origin_type": "Call",
"parties": [
{
"direction": "Outbound",
"from": {
"name": "TORONTO ON",
"phoneNumber": "+15555553358"
},
"id": "p-1",
"missedCall": false,
"status": {
"code": "Disconnected",
"reason": "Normal"
},
"to": {
"phoneNumber": "+15555555759"
}
}
],
"sequence": 3,
"server_id": "10.14.20.30.TAM",
"session_id": "sess-1",
"telephony_session_id": "s-a0d7c48157068z19fcdbe136dz23e20a90000"
}Notes
- A finished call emits several events. Each starts its own run, so a later, better event can still produce a record when an earlier one was inconclusive.
- Only calls that reach 'Disconnected' are delivered — not every ring, answer or hold transition.
See RingCentral Call run in a workflow.
In a technical demo we add the RingCentral connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.