Architecture & Internals
This page is a high-level technical overview of PulseChat's architecture: how the module is structured, key classes, and important flows you may need to understand when debugging or extending the module.
1. Module Entry Pointโ
File: modules/pulsechat/pulsechat.php
Responsibilities:
- Declares module metadata (name, version, author).
- Defines constants:
PULSECHAT_MODULE_NAME,PULSECHAT_VERSION- Path/URL constants:
PULSECHAT_MODULE_PATH,PULSECHAT_MODULE_URL, upload paths. - DB table constants:
TABLE_PC_*(conversations, messages, participants, etc.).
- Registers hooks:
register_activation_hookregister_language_fileshooks()->add_action('admin_init', 'pulsechat_register_permissions')hooks()->add_action('after_cron_run', 'pulsechat_cron_email_poll')(email polling)
- Adds admin menu entry.
- Adds client-side hooks for injecting the chat widget in the client portal when enabled.
2. Controllersโ
2.1 controllers/Pulsechat.phpโ
Main admin controller for the chat UI:
- Extends
AdminController. - Constructor:
- Ensures helper is loaded (
pulsechat/pulsechat). - Redirects if module disabled.
- Checks staff
viewcapability. - Loads
Pulsechat_model. - Determines transport (
pushervs.polling).
- Ensures helper is loaded (
- Key methods:
chat()-- renders the full chat view (views/admin/chat_view.php).complete_setup()-- handles initial transport wizard.- Numerous AJAX endpoints for:
- Fetching contacts, groups, clients.
- Sending/receiving messages (non-channel).
- Reactions, stars, pins, file uploads.
- Search, starred/pinned/global views.
- Export and analytics helpers (for in-app analytics).
2.2 controllers/Pulsechat_Channels.phpโ
Handles omnichannel and AI endpoints:
- Channels:
conversations,conversation,mark_read,send_channel_message,contact,link_contact, channel CRUD, etc.
- AI endpoints:
ai_auto_reply()ai_suggestions()ai_rewrite()ai_spelling()ai_summary()ai_sentiment()ai_translate()- These delegate to
PulsechatAIand return normalized JSON.
- Analytics:
analytics(),analytics_export()for channel metrics (messages per day, per channel, AI usage).
2.3 Webhook Controllersโ
-
controllers/webhooks/ChannelWebhook.php- Receives webhooks from external providers (WhatsApp, Telegram, etc.).
- Dispatches to the appropriate channel adapter.
-
Pulsechat_webhook.php/webhook.php- Compatibility or convenience endpoints for some providers.
3. Modelsโ
3.1 models/Pulsechat_model.phpโ
Central data access layer:
- Extends
App_Model. - Ensures UTF-8mb4 connection (for emojis).
- Major responsibilities:
- Users & presence:
get_staff_users(),get_group_users(),get_my_groups(), status management.
- Conversations:
- CRUD for
pc_conversations, participant management inpc_participants. - Muting, pinning, archiving.
- CRUD for
- Messages:
- Insert messages into
pc_messages. - Apply reactions (
pc_reactions), stars (pc_starred_messages), pins (pc_pinned_messages). - Load paginated messages for various conversation types.
- Insert messages into
- Files:
- Manage
pc_shared_files, ensure messages and files stay in sync.
- Manage
- Omnichannel:
- Handle
pc_channels,pc_external_contacts,pc_contact_identities. - Automation rules (
pc_automation_rules). - Analytics data in
pc_analytics_cache,pc_assignments_log.
- Handle
- AI Logs:
log_ai_usage()writes topc_ai_logs.get_ai_usage_stats()aggregates AI usage for analytics.
- Users & presence:
All SQL uses db_prefix() to respect Perfex's table prefix.
4. Librariesโ
4.1 libraries/PulsechatAI.phpโ
AI engine abstraction:
- Handles all AI use-cases:
- Auto-reply, suggestions, rewrite, spelling, summary, sentiment, translation, chatbot mode.
- Exposes methods like:
generateAutoReply()generateSuggestions()rewriteMessage()correctSpelling()summarizeConversation()analyzeSentiment()translate()chatbotReply()
- Internally dispatches between:
- OpenAI Chat Completions API.
- Anthropic Messages API.
- Logs usage to
pc_ai_logsviaPulsechat_model.
4.2 Channel Adaptersโ
Namespace: libraries/channels/
ChannelAdapterInterface.php-- defines a common interface for channel adapters.- Adapters for specific platforms:
WhatsappAdapter.phpTelegramAdapter.phpEmailAdapter.php- Potentially others (SMS, Slack, Viber, etc.).
ChannelManager.php:- Orchestrates outbound send and inbound processing across adapters.
- Handles rate limits, error logging, media downloads, and attachment handling.
4.3 Contact Matchingโ
libraries/ContactMatcher.php:- Converts channel identifiers (phone, email, chat IDs) into
pc_external_contacts. - Attempts to match to Perfex clients/contacts/leads via core tables.
- Converts channel identifiers (phone, email, chat IDs) into
5. Views & Assetsโ
5.1 Viewsโ
-
views/admin/chat_view.php- Main admin chat page (full three-panel UI).
- Renders:
- Sidebar (tabs, search, contact lists).
- Content (messages and composer).
- Details panel (CRM info, participants, analytics).
- Injects configuration JS object
pulsechatConfig.
-
views/admin/settings.php- Settings panel rendered in
admin/pulsechat/settings. - Organized sections:
- General, Notifications, Permissions, Features, Limits, Data.
- Omnichannel options.
- AI Assistant configuration.
- Settings panel rendered in
-
views/admin/settings_page.php- Wrapper page for module settings (includes
settings.phpinside a Perfex panel with Save button).
- Wrapper page for module settings (includes
5.2 JavaScriptโ
Located in assets/js/:
-
pulsechat-full.js:- Main frontend logic for the chat UI.
- Manages:
- State (
state.activeChat, contacts, groups, clients). - Message list rendering, infinite scroll.
- Typing indicators, presence, read receipts.
- Emoji picker and reactions.
- Local display settings (theme, layout).
- AI toolbar handlers when channels are disabled.
- State (
-
pulsechat-channels.js:- Omnichannel frontend.
- Renders the Channels list, filters, and channel composer.
- Handles AI actions in channel mode.
- Implements canned responses and automation rule UI.
-
pulsechat-analytics.js:- Renders charts and analytics for omnichannel usage.
5.3 CSSโ
assets/css/pulsechat-full.css- Full styling for the admin chat UI.
- Includes:
- Layout (sidebar, content, details).
- Emoji picker, context menus, modals.
- Dark mode adjustments.
6. Migrations & Installโ
6.1 install.phpโ
Executed on module activation via pulsechat_activation_hook():
- Creates core tables (initial versions of
pc_conversations,pc_participants,pc_messages, etc.). - Adds default options such as:
pulsechat_enabledpulsechat_clients_enabledpulsechat_transport- Defaults for notifications, features, file limits, etc.
6.2 Migrationsโ
Located in migrations/:
100_version_100.phpand subsequent -- baseline and incremental changes.122_version_122.php-- Omnichannel Foundation:- Adds
pc_channels,pc_external_contacts,pc_contact_identities,pc_automation_rules,pc_ai_logs, etc. - Extends existing tables for channel support (
channel_type,subject,delivery_status,ai_suggested, etc.). - Seeds initial PulseChat AI options.
- Adds
123_version_123.php-- ensurespc_realtime_eventsexists.124_version_124.php-- Multi-Provider AI:- Adds options:
pulsechat_ai_providerpulsechat_ai_anthropic_api_key
- Adds options:
Perfex's migration system ensures these run in order when you update the module.
7. Extensibility Notesโ
When extending PulseChat:
-
New Channel Types:
- Implement
ChannelAdapterInterfacein a new adapter underlibraries/channels/. - Register configuration fields in the channel settings UI.
- Update
pc_channelshandling as needed.
- Implement
-
New AI Actions:
- Add a new method to
PulsechatAI. - Add a new controller endpoint in
Pulsechat_Channels. - Wire a new button or UI control in
pulsechat-full.js/pulsechat-channels.js. - Consider logging to
pc_ai_logsfor analytics.
- Add a new method to
-
Custom Integrations:
- Use
Pulsechat_modelfor DB operations rather than writing direct SQL. - Reuse existing utilities (e.g. ContactMatcher) to avoid duplicate logic.
- Use
PulseChat relies heavily on Perfex hooks and App_Controller behaviors; follow those patterns to remain compatible with core updates. Always add a migration for schema changes rather than modifying install.php only.