Session objective

Sam asked to try again on whether attorney hubs and dashboards can track voicemails per day, phone answer percentage, unreturned calls, and negative sentiment voicemails.

Work completed

This was a read-only live feasibility refresh. I loaded the Litify and attorney hub workup skills, verified LITIFY_ORG is connected, ran a live matter smoke query, checked SAIL_Call_Log__c and RingCentral CTI Task fields, searched the local sail-litify source for attorney hub and RingCentral code, and created a staged handoff file.

Local handoff file: /Users/samaguiar/Documents/Projects/admin/session_logs/attorney-hub-phone-kpis-2026-06-15/HANDOFF-attorney-hub-phone-kpis-2026-06-15.md

Live evidence

SAIL_Call_Log__c is available and includes Direction__c, Platform__c, Call_Duration_Seconds__c, Call_ID_External__c, Summary__c, Call_Notes__c, Next_Steps__c, Score__c, Related_Task_ID__c, Matter__c, and Intake__c.

RingCentral CTI call evidence is available on Task using TaskSubtype = 'Call' and rcsfl__RC_Logging_Type__c = 'call'. Useful fields include CallType, CallDurationInSeconds, CallDisposition, caller and callee numbers, call start and end time, recording metadata, and call detail links.

Prototype counts

From SAIL_Call_Log__c, CreatedDate = LAST_N_DAYS:7, there were 1,057 call-log rows. Weekday voicemail-text matches were high enough to support a daily voicemail metric, for example 78 on 2026-06-08, 71 on 2026-06-09, 71 on 2026-06-10, 68 on 2026-06-11, and 80 on 2026-06-12.

From RingCentral CTI Task, the same last-seven-day window returned 191 call rows. Inbound dispositions were: Answered 15, Connected 1, Disconnected 2, Missed 4, No Answer 1, Ringing 11, Voicemail 7. Prototype answer rate was 23 answered inbound calls out of 41 inbound CTI calls, or 56.1 percent, using positive duration as the first-pass numerator.

A read-only prototype for unreturned calls found 26 missed inbound candidates, 2 returned within 24 hours by matching a later outbound call to the same normalized phone number, and 24 not returned within 24 hours. This should be treated as a prototype until the SLA and matching rule are approved.

SAIL_Call_Log__c.Score__c had 646 scored rows, range 4 to 9, average 6.99. Simple keyword negative sentiment was too noisy because callback language creates false positives, so negative sentiment should be normalized through a label or model pass before it appears as a production KPI.

Recommended implementation path

Build a normalized communications KPI layer first, then hub/dashboard cards. Start with an additive Apex service or scheduled sync that normalizes events from Task and SAIL_Call_Log__c, stores daily aggregates by date, team, attorney, platform, and outcome, then adds cards only after each card count and drilldown row count come from the same predicate.

Metric confidence:

Voicemails per day: feasible now from RingCentral CTI CallDisposition = 'Voicemail', with call-log text as secondary context.

Phone answer percentage: feasible now as a provisional CTI metric, cleaner after internal/external number mapping is confirmed.

Unreturned calls: feasible after choosing the SLA window and persisting same-caller follow-up status.

Negative sentiment voicemails: feasible, but should not ship as keyword-only. Use stored sentiment_label, sentiment_confidence, is_voicemail, and negative_reason.