[SOLVED] Creating a plugin with decision (addDecision) and execute the event to evaluate

What i’m doing / Plugin to limit daily executions

I’m creating a simple plugin to add a new Decision in the Campaign Builder. The goal is to limit the number of campaign executions per day and I want share a problem and how I fix, if somebody have the same problem.

Screenshot 1 - Function “onCampaignBuild” it’s working

Screenshot 2 - Campaign

The subscriber already exists

"mautic.campaign_limit.daily_limit" event
-----------------------------------------

 ------- ------------------------------------------------------------------------------------------------- ---------- 
  Order   Callable                                                                                          Priority  
 ------- ------------------------------------------------------------------------------------------------- ---------- 
  #1      MauticPlugin\MauticCampaignLimitBundle\EventListener\CampaignSubscriber::onDailyLimitEvaluate()   0         
 ------- ------------------------------------------------------------------------------------------------- ---------- 

My current problem

Already read the documentation:

But when the campaign runs and checks the decision, my custom eventName is never triggered.
As a result, it always returns **false**, and my function **onDailyLimitEvaluate()** is never executed.

This is my current file CampaignSubscriber.php

<?php

namespace MauticPlugin\MauticCampaignLimitBundle\EventListener;

use Doctrine\ORM\EntityManagerInterface;
use Mautic\CampaignBundle\CampaignEvents;
use Mautic\CampaignBundle\Event\CampaignBuilderEvent;
use Mautic\CampaignBundle\Event\CampaignExecutionEvent;
use MauticPlugin\MauticCampaignLimitBundle\Form\Type\DailyLimitType;
use MauticPlugin\MauticCampaignLimitBundle\Service\LimitCheckerService;
use MauticPlugin\MauticCampaignLimitBundle\Event\CampaignLimitEvents;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class CampaignSubscriber implements EventSubscriberInterface
{
    private EntityManagerInterface $entityManager;
    private LoggerInterface $logger;
    private LimitCheckerService $limitChecker;

    private const N8N_WEBHOOK_URL = 'https://flow.cloud.digitag.cl/webhook/2a89c8cf-45e6-4dca-84b3-6fc58b11663e';

    public function __construct(EntityManagerInterface $entityManager, LoggerInterface $logger, LimitCheckerService $limitChecker)
    {
        $this->entityManager = $entityManager;
        $this->logger = $logger;
        $this->limitChecker = $limitChecker; // Asignamos el servicio inyectado
    }

    public static function getSubscribedEvents(): array
    {
        return [
            CampaignEvents::CAMPAIGN_ON_BUILD => ['onCampaignBuild', 0],
            CampaignLimitEvents::EVALUATE_CAMPAIGN_DECISION => ['onDailyLimitEvaluate', 0],
        ];
    }

    public function onCampaignBuild(CampaignBuilderEvent $event): void
    {
        $event->addDecision(
            'campaign_limit.daily_limit',
            [
                'label' => 'mautic.campaign_limit.decision.daily_limit',
                'description' => 'mautic.campaign_limit.decision.daily_limit.description',
                'eventName' => CampaignLimitEvents::EVALUATE_CAMPAIGN_DECISION,
                'formType' => DailyLimitType::class,
                'formTypeOptions' => ['label' => false],

                'channel' => 'campaign_limit',
                'channelIdField' => 'limitKey',
            ]
        );

        $this->logger->info('Campaign Limit: Daily Limit decision registered in campaign builder');
    }

    public function onDailyLimitEvaluate(CampaignExecutionEvent $event): void
    {
        
        $event->setResult(true);
            return;
    }

}

Value of my constant

public const EVALUATE_CAMPAIGN_DECISION = ‘mautic.campaign_limit.daily_limit’;

Solution

To be sure you will execute the decision in the campaign I did this change:

Before:
CampaignLimitEvents::EVALUATE_CAMPAIGN_DECISION => [‘onDailyLimitEvaluate’, 0],

Now:
CampaignEvents::ON_EVENT_DECISION_EVALUATION => [‘onDailyLimitEvaluate’, 0],

The mautic.campaign_on_event_decision_evaluation event is dispatched when a campaign decision is to be evaluated.

My Enviroment
My Mautic version is: 5.2
My PHP version is: PHP 8.3.11