Telephony Module
The Telephony module owns non-SMS phone integrations, active call context, call logs, extension assignment, webhook processing, and telephony-specific Filament administration.
Location
src/Modules/Telephony
Main Responsibilities
- Resolve the active telephony driver through a shared driver interface.
- Process RingCentral telephony session webhooks.
- Store call activity in the
callstable. - Store RingCentral webhook subscription state.
- Match active calls to Tempr users and customers.
- Broadcast active call context to the app header through Reverb.
- Provide the Telephony Filament panel for call logs and extension assignment.
- Provide CLI support for RingCentral webhook subscription lifecycle management.
Runtime Registration
TelephonyServiceProvider registers:
- Config under the
telephonykey. - Module migrations.
- Module views under the
telephonynamespace. - Module web routes.
- The
ringcentral:webhook:syncconsole command. - The default
TelephonyDriverbinding andTelephonyManagersingleton.
TelephonyPanelProvider registers a dedicated Filament panel at:
/telephony
That panel currently owns:
CallResourcefor call log browsing and recording links.ExtensionAssignmentResourcefor assigning and clearing user extensions.
Key Classes
| Area | Classes |
|---|---|
| Module Boot | TelephonyServiceProvider, TelephonyPanelProvider |
| Models | Call, RingCentralWebhookSubscription |
| Events | CallContextUpdated |
| Generic Services | TelephonyManager, TelephonyDriver |
| RingCentral Services | RingCentralTelephonyDriver, CallContextService, RingCentralCredentialBroker, RingCentralExtensionDirectory, RingCentralSubscriptionManager |
| UI | Livewire\PhoneHelper, Telephony Filament resources |
| Controllers | RingCentralWebhookController |
| CLI | Commands\SyncWebhookSubscription |
Important Config
The module config file is:
src/Modules/Telephony/config/telephony.php
The current driver is selected with:
TELEPHONY_DRIVER=ringcentral
RingCentral credential and webhook settings still live under the shared Laravel services config:
RINGCENTRAL_SERVER=
RINGCENTRAL_CLIENT_ID=
RINGCENTRAL_CLIENT_SECRET=
RINGCENTRAL_JWT_TOKEN=
RINGCENTRAL_WEBHOOK_URL=
RINGCENTRAL_WEBHOOK_VALIDATION_TOKEN=
RINGCENTRAL_WEBHOOK_RENEWAL_THRESHOLD=86400
RINGCENTRAL_WEBHOOK_EVENT_FILTERS=/restapi/v1.0/account/~/telephony/sessions
Call Log And Recordings
Call rows are stored in the module-owned calls table and shown in the Telephony panel.
The call view can show a recording link when the active driver can resolve one from the stored provider payload. At the moment, the RingCentral driver only exposes a recording URL if RingCentral included one in the saved webhook payload. The module does not yet fetch recordings through a separate RingCentral recording API call.
Operational Notes
Start with RingCentralTelephonyDriver when adding another provider capability to the existing driver contract.
Start with TelephonyDriver and TelephonyManager when adding a second provider. That is the boundary intended for new VoIP drivers.
When debugging the app header call state, trace this flow:
- RingCentral webhook hits
RingCentralWebhookController. CallContextServiceupdates or creates theCallrecord.CallContextUpdatedbroadcaststelephony-call.updated.resources/js/app.jsdispatchestelephonyCallUpdated.- The module Livewire
PhoneHelperupdates the header display.