Ga naar inhoud

PrimoCRM uitbreiden

Alles wat uitbreidbaar is in PrimoCRM wordt verzameld via een WordPress-filter, zodat je add-on zich hierin registreert zonder core-aanpassingen. Dit zijn dezelfde patronen die first-party Pro-functies gebruiken. Bekijk de volledige lijst in Acties en Filters.

De eenvoudigste uitbreiding is het reageren op iets dat is gebeurd. Gebruik hiervoor de actiehooks.

add_action( 'primocrm_contact_tag_added', function ( $contact_id, $tag_id ) {
// Synchroniseer de tagwijziging naar een extern systeem.
}, 10, 2 );

Een aangepast formulierveldtype registreren

Section titled “Een aangepast formulierveldtype registreren”

Voeg een klasse toe die de veldinterface implementeert en registreer deze vervolgens bij primocrm_form_field_types.

add_filter( 'primocrm_form_field_types', function ( $fields ) {
$fields['signature'] = MySignatureField::class;
return $fields;
} );

Jouw klasse implementeert dezelfde interface als de standaard veldtypes (een type() methode en logica voor weergave en opschoning). Gebruik de ingebouwde velden onder includes/modules/forms/Fields/Types als referentie. Het nieuwe type verschijnt dan in het palet van de formulierbouwer. Zie Veldtypes.

Een migratiebron leest één extern systeem uit en normaliseert dit naar PrimoCRM contacten, lijsten, tags en aangepaste velden. Implementeer het broncontract en registreer dit bij primocrm_migration_sources.

add_filter( 'primocrm_migration_sources', function ( $sources ) {
$sources['mailpoet'] = new MailPoetSource();
return $sources;
} );

Het register laat automatisch alles vallen wat de broninterface niet implementeert, zodat een defecte add-on de importeur niet kan laten crashen. De gratis plug-in wordt geleverd met CSV- en FluentCRM-bronnen als referentie. Zie Vanuit een andere CRM.

Het verzenden wordt geleid via het primocrm_smtp_send filter. Retourneer een truthy resultaat om aan te geven dat je de verzending hebt afgehandeld, een WP_Error bij een fout, of de binnenkomende waarde om de verzending door te zetten. Dit is precies hoe de Pro ESP-providers aansluiten.

add_filter( 'primocrm_smtp_send', function ( $result, $provider, $atts, $settings ) {
if ( $provider !== 'myesp' ) {
return $result; // niet van ons; laat de volgende handler beslissen
}
$ok = my_esp_send( $atts['to'], $atts['subject'], $atts['message'], $settings );
return $ok ? true : new WP_Error( 'myesp_failed', 'Verzenden mislukt' );
}, 10, 4 );

Wanneer geen enkele handler de verzending claimt, valt PrimoCRM terug op de standaard WordPress-mailer, zodat een niet-geconfigureerde of verlopen site nog steeds kan bezorgen. Zie Verzenden en E-mailbezorging.

Velden en operators voor de voorwaardenbouwer toevoegen

Section titled “Velden en operators voor de voorwaardenbouwer toevoegen”

Breid de automatiseringsvoorwaardenbouwer uit door te filteren op primocrm_condition_options. De waarde bevat een fields array en een operators array.

add_filter( 'primocrm_condition_options', function ( $opts ) {
$opts['fields'][] = [
'key' => 'life_time_value',
'label' => 'Lifetime value',
'type' => 'number',
];
$opts['operators'][] = [ 'key' => '>', 'label' => 'Groter dan' ];
return $opts;
} );

Dit is hoe Pro zijn commerce-velden toevoegt. Zie Voorwaarden en Vertakkingen.

Triggers worden verzameld via primocrm_automation_triggers en verschijnen in de automatiseringskiezer. Het ondersteunde pad is het uitbreiden van BaseTrigger, die zichzelf automatisch registreert bij dat filter. Dit is precies hoe de ingebouwde integraties voor Contact Form 7, WPForms en Fluent Forms werken.

Breid BaseTrigger uit, stel een unieke triggerName in, beschrijf de trigger in getTrigger() en koppel je eigen gebeurtenis. Wanneer de gebeurtenis plaatsvindt, los je het contact op en plaats je dit in een automatisering die jouw trigger gebruikt.

