Telephony Module

Module Filament CLI

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 calls table.
  • 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 telephony key.
  • Module migrations.
  • Module views under the telephony namespace.
  • Module web routes.
  • The ringcentral:webhook:sync console command.
  • The default TelephonyDriver binding and TelephonyManager singleton.

TelephonyPanelProvider registers a dedicated Filament panel at:

/telephony

That panel currently owns:

  • CallResource for call log browsing and recording links.
  • ExtensionAssignmentResource for assigning and clearing user extensions.

Key Classes

AreaClasses
Module BootTelephonyServiceProvider, TelephonyPanelProvider
ModelsCall, RingCentralWebhookSubscription
EventsCallContextUpdated
Generic ServicesTelephonyManager, TelephonyDriver
RingCentral ServicesRingCentralTelephonyDriver, CallContextService, RingCentralCredentialBroker, RingCentralExtensionDirectory, RingCentralSubscriptionManager
UILivewire\PhoneHelper, Telephony Filament resources
ControllersRingCentralWebhookController
CLICommands\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:

  1. RingCentral webhook hits RingCentralWebhookController.
  2. CallContextService updates or creates the Call record.
  3. CallContextUpdated broadcasts telephony-call.updated.
  4. resources/js/app.js dispatches telephonyCallUpdated.
  5. The module Livewire PhoneHelper updates the header display.