Architecture et Fonctionnement Interne
Cette page est une vue technique de haut niveau de l'architecture de PulseChat : comment le module est structur\u00e9, les classes cl\u00e9s et les flux importants que vous pourriez avoir besoin de comprendre lors du d\u00e9bogage ou de l'extension du module.
1. Point d'Entr\u00e9e du Module
Fichier : modules/pulsechat/pulsechat.php
Responsabilit\u00e9s :
- D\u00e9clare les m\u00e9tadonn\u00e9es du module (nom, version, auteur).
- D\u00e9finit des constantes :
PULSECHAT_MODULE_NAME,PULSECHAT_VERSION- Constantes de chemin/URL :
PULSECHAT_MODULE_PATH,PULSECHAT_MODULE_URL, chemins d'upload. - Constantes de tables BD :
TABLE_PC_*(conversations, messages, participants, etc.).
- Enregistre des hooks :
register_activation_hookregister_language_fileshooks()->add_action('admin_init', 'pulsechat_register_permissions')hooks()->add_action('after_cron_run', 'pulsechat_cron_email_poll')(interrogation email)
- Ajoute l'entr\u00e9e du menu d'administration.
- Ajoute des hooks c\u00f4t\u00e9 client pour injecter le widget de chat dans le portail client lorsqu'il est activ\u00e9.
2. Contr\u00f4leurs
2.1 controllers/Pulsechat.php
Contr\u00f4leur principal d'administration pour l'interface de chat :
- \u00c9tend
AdminController. - Constructeur :
- S'assure que le helper est charg\u00e9 (
pulsechat/pulsechat). - Redirige si le module est d\u00e9sactiv\u00e9.
- V\u00e9rifie la capacit\u00e9
viewdu personnel. - Charge
Pulsechat_model. - D\u00e9termine le transport (
pushervs.polling).
- S'assure que le helper est charg\u00e9 (
- M\u00e9thodes cl\u00e9s :
chat()-- rend la vue compl\u00e8te du chat (views/admin/chat_view.php).complete_setup()-- g\u00e8re l'assistant de transport initial.- Nombreux endpoints AJAX pour :
- R\u00e9cup\u00e9rer contacts, groupes, clients.
- Envoyer/recevoir des messages (hors canal).
- R\u00e9actions, favoris, \u00e9pingles, upload de fichiers.
- Recherche, vues favoris/\u00e9pingles/globales.
- Export et helpers analytiques (pour les analytiques in-app).
2.2 controllers/Pulsechat_Channels.php
G\u00e8re les endpoints omnicanaux et IA :
- Canaux :
conversations,conversation,mark_read,send_channel_message,contact,link_contact, CRUD de canaux, etc.
- Endpoints IA :
ai_auto_reply()ai_suggestions()ai_rewrite()ai_spelling()ai_summary()ai_sentiment()ai_translate()- Ceux-ci d\u00e9l\u00e8guent \u00e0
PulsechatAIet retournent du JSON normalis\u00e9.
- Analytiques :
analytics(),analytics_export()pour les m\u00e9triques des canaux (messages par jour, par canal, utilisation IA).
2.3 Contr\u00f4leurs de Webhook
-
controllers/webhooks/ChannelWebhook.php- Re\u00e7oit les webhooks des fournisseurs externes (WhatsApp, Telegram, etc.).
- Dispatche vers l'adaptateur de canal appropri\u00e9.
-
Pulsechat_webhook.php/webhook.php- Endpoints de compatibilit\u00e9 ou de commodit\u00e9 pour certains fournisseurs.
3. Mod\u00e8les
3.1 models/Pulsechat_model.php
Couche centrale d'acc\u00e8s aux donn\u00e9es :
- \u00c9tend
App_Model. - Assure la connexion UTF-8mb4 (pour les emojis).
- Responsabilit\u00e9s principales :
- Utilisateurs et pr\u00e9sence :
get_staff_users(),get_group_users(),get_my_groups(), gestion des statuts.
- Conversations :
- CRUD pour
pc_conversations, gestion des participants danspc_participants. - Silencier, \u00e9pingler, archiver.
- CRUD pour
- Messages :
- Ins\u00e9rer des messages dans
pc_messages. - Appliquer les r\u00e9actions (
pc_reactions), favoris (pc_starred_messages), \u00e9pingles (pc_pinned_messages). - Charger des messages pagin\u00e9s pour diff\u00e9rents types de conversation.
- Ins\u00e9rer des messages dans
- Fichiers :
- G\u00e9rer
pc_shared_files, s'assurer que messages et fichiers restent synchronis\u00e9s.
- G\u00e9rer
- Omnicanal :
- G\u00e9rer
pc_channels,pc_external_contacts,pc_contact_identities. - R\u00e8gles d'automatisation (
pc_automation_rules). - Donn\u00e9es analytiques dans
pc_analytics_cache,pc_assignments_log.
- G\u00e9rer
- Journaux IA :
log_ai_usage()\u00e9crit danspc_ai_logs.get_ai_usage_stats()agr\u00e8ge l'utilisation IA pour les analytiques.
- Utilisateurs et pr\u00e9sence :
Tout le SQL utilise db_prefix() pour respecter le pr\u00e9fixe de tables de Perfex.
4. Biblioth\u00e8ques
4.1 libraries/PulsechatAI.php
Abstraction du moteur IA :
- G\u00e8re tous les cas d'utilisation IA :
- R\u00e9ponse automatique, suggestions, r\u00e9\u00e9criture, orthographe, r\u00e9sum\u00e9, sentiment, traduction, mode chatbot.
- Expose des m\u00e9thodes comme :
generateAutoReply()generateSuggestions()rewriteMessage()correctSpelling()summarizeConversation()analyzeSentiment()translate()chatbotReply()
- Dispatche en interne entre :
- API Chat Completions d'OpenAI.
- API Messages d'Anthropic.
- Enregistre l'utilisation dans
pc_ai_logsviaPulsechat_model.
4.2 Adaptateurs de Canal
Espace de noms : libraries/channels/
ChannelAdapterInterface.php-- d\u00e9finit une interface commune pour les adaptateurs de canal.- Adaptateurs pour des plateformes sp\u00e9cifiques :
WhatsappAdapter.phpTelegramAdapter.phpEmailAdapter.php- Potentiellement d'autres (SMS, Slack, Viber, etc.).
ChannelManager.php:- Orchestre l'envoi sortant et le traitement entrant entre les adaptateurs.
- G\u00e8re les limites de d\u00e9bit, la journalisation des erreurs, les t\u00e9l\u00e9chargements de m\u00e9dias et la gestion des pi\u00e8ces jointes.
4.3 Correspondance de Contacts
libraries/ContactMatcher.php:- Convertit les identifiants de canal (t\u00e9l\u00e9phone, email, IDs de chat) en
pc_external_contacts. - Tente de faire correspondre avec les clients/contacts/leads de Perfex via les tables principales.
- Convertit les identifiants de canal (t\u00e9l\u00e9phone, email, IDs de chat) en
5. Vues et Assets
5.1 Vues
-
views/admin/chat_view.php- Page principale du chat d'administration (interface compl\u00e8te \u00e0 trois panneaux).
- Rend :
- Barre lat\u00e9rale (onglets, recherche, listes de contacts).
- Contenu (messages et compositeur).
- Panneau de d\u00e9tails (infos CRM, participants, analytiques).
- Injecte l'objet de configuration JS
pulsechatConfig.
-
views/admin/settings.php- Panneau de param\u00e8tres rendu dans
admin/pulsechat/settings. - Sections organis\u00e9es :
- G\u00e9n\u00e9ral, Notifications, Permissions, Fonctionnalit\u00e9s, Limites, Donn\u00e9es.
- Options omnicanales.
- Configuration de l'Assistant IA.
- Panneau de param\u00e8tres rendu dans
-
views/admin/settings_page.php- Page enveloppante pour les param\u00e8tres du module (inclut
settings.phpdans un panneau Perfex avec bouton Sauvegarder).
- Page enveloppante pour les param\u00e8tres du module (inclut
5.2 JavaScript
Situ\u00e9 dans assets/js/ :
-
pulsechat-full.js:- Logique frontend principale pour l'interface de chat.
- G\u00e8re :
- \u00c9tat (
state.activeChat, contacts, groupes, clients). - Rendu de la liste de messages, scroll infini.
- Indicateurs de saisie, pr\u00e9sence, accus\u00e9s de r\u00e9ception.
- S\u00e9lecteur d'emojis et r\u00e9actions.
- Param\u00e8tres d'affichage locaux (th\u00e8me, disposition).
- Gestionnaires de la barre d'outils IA lorsque les canaux sont d\u00e9sactiv\u00e9s.
- \u00c9tat (
-
pulsechat-channels.js:- Frontend omnicanal.
- Rend la liste des Canaux, filtres et compositeur de canal.
- G\u00e8re les actions IA en mode canal.
- Impl\u00e9mente les r\u00e9ponses pr\u00e9d\u00e9finies et l'interface des r\u00e8gles d'automatisation.
-
pulsechat-analytics.js:- Rend les graphiques et analytiques pour l'utilisation omnicanale.
5.3 CSS
assets/css/pulsechat-full.css- Styles complets pour l'interface de chat d'administration.
- Inclut :
- Disposition (barre lat\u00e9rale, contenu, d\u00e9tails).
- S\u00e9lecteur d'emojis, menus contextuels, modales.
- Ajustements du mode sombre.
6. Migrations et Installation
6.1 install.php
Ex\u00e9cut\u00e9 lors de l'activation du module via pulsechat_activation_hook() :
- Cr\u00e9e les tables principales (versions initiales de
pc_conversations,pc_participants,pc_messages, etc.). - Ajoute des options par d\u00e9faut telles que :
pulsechat_enabledpulsechat_clients_enabledpulsechat_transport- Valeurs par d\u00e9faut pour les notifications, fonctionnalit\u00e9s, limites de fichiers, etc.
6.2 Migrations
Situ\u00e9es dans migrations/ :
100_version_100.phpet suivantes -- base et changements incr\u00e9mentaux.122_version_122.php-- Fondation Omnicanale :- Ajoute
pc_channels,pc_external_contacts,pc_contact_identities,pc_automation_rules,pc_ai_logs, etc. - \u00c9tend les tables existantes pour le support des canaux (
channel_type,subject,delivery_status,ai_suggested, etc.). - Alimente les options IA initiales de PulseChat.
- Ajoute
123_version_123.php-- s'assure quepc_realtime_eventsexiste.124_version_124.php-- IA Multi-Fournisseur :- Ajoute des options :
pulsechat_ai_providerpulsechat_ai_anthropic_api_key
- Ajoute des options :
Le syst\u00e8me de migration de Perfex s'assure qu'elles s'ex\u00e9cutent dans l'ordre lors de la mise \u00e0 jour du module.
7. Notes d'Extensibilit\u00e9
Lors de l'extension de PulseChat :
-
Nouveaux Types de Canal :
- Impl\u00e9mentez
ChannelAdapterInterfacedans un nouvel adaptateur souslibraries/channels/. - Enregistrez les champs de configuration dans l'interface de param\u00e9trage des canaux.
- Mettez \u00e0 jour la gestion de
pc_channelssi n\u00e9cessaire.
- Impl\u00e9mentez
-
Nouvelles Actions IA :
- Ajoutez une nouvelle m\u00e9thode \u00e0
PulsechatAI. - Ajoutez un nouvel endpoint de contr\u00f4leur dans
Pulsechat_Channels. - C\u00e2blez un nouveau bouton ou contr\u00f4le d'interface dans
pulsechat-full.js/pulsechat-channels.js. - Pensez \u00e0 journaliser dans
pc_ai_logspour les analytiques.
- Ajoutez une nouvelle m\u00e9thode \u00e0
-
Int\u00e9grations Personnalis\u00e9es :
- Utilisez
Pulsechat_modelpour les op\u00e9rations BD plut\u00f4t que d'\u00e9crire du SQL direct. - R\u00e9utilisez les utilitaires existants (ex. ContactMatcher) pour \u00e9viter la logique en double.
- Utilisez
PulseChat repose fortement sur les hooks Perfex et les comportements d'App_Controller ; suivez ces patrons pour rester compatible avec les mises \u00e0 jour du noyau. Ajoutez toujours une migration pour les changements de sch\u00e9ma plut\u00f4t que de modifier uniquement install.php.