Phone (Aircall / RingCentral)
Phone signals capture call volume, duration, direction, and outcomes for roles where phone activity is a meaningful work signal — support teams, SDRs, inside sales. Headline metric: total_calls. Supports Aircall and RingCentral; one provider per org.
Volume only. This integration pulls call metadata and outcome signals. For transcript-based quality analysis — per-call scores, notable moments, rubric evaluation — see the Call Quality integration, which is a separate opt-in feature.
What we pull
Each call lands as a RawSignal(source="phone", event_type="call") row with:
call_id— provider's unique call identifierdirection—inboundoroutboundduration_sec— call duration in secondsstatus— call result (e.g.done,missed,voicemailfor Aircall;Call connected,Acceptedfor RingCentral)after_hours— whether the call started before 8AM or after 6PM UTCescalated— whether call notes or tags contain escalation keywords (escalat,urgent,manager,complaint,refund)resolved— whether call notes contain resolution keywords (resolved,fixed,satisfied) or status indicates completion
Escalation detection is keyword-based. For Aircall, the ingester scans call notes and tags. For RingCentral, no tags are available in the call log —
escalatedis alwaysfalsefor RingCentral calls. This is a known gap.
Connecting
Phone is an org-wide install.
Aircall
- Go to
/admin?tab=integrations, find the Aircall card. - Enter your Aircall API ID and API Token (from Aircall → Admin → API Keys). These are stored encrypted.
- Map each employee's Aircall user ID (numeric, visible in Aircall → Users or via the Users API).
Aircall uses HTTP Basic auth with API_ID:API_TOKEN. The ingester paginates the /calls endpoint at 50 calls per page.
RingCentral
- Find the RingCentral card under "Org-wide" integrations.
- Enter your JWT token and account ID (from RingCentral Developer Console).
- Map each employee's RingCentral extension ID.
RingCentral uses Bearer JWT auth against the Platform API v1.0 /call-log endpoint, filtering for type=Voice and direction=All.
What hits a review
[PHONE DATA]
total_calls: 187
inbound_calls: 112
outbound_calls: 75
avg_duration_sec: 243
after_hours_calls: 14
escalated_calls: 8
resolved_calls: 149
Plus cohort medians for total_calls in the [BASELINES] block.
Troubleshooting
"Phone signals show zero calls"
- No user ID mapped. The ingester filters by
user_idin the Aircall API orextension/{user_id}in RingCentral. A missing mapping returns no calls. - Wrong API credentials. Aircall returns a 401 for bad credentials. Check the API ID and token in the integration card — the token is different from the API key shown in the Aircall UI.
- RingCentral account ID wrong. The RingCentral adapter uses
~as the default account ID, which resolves to the authenticated account. If your org uses a specific account ID, set it inextra_config.account_id.
"Call counts are lower than expected"
The Aircall adapter's since_days lookback is used when no cycle window is specified. If you're viewing a past cycle, the sync may have been scoped to that cycle's window. Check the cycle's period_start/period_end — calls outside that range won't appear even if they're in the general lookback.
"escalated count is always zero (RingCentral)"
This is expected. RingCentral's call log API doesn't expose tags or disposition notes. Escalation detection isn't available for RingCentral. Track escalations in a separate tool or CRM and weight the escalated signal to zero in the skill preset for RingCentral orgs.
Privacy notes
- Call content (audio) is never accessed by this integration.
- For Aircall, call notes and tags are scanned for keyword matching to compute
escalatedandresolved. The notes themselves are not stored — only the boolean result. - Call metadata (direction, duration, timing) is stored in
raw_signals.payloadand visible to managers.