use PrimoCRM\modules\automations\Triggers\BaseTrigger;
use PrimoCRM\modules\automations\Triggers\Forms\ResolvesContactFromForm;
use PrimoCRM\modules\automations\AutomationProcessor;
class SuperFormsSubmittedTrigger extends BaseTrigger
{
use ResolvesContactFromForm; // een contact zoeken of aanmaken op basis van e-mail
public function __construct()
{
$this->triggerName = 'superforms_submitted';
$this->actionArgNum = 1;
parent::__construct(); // registreert zichzelf automatisch bij primocrm_automation_triggers
// Koppel de verzendactie van JOUW formulierplug-in:
add_action( 'superforms_after_submit', [ $this, 'onSubmit' ], 10, 1 );
}
// Metadatering die de trigger weergeeft in de automatiseringskiezer.
public function getTrigger()
{
return [
'category' => 'Forms',
'label' => 'SuperForms Submitted',
'description' => 'Wordt geactiveerd wanneer een SuperForms-formulier wordt verzonden',
'icon' => 'document-text',
];
}
public function onSubmit( $submission )
{
$email = $submission['email'] ?? '';
$first = $submission['first_name'] ?? '';
$last = $submission['last_name'] ?? '';
// Los het contact op of maak het aan (activeert primocrm_contact_created bij aanmaak).
$contact_id = $this->resolveContactFromForm( $email, $first, $last, 'superforms' );
if ( ! $contact_id ) {
return;
}
// Voeg het contact toe aan elke actieve automatisering die deze trigger gebruikt.
$processor = AutomationProcessor::getInstance();
foreach ( $processor->findAutomationsByTrigger( $this->triggerName ) as $automation ) {
$processor->enterContact( $automation->id, $contact_id, $this->triggerName );
}
}
public function handle( ...$args ) {}
}
// Instantieer eenmalig, nadat je formulierplug-in is geladen, zodat deze zichzelf registreert.
add_action( 'plugins_loaded', function () {
new SuperFormsSubmittedTrigger();
}, 20 );

Jouw trigger verschijnt nu in de automatiseringsbouwer, en een verzending maakt of werkt het PrimoCRM-contact bij en voert eventuele bijbehorende automatiseringen uit.

De trigger beschikbaar maken in het Gratis abonnement

Section titled “De trigger beschikbaar maken in het Gratis abonnement”

Nieuwe triggersleutels worden standaard beschouwd als Pro (fail closed), waardoor ze als vergrendeld worden weergegeven in de gratis versie. Als je integratie moet werken in het gratis abonnement, voeg dan de sleutel toe aan de lijst met gratis toegestane items:

add_filter( 'primocrm_free_triggers', function ( $keys ) {
$keys[] = 'superforms_submitted';
return $keys;
} );

Aangepaste acties volgen dezelfde structuur voor primocrm_automation_actions (breid de basisactieklasse uit, beschrijf deze en implementeer de stap). Gebruik de core-acties onder includes/modules/automations/Actions als werkende referenties, en voeg de sleutel toe aan primocrm_free_actions als deze gratis moet zijn.

Als het integrerende systeem niet op dezelfde WordPress-site draait, gebruik dan de REST API in plaats van een triggerklasse. Maak of werk een contact bij met een geauthenticeerde POST /wp-json/primocrm/v1/contacts. Schrijf niet rechtstreeks naar de databasetabellen van PrimoCRM; het REST-eindpunt en de triggerklassen zijn de ondersteunde oppervlakken en zorgen ervoor dat je integratie blijft werken bij updates.

Alles wat niet op de gratis toegestane lijst staat, wordt beschouwd als Pro (fail closed). Als je een trigger of actie toevoegt die beschikbaar moet zijn in het gratis abonnement, voeg dan de sleutel toe aan deze lijst.

add_filter( 'primocrm_free_triggers', function ( $keys ) {
$keys[] = 'my_custom_trigger';
return $keys;
} );

Hetzelfde patroon is van toepassing op primocrm_free_actions en, voor limieten op aantallen, primocrm_free_limits.

Om een instellingentabblad of een rij-actie voor campagnes toe te voegen aan de beheerderstoepassing, gebruik je de JavaScript wp.hooks filters primocrm.settings.tabs en primocrm.campaigns.rowActions. Deze retourneren descriptors met mount-callbacks in plaats van React-elementen, zodat je UI kan renderen in zijn eigen root, ongeacht de React-versie. Zie Acties en Filters.