Étendre PrimoCRM
Tout ce qui est extensible dans PrimoCRM est collecté via un filtre WordPress, de sorte que votre extension s’y enregistre sans aucune modification du noyau. Ce sont les mêmes motifs qu’utilisent les fonctionnalités Pro natives. Voir la liste complète dans Actions et filtres.
Réagir à un événement
Section intitulée « Réagir à un événement »L’extension la plus simple consiste à réagir à quelque chose qui s’est produit. Utilisez les crochets d’action.
add_action( 'primocrm_contact_tag_added', function ( $contact_id, $tag_id ) { // Synchroniser le changement d'étiquette avec un système externe.}, 10, 2 );Enregistrer un type de champ de formulaire personnalisé
Section intitulée « Enregistrer un type de champ de formulaire personnalisé »Ajoutez une classe qui implémente l’interface de champ, puis enregistrez-la sur
primocrm_form_field_types.
add_filter( 'primocrm_form_field_types', function ( $fields ) { $fields['signature'] = MySignatureField::class; return $fields;} );Votre classe implémente la même interface que les types de champs du noyau (une méthode
type() ainsi que la logique de rendu et d’assainissement). Utilisez les champs intégrés
dans includes/modules/forms/Fields/Types comme référence. Le nouveau type apparaît
ensuite dans la palette du constructeur de formulaires. Voir Types de champs.
Enregistrer une source de migration
Section intitulée « Enregistrer une source de migration »Une source de migration lit un système externe et le normalise en contacts, listes, étiquettes
et champs personnalisés PrimoCRM. Implémentez le contrat de source et enregistrez-le sur
primocrm_migration_sources.
add_filter( 'primocrm_migration_sources', function ( $sources ) { $sources['mailpoet'] = new MailPoetSource(); return $sources;} );Le registre rejette par sécurité tout ce qui n’implémente pas l’interface de source, afin qu’un module défectueux ne puisse pas faire planter l’importateur. L’extension gratuite intègre les sources CSV et FluentCRM comme références. Voir Depuis un autre CRM.
Fournir un expéditeur d’e-mails
Section intitulée « Fournir un expéditeur d’e-mails »L’envoi est acheminé par le filtre primocrm_smtp_send. Renvoyez un résultat évalué à vrai
pour indiquer que vous avez géré l’envoi, un WP_Error en cas d’échec, ou la valeur entrante
pour transmettre l’envoi. C’est exactement ainsi que se connectent les fournisseurs ESP Pro.
add_filter( 'primocrm_smtp_send', function ( $result, $provider, $atts, $settings ) { if ( $provider !== 'myesp' ) { return $result; // pas le nôtre ; laisser le gestionnaire suivant décider } $ok = my_esp_send( $atts['to'], $atts['subject'], $atts['message'], $settings ); return $ok ? true : new WP_Error( 'myesp_failed', 'Send failed' );}, 10, 4 );Lorsqu’aucun gestionnaire ne prend en charge l’envoi, PrimoCRM se replie sur le système de messagerie WordPress par défaut, de sorte qu’un site non configuré ou dont la licence a expiré continue d’envoyer des messages. Voir Envoi et délivrabilité.
Ajouter des champs et des opérateurs au constructeur de conditions
Section intitulée « Ajouter des champs et des opérateurs au constructeur de conditions »Étendez le constructeur de conditions d’automatisation en filtrant primocrm_condition_options.
La valeur contient un tableau fields et un tableau operators.
add_filter( 'primocrm_condition_options', function ( $opts ) { $opts['fields'][] = [ 'key' => 'life_time_value', 'label' => 'Valeur à vie', 'type' => 'number', ]; $opts['operators'][] = [ 'key' => '>', 'label' => 'Supérieur à' ]; return $opts;} );C’est ainsi que la version Pro ajoute ses champs e-commerce. Voir Conditions et branchement.
Enregistrer un déclencheur d’automatisation
Section intitulée « Enregistrer un déclencheur d’automatisation »Les déclencheurs sont collectés via primocrm_automation_triggers et apparaissent dans le sélecteur
d’automatisation. La méthode recommandée consiste à étendre BaseTrigger, qui s’enregistre
automatiquement dans ce filtre pour vous. C’est exactement ainsi que fonctionnent les intégrations
intégrées Contact Form 7, WPForms et Fluent Forms.
Étendez BaseTrigger, définissez un triggerName unique, décrivez le déclencheur dans
getTrigger(), et accrochez votre propre événement. Lorsque l’événement se déclenche, résolvez
le contact et insérez-le dans n’importe quelle automatisation utilisant votre déclencheur.
use PrimoCRM\modules\automations\Triggers\BaseTrigger;use PrimoCRM\modules\automations\Triggers\Forms\ResolvesContactFromForm;use PrimoCRM\modules\automations\AutomationProcessor;
class SuperFormsSubmittedTrigger extends BaseTrigger{ use ResolvesContactFromForm; // trouver ou créer un contact par e-mail
public function __construct() { $this->triggerName = 'superforms_submitted'; $this->actionArgNum = 1; parent::__construct(); // s'enregistre automatiquement dans primocrm_automation_triggers
// Accrochez l'action de soumission de VOTRE propre plugin de formulaire : add_action( 'superforms_after_submit', [ $this, 'onSubmit' ], 10, 1 ); }
// Métadonnées qui listent le déclencheur dans le sélecteur d'automatisation. public function getTrigger() { return [ 'category' => 'Forms', 'label' => 'SuperForms Submitted', 'description' => 'Fires when a SuperForms form is submitted', 'icon' => 'document-text', ]; }
public function onSubmit( $submission ) { $email = $submission['email'] ?? ''; $first = $submission['first_name'] ?? ''; $last = $submission['last_name'] ?? '';
// Résoudre ou créer le contact (déclenche primocrm_contact_created lors de la création). $contact_id = $this->resolveContactFromForm( $email, $first, $last, 'superforms' ); if ( ! $contact_id ) { return; }
// Insérer le contact dans chaque automatisation active utilisant ce déclencheur. $processor = AutomationProcessor::getInstance(); foreach ( $processor->findAutomationsByTrigger( $this->triggerName ) as $automation ) { $processor->enterContact( $automation->id, $contact_id, $this->triggerName ); } }
public function handle( ...$args ) {}}
// Instancier une seule fois, après le chargement de votre plugin de formulaire, pour qu'il s'enregistre automatiquement.add_action( 'plugins_loaded', function () { new SuperFormsSubmittedTrigger();}, 20 );Votre déclencheur apparaît désormais dans le constructeur d’automations, et une soumission crée ou met à jour le contact PrimoCRM tout en exécutant toute automatisation correspondante.
Rendre le déclencheur disponible dans l’offre gratuite
Section intitulée « Rendre le déclencheur disponible dans l’offre gratuite »Les nouvelles clés de déclenchement sont considérées comme Pro par défaut (sécurité par défaut), elles apparaissent donc verrouillées dans l’offre gratuite. Si votre intégration doit fonctionner dans l’offre gratuite, ajoutez sa clé à la liste blanche gratuite :
add_filter( 'primocrm_free_triggers', function ( $keys ) { $keys[] = 'superforms_submitted'; return $keys;} );Enregistrement d’une action
Section intitulée « Enregistrement d’une action »Les actions personnalisées suivent le même principe avec primocrm_automation_actions
(étendez la classe d’action de base, décrivez-la et implémentez son étape). Utilisez les actions
du noyau sous includes/modules/automations/Actions comme références fonctionnelles, et ajoutez
la clé à primocrm_free_actions si elle doit être gratuite.
Intégration depuis un système externe
Section intitulée « Intégration depuis un système externe »Si le système d’intégration ne s’exécute pas sur le même site WordPress, utilisez l’
API REST au lieu d’une classe de déclenchement. Créez ou mettez à jour un
contact avec une requête POST /wp-json/primocrm/v1/contacts authentifiée. N’écrivez pas
directement dans les tables de base de données de PrimoCRM ; le point de terminaison REST et les
classes de déclenchement sont les interfaces prises en charge et garantissent le fonctionnement de
votre intégration lors des mises à jour.
Choisir si votre fonctionnalité est gratuite
Section intitulée « Choisir si votre fonctionnalité est gratuite »Tout ce qui ne figure pas sur la liste blanche gratuite est considéré comme Pro (sécurité par défaut). Si vous ajoutez un déclencheur ou une action qui doit être disponible dans l’offre gratuite, ajoutez sa clé à la liste blanche.
add_filter( 'primocrm_free_triggers', function ( $keys ) { $keys[] = 'my_custom_trigger'; return $keys;} );Le même schéma s’applique à primocrm_free_actions et, pour les limites de quantité,
primocrm_free_limits.
Injecter une interface d’administration
Section intitulée « Injecter une interface d’administration »Pour ajouter un onglet de paramètres ou une action de ligne de campagne à l’application d’administration,
utilisez les filtres wp.hooks JavaScript primocrm.settings.tabs et
primocrm.campaigns.rowActions. Ceux-ci renvoient des descripteurs avec des rappels de montage
plutôt que des éléments React, afin que votre interface puisse s’afficher dans sa propre racine
indépendamment de la version de React. Voir Actions et filtres.