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.

FieldTypeExample
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.
strings-a0d7c48157068z19fcdbe136dz23e20a90000
session_id
RingCentral's shorter session identifier.
stringsess-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.
number3
server_id
Which RingCentral node emitted the event. Diagnostic only.
string10.14.20.30.TAM
event_time
ISO-8601 timestamp of the event.
string2026-08-04T13:30:36.413Z
origin_type
How the call started, e.g. 'Call'.
stringCall
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.