Mautic: Recurring Campaigns / Repeating Tasks

Created on 17 Apr 2016  ·  83Comments  ·  Source: mautic/mautic

[Feature request]
In a campaign, if a lead triggers action "Change Campaigns -> Remove Lead From -> This Campaign" then the lead's "track record" of actions, decisions and conditions from this given campaign gets nullified. If the lead now gets added to the source of this campaign again, it starts campaign afresh. This will allow recurring campaigns or re-using the campaign repeatedly, based on condition.

At present, actions inside campaigns run only once. This prevents campaigns to work as recurrent ones, a lead can't re-use the same campaign logic path from the beginning, if it has already passed through this campaign path.

The lack of this functionality has been mentioned here and here.

Does this sound like a realistic feature to implement?

There are many use cases like repeating follow-up emails (every time a person buys an item), routine reminder letters (like "we never ask you for a password"), recurring account maintenance checks ("please update your account info"), repeating on-action "thank you letters", on-action confirmation letters, basically, any condition-based or smart list-based recurring task. I think it can not be implemented with the present Mautic functionality, correct me please if there is a workaround.

Otherwise, big thank you for your work and congrats with Mautic success!

feature ready-to-test

Most helpful comment

Recurring / Loop Campaign feature possible implementation

What type of report is this:

| Q | A |
| --- | --- |
| Bug report? | |
| Feature request? | Y |
| Enhancement? | |

Description:

This feature introduces recurring / loop campaigns, allowing a contact to re-use a campaign repeatedly.

At present, actions inside campaigns run only once. A contact can't re-enter the same campaign from the beginning and take a different logic path, if it has already passed through the campaign once.

Example:

Show different dynamic content not only to different contacts, but to the same contact at different stages, depending on contact tags/fields change (unknown / subscriber / premium etc.)

Possible Implementation

  1. Add a 'Recurring' parameter to a campaign (an on/off switch, something like this:)
    newcampaign-recurring
  2. In a campaign logic, when 'Change campaigns' action is triggered for a contact with the case 'Remove contact from: 'This campaign' (as below:)
    offfromthiscampaign
  3. If this campaign has 'Recurring' = Yes,
  4. And if all scheduled events of this campaign are done,

Do the following:

  1. Delete events history from campaign_lead_event_log table for this campaign and this contact;
  2. Set manually_removed='0' in campaign_leads table for this campaign and this contact.

This allows a contact to re-enter the campaign and possibly take a different logic path due to changed circumstances.

Proof of concept

Since I am not familiar with Mautic code, I wrote a simple php script that runs as a cron job (borrowed the idea to run it as cron from Hartway Admin)

  • script looks for campaigns that have 'recurring' in the name (an analog of 'Recurring' switch)
  • for each such campaign:
  • checks if there is a lead that left campaign via Remove contact from: This campaign (manually_removed='1' in campaign_leads)
  • checks if there are pending scheduled events for this campaign ('is_scheduled='1'' in 'campaign_lead_event_log')
  • if yes, skips this campaign (to make sure there are no pending events left, e.g. contact has passed the campaign logic path all the way down)
  • if no scheduled events left, deletes rows from campaign_lead_event_log for this contact and this campaign
  • sets manually_removed='0' in campaign_leads for this contact and this campaign
  • repeats above steps for the next 'recurring' campaign

Here is my php script:

<?php
$username="Your-Mautic-DB-User-Name-Here";
$password="Your-Mautic-DB-Password";
$dbname="Your-Mautic-DB-Name";
$dbhost="Your-Mautic-DB-Host";

mysql_connect($dbhost,$username,$password);
@mysql_select_db($dbname) or die(strftime('%c')." Unable to select database");
echo "\n".strftime('%c')." Fetching recurring campaigns...";
$campaigns=mysql_query("SELECT id FROM campaigns WHERE name LIKE '%recurring%'");
if($campaigns && (mysql_num_rows($campaigns)!=0) )
    {
    echo " Done.\n";
    while ($row = mysql_fetch_array($campaigns, MYSQL_ASSOC))
        {
        echo "Checking campaign ".$row['id']." for removed leads...";
        $removed_leads=mysql_query("SELECT campaign_id FROM campaign_leads 
                                    WHERE campaign_id=".$row['id']." AND manually_removed='1'");    
        if($removed_leads &&  (mysql_num_rows($removed_leads)!=0) )
            {
            echo " found.\n";
            $row_removed_leads = mysql_fetch_array($removed_leads, MYSQL_ASSOC);
            $scheduled=mysql_query("SELECT event_id FROM campaign_lead_event_log 
                                    WHERE campaign_id=".$row_removed_leads['campaign_id']." AND is_scheduled='1'");
            if($scheduled && (mysql_num_rows($scheduled)==0) )
                {
                echo "Clearing campaign_lead_event_log for campaign ".$row_removed_leads['campaign_id']."...";
                $result=mysql_query("   DELETE FROM campaign_lead_event_log
                                        WHERE campaign_id=".$row_removed_leads['campaign_id']);
                if($result)
                    {
                    echo " Done.\n";
                    echo "Clearing manually_removed for campaign ".$row['id']."...";
                    $result=mysql_query("   UPDATE campaign_leads SET manually_removed='0'
                                            WHERE campaign_id=".$row['id']." AND manually_removed='1'");
                    if($result)
                        { echo " Done.\n"; }
                    else
                        { echo " ERROR!\n"; echo mysql_error(); }
                    }
                else
                    { echo " ERROR!\n"; echo mysql_error(); }
                }
            else
                {
                if($scheduled && (mysql_num_rows($scheduled)!=0) ) 
                    { echo "Campaign ".$row['id']." still have scheduled events. Skipping.\n"; }
                else
                    { echo " ERROR!.\n"; echo mysql_error(); }
                }
            }
        else
            {
            if($removed_leads &&  (mysql_num_rows($removed_leads)==0) )
                { echo " none found. Skipping.\n"; }
            else
                { echo " ERROR!.\n"; echo mysql_error(); }
            }
        }       
    }
else
    { 
    if($campaigns && (mysql_num_rows($campaigns)==0) )
        { echo " none found.\n"; }
    else
        { echo " ERROR!.\n"; echo mysql_error(); }
    }
?>

I've been testing this feature for a few days now with 4 different repeating campaigns.
I see stable desirable behavior so far.
The awesome part to me is how it farther unlocks the dynamic content feature:

  • unknown contact is served 'welcome' content
  • known contact is served personalized content (so far nothing new, that's how DWC works)
  • next time the same known contact opens a page, it is served 'subscriber' or 'premium' content, depending on tags/fields change

This is a powerful feature that can really unlock the Dynamic part of the Dynamic content and also help with 'Set and forget' type recurring scenarios!

Needed feedback

Would our devs be so kind to give a feedback on this feature and implementation logic?

  • Are there any unwanted side effects that this logic might trigger?
  • Does anyone work on a similar feature by chance or plan to work on soon?
  • I know, it's an ugly implementation, but can someone point me in a right direction on how to do it in a more elegant way?

All 83 comments

+1

+1
Any other form of action that allows a lead to pass through multiple times would be very handy.

+1

+1 +1 +1

I'm shocked that there isn't something like this in Mautic. I'm willing to contribute to it, especially if a bunch of people want it.

Recurring / Loop Campaign feature possible implementation

What type of report is this:

| Q | A |
| --- | --- |
| Bug report? | |
| Feature request? | Y |
| Enhancement? | |

Description:

This feature introduces recurring / loop campaigns, allowing a contact to re-use a campaign repeatedly.

At present, actions inside campaigns run only once. A contact can't re-enter the same campaign from the beginning and take a different logic path, if it has already passed through the campaign once.

Example:

Show different dynamic content not only to different contacts, but to the same contact at different stages, depending on contact tags/fields change (unknown / subscriber / premium etc.)

Possible Implementation

  1. Add a 'Recurring' parameter to a campaign (an on/off switch, something like this:)
    newcampaign-recurring
  2. In a campaign logic, when 'Change campaigns' action is triggered for a contact with the case 'Remove contact from: 'This campaign' (as below:)
    offfromthiscampaign
  3. If this campaign has 'Recurring' = Yes,
  4. And if all scheduled events of this campaign are done,

Do the following:

  1. Delete events history from campaign_lead_event_log table for this campaign and this contact;
  2. Set manually_removed='0' in campaign_leads table for this campaign and this contact.

This allows a contact to re-enter the campaign and possibly take a different logic path due to changed circumstances.

Proof of concept

Since I am not familiar with Mautic code, I wrote a simple php script that runs as a cron job (borrowed the idea to run it as cron from Hartway Admin)

  • script looks for campaigns that have 'recurring' in the name (an analog of 'Recurring' switch)
  • for each such campaign:
  • checks if there is a lead that left campaign via Remove contact from: This campaign (manually_removed='1' in campaign_leads)
  • checks if there are pending scheduled events for this campaign ('is_scheduled='1'' in 'campaign_lead_event_log')
  • if yes, skips this campaign (to make sure there are no pending events left, e.g. contact has passed the campaign logic path all the way down)
  • if no scheduled events left, deletes rows from campaign_lead_event_log for this contact and this campaign
  • sets manually_removed='0' in campaign_leads for this contact and this campaign
  • repeats above steps for the next 'recurring' campaign

Here is my php script:

<?php
$username="Your-Mautic-DB-User-Name-Here";
$password="Your-Mautic-DB-Password";
$dbname="Your-Mautic-DB-Name";
$dbhost="Your-Mautic-DB-Host";

mysql_connect($dbhost,$username,$password);
@mysql_select_db($dbname) or die(strftime('%c')." Unable to select database");
echo "\n".strftime('%c')." Fetching recurring campaigns...";
$campaigns=mysql_query("SELECT id FROM campaigns WHERE name LIKE '%recurring%'");
if($campaigns && (mysql_num_rows($campaigns)!=0) )
    {
    echo " Done.\n";
    while ($row = mysql_fetch_array($campaigns, MYSQL_ASSOC))
        {
        echo "Checking campaign ".$row['id']." for removed leads...";
        $removed_leads=mysql_query("SELECT campaign_id FROM campaign_leads 
                                    WHERE campaign_id=".$row['id']." AND manually_removed='1'");    
        if($removed_leads &&  (mysql_num_rows($removed_leads)!=0) )
            {
            echo " found.\n";
            $row_removed_leads = mysql_fetch_array($removed_leads, MYSQL_ASSOC);
            $scheduled=mysql_query("SELECT event_id FROM campaign_lead_event_log 
                                    WHERE campaign_id=".$row_removed_leads['campaign_id']." AND is_scheduled='1'");
            if($scheduled && (mysql_num_rows($scheduled)==0) )
                {
                echo "Clearing campaign_lead_event_log for campaign ".$row_removed_leads['campaign_id']."...";
                $result=mysql_query("   DELETE FROM campaign_lead_event_log
                                        WHERE campaign_id=".$row_removed_leads['campaign_id']);
                if($result)
                    {
                    echo " Done.\n";
                    echo "Clearing manually_removed for campaign ".$row['id']."...";
                    $result=mysql_query("   UPDATE campaign_leads SET manually_removed='0'
                                            WHERE campaign_id=".$row['id']." AND manually_removed='1'");
                    if($result)
                        { echo " Done.\n"; }
                    else
                        { echo " ERROR!\n"; echo mysql_error(); }
                    }
                else
                    { echo " ERROR!\n"; echo mysql_error(); }
                }
            else
                {
                if($scheduled && (mysql_num_rows($scheduled)!=0) ) 
                    { echo "Campaign ".$row['id']." still have scheduled events. Skipping.\n"; }
                else
                    { echo " ERROR!.\n"; echo mysql_error(); }
                }
            }
        else
            {
            if($removed_leads &&  (mysql_num_rows($removed_leads)==0) )
                { echo " none found. Skipping.\n"; }
            else
                { echo " ERROR!.\n"; echo mysql_error(); }
            }
        }       
    }
else
    { 
    if($campaigns && (mysql_num_rows($campaigns)==0) )
        { echo " none found.\n"; }
    else
        { echo " ERROR!.\n"; echo mysql_error(); }
    }
?>

I've been testing this feature for a few days now with 4 different repeating campaigns.
I see stable desirable behavior so far.
The awesome part to me is how it farther unlocks the dynamic content feature:

  • unknown contact is served 'welcome' content
  • known contact is served personalized content (so far nothing new, that's how DWC works)
  • next time the same known contact opens a page, it is served 'subscriber' or 'premium' content, depending on tags/fields change

This is a powerful feature that can really unlock the Dynamic part of the Dynamic content and also help with 'Set and forget' type recurring scenarios!

Needed feedback

Would our devs be so kind to give a feedback on this feature and implementation logic?

  • Are there any unwanted side effects that this logic might trigger?
  • Does anyone work on a similar feature by chance or plan to work on soon?
  • I know, it's an ugly implementation, but can someone point me in a right direction on how to do it in a more elegant way?

+1

+1, the idea of limiting campaigns in the search is awesome performance wise . I'll start testing and let u guys know.
good job mate!

+1

I think that the idea on how to implement this from @Mazzim its excelent.

My 2 cents:

Maybe there is no need to add the "Recurring" on/off switch to the campaigns menu.

All the campaigns has to have the recurring feature enabled always and when you need to make some change you simple doit inside the campaign, like in the step 2 when you 'Remove contact from: 'This campaign'

All the campaigns has to have the recurring feature enabled always and when you need to make some change you simple doit inside the campaign, like in the step 2 when you 'Remove contact from: 'This campaign'

I think having the option is good, Disabling it will make run time faster, specially if you have a bunch of campaigns that aren't recurring.

Thanx for your feedback, guys! @maxitromer, that was my first intuitive understanding of how 'Remove contact from: this campaign' works. Than I realized it is an analog of manually flipping switches in 'Campaigns contact is part of' dropdown of Edit a contact page. It sets manually_removed=1 which prevents a contact from being a part of a campaign event if qualified by the segment that feeds it.

Thinking of a more elegant way, that doesn't introduce BC issues, what about these two options?

  • A new campaign action 'Allow contact to repeat campaign...' with available campaign selector

or

  • Modify 'Remove contact from: ' action, adding a checkbox 'Allow to repeat campaign', that is off by default

What do you think?
First one involves creating the new action, perhaps, templating it from 'Change campaigns', the second one involves changing the way properties in campaign_events are stored for 'Change campaigns' Which would be easier to implement?

@mazzim I almost implemented your logic in console mautic:campaigns:trigger, so eachtime a campaign triggers after processing start, scheduled and ... then start processing recurring campaigns.

Than I realized it is an analog of manually flipping switches in 'Campaigns contact is part of' dropdown of Edit a contact page. It sets manually_removed=1 which prevents a contact from being a part of a campaign event if qualified by the segment that feeds it.

Can you explain the problems it can cause? I don't see any.

@FarhadF
'Change contact campaign' is meant to add/remove a contact and prevent it from changing it's 'membership' of this campaign afterwards no matter what. At least that's how the original action supposed to work.

What we try to achieve is to allow a removed contact to re-enter the campaign, right?

First of all, we allow a contact to become a part of the campaign again, with old behavior a contact is not a part of the campaign, while with the new behavior it is.

Second, without a normal/recurring settings but with the new behavior old campaigns of other users with Change contact cmampaign action might get triggered again. That's BC issue that might send those old emails to all of your 100k subscribers, no one wants that :)

So, what if there would be no 'Recurring/normal' switch, like @maxitromer proposed, but instead we will make it as either of these:

  • A new campaign action 'Allow contact to repeat campaign...' with available campaign selector

or

  • Modify 'Remove contact from: ' action, adding a checkbox 'Allow to repeat campaign', that is off by default

Would love to see how you did it!

+1

Appreciate the risks with BC, but I currently have a manual process that has to be triggered per contact; an external script that allows me to clean out a contact and re-insert them into a campaign. Usually needed when emails weren't delivered for some reason.

Second, without a normal/recurring settings but with the new behavior old campaigns of other users with Change contact cmampaign action might get triggered again. That's BC issue that might send those old emails to all of your 100k subscribers, no one wants that :)

I agree, but with a recurring switch that you presented in the first place, nothing bad gonna happen.

@Mazzim, in my opinion adding a checkbox 'Allow to repeat campaign' will be more easy for the user because its there, inside the campaign.

(I'm thinking as user because I'm.)

Yo dont need close the campaign launcher and to go to the campaign main menu to switch. You can doit inside the campaign flow and the checkbox is there exactly when you need it.

+1

+1
Looking forward this feature as well.

I think having a flag for recurring campaigns is not the right way to go. The intuitiv way to handle this for me would be to allow to connect an arbitrary element in a campaign to the begin of the campaign. So the user gets dropped into the flow again.

campaign_loop

That way allows you to create simple "recurring" campaigns, but also more sophisticated setups. Like looping somebody through that campaign till a certain action is executed. Having such a functionality is the foundation for features like #2592

@wittwerch your way to see recurring its very interesting when you run campaigns over and over without go away from it.

However, in my scenario I need to go out from the recurring campaign and run another campaigns and after that come back to run the recurring campaign again, so in my case I love to see working the @Mazzim idea.

I would like to keep the history of the campaign instead of removing the contact actions, so I suggest to introduce a "run number" to a contacts campaign events, which means the system could base its restrictions on the combined campaign id and run-number.

+10

+100 is there an alternative or someone develop this feature ? but if I can do it

@qneyrat maybe you can start from here: #2487

+1 Discovered that I didn't have recurring as a feature just a few hours ago. However, since my intention is to have a blog feed of recent articles sent to my customers, the rig I have deciphered from w/in the program is to:

Create 'Recurring #1" Campaign — this campaign essentially waits 30 days before sending a URL email. I set a condition that the email is open. Then they are changed to "Recurring #2" (a clone of #1) This campaign ends by removing them from #2 and re entering them into #1. Looped.

It's not a perfect solution cause its predicated on people opening the email, but I can assume they will at least skim it and fulfill the 'action.'

@alanhartless We are in the need for that feature and are currently using an ugly workaround deleting entries in the campaign_lead_event_log.
However we have capacity to do development on that and contributing that to Mautic, but as you mentioned in #2487 we need a plan how to implement it. What's the process getting to that plan?

+1

+1

+1

@wittwerch have you modified the codebase or are you using a custom cron script to do the job? Would you perhaps be willing to share some code examples or even just an outline of the process (e.g. what tables if any apart from campaign_lead_event_log do you query, modify, etc.).

@vshulev You only need to modify the campaign_lead_event_log table. But you have to be careful which entries to delete.
In our specific case the campaign looks like this

screen

The contact has a field "travel_date" and we want to send him an email the day before. So the campaign checks for that condition. After the first run there is only one entry in campaign_lead_event_log table, because the contact is "stuck" there.
So if there is only exactly one entry for a contact in this particular campaign, we delete that entry and kind of reset that campaign so that if the campaign trigger runs again the condition gets evaluated again. This happens over and over again till the day before the departure, when the condition gets evaluated to true and "jumps" to the notification action. From that moment on there are two entries in the table and these won't get cleaned by our job.

Disclaimer:

  • No guarantee that this works in your case, I'll just share the code to give you an idea.. :)
  • Tested on Mautic 2.2.0 only

app/bundles/CampaignBundle/Command/HubsCampaignCommand.php
````

namespace Mautic\CampaignBundle\Command;

use Mautic\CoreBundle\Command\ModeratedCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

/**

  • Class HubsCampaignCommand.
    /
    class HubsCampaignCommand extends ModeratedCommand
    {
    /
    *

    • {@inheritdoc}

      */

      protected function configure()

      {

      $this

      ->setName('hubs:campaigns:clear')

      ->setDescription('Rest date condition campaign')

      ->addOption(

      '--campaign-id', '-i', InputOption::VALUE_OPTIONAL, 'Trigger events for a specific campaign. Otherwise, all campaigns will be triggered.', null

      )

      ->addOption('--force', '-f', InputOption::VALUE_NONE, 'Force execution even if another process is assumed running.');

    parent::configure();
}

/**
 * {@inheritdoc}
 */
protected function execute(InputInterface $input, OutputInterface $output)
{
    $container = $this->getContainer();

    /** @var \Mautic\CoreBundle\Factory\MauticFactory $factory */
    $factory = $container->get('mautic.factory');

    /** @var \Mautic\CampaignBundle\Model\EventModel $model */
    $model = $factory->getModel('campaign.event');

    $id            = $input->getOption('campaign-id');

    $translator    = $factory->getTranslator();

    if (!$this->checkRunStatus($input, $output)) {
        return 0;
    }

    //find and update recurring campaigns
    $output->writeln('<comment>' . $translator->trans('mautic.campaign.trigger.recurring') . '</comment>');
    $processed = $model->resetRecurringCampaign($id);

}

}
````

app/bundles/CampaignBundle/Entity/CampaignRepository.php
````
//Temporary function to implement reset date campaigns - start - author:Nithin
/**
* Delete Campaign Events for combination of Contact and campaign
* to let campaign rerun for Contact
*
* @param int $campaignId
*
*/
public function deleteCampaignEventLog($campaignId)
{
$leadIds = $this->getCampaignLeadIds($campaignId);//get all active leads in the campaign
$q = $this->getEntityManager()->getConnection()->createQueryBuilder();

    foreach ($leadIds as $leadId) {
        $q->select('count(cl.lead_id) as lead_count')
                ->from(MAUTIC_TABLE_PREFIX . 'campaign_lead_event_log', 'cl')
                ->where(
                        $q->expr()->andX(
                                $q->expr()->eq('cl.campaign_id', ':campaignId'), $q->expr()->eq('cl.lead_id', ':leadId')
                        )
                )
                ->setParameter('campaignId', (int) $campaignId)
                ->setParameter('leadId', (int) $leadId);
        $result = $q->execute()->fetchAll();

        if ($result[0]["lead_count"] == 1) { //if only 1 record, so only condition visited.
            $this->deleteRecurringCampaignEventLog($campaignId, $leadId);
        }
    }
}

/**
 * Delete Campaign Events for combination of Contact and campaign
 * to let campaign rerun for Contact
 *
 * @param int        $campaignId
 * @param int        $leadId
 */
private function deleteRecurringCampaignEventLog($campaignId, $leadId)
{
    // Delete events
    $p = $this->getEntityManager()->getConnection()->createQueryBuilder();
    $p->delete(MAUTIC_TABLE_PREFIX . 'campaign_lead_event_log')
            ->where(
                    $p->expr()->andX(
                            $p->expr()->eq('campaign_id', ':campaignId'), $p->expr()->eq('lead_id', ':leadId')
                    )
            )
            ->setParameter('campaignId', (int) $campaignId)
            ->setParameter('leadId', (int) $leadId)
            ->execute();
}

//Temporary function to implement reset date campaigns - end

````

app/bundles/CampaignBundle/Model/EventModel.php
````
/**
* ( Temp function - To delete )
* Function to reset recurring campaign by clearing campaign events log table
*
* @param int $id Campaign Id
*/
public function resetRecurringCampaign($id)
{
$campaignRepo = $this->getCampaignRepository();
$campaignRepo->deleteCampaignEventLog($id);

}

````

@wittwerch thank you so much for posting such a detailed explanation! I'm sure others will find it useful too.

@escopecz @alanhartless
As I mentioned before we have capacity to work on that issue. But before we start to work on that we need to know, whether Mautic itself is working on that (roadmap?).
If this is not the case we still need to have a contact with whom we can discuss technical details. Who would be that contact from Mautic?

@wittwerch I didn't see nor hear about this being in our roadmap. Feel free to work on it. If you want to discuss some technical details, join our Slack, the #dev channel.

@wittwerch @escopecz We are planning to address this and we actually added the schema in 2.6.0 in preparation for doing so. I didn't want to have to change the schema for the campaign event log more than we have to since it can be large so planned ahead by adding the rotation columns to the campaign_lead_event_log and mautic_campaign_leads tables. The idea is to keep everything mapped to a rotation so that the contact can go through the campaign multiple times.

I do not however have a timeframe for that and we have not started work on the code itself. But if you have the resources and want to leverage those new schema changes, go for it. But let us know so we don't also work on it.

+1000 I would really love to see this feature. This would allow the use of multiple forms as contact source in one single campaign.

+1

+1

+1

👍

I haven't read all this thread, so ignore this idea if it has been canvassed already.

Perhaps a simpler approach is to allow a contact to be (re) added to a campaign ONLY if it has previously removed.

So, in other words, you create a (meta) campaign that removes a contact from a campaign and then re-adds them to retrigger the campaign.

Please! ad this function to Mautic, it's so important :( it's incredible that mautic does not have this implemented!

+2

+3

+100 Really really need this. Just assumed some of mine were working (silly me) and appears not. @wittwerch did you get any further with your solution? If not will need to find alternatives. :-(

@wittwerch @Mazzim @escopecz @alanhartless this is important for a number of projects so If there is something viable for this (using the rotation field) and if I can gather resources at my end too to help we would be eager to help.

@kgroveshok

I agree with you, this functionality is needed and will be implemented sooner or later - I am sure of that. Until then there is a workaround which can be accomplished with a 3rd party plugin: https://github.com/thirdset/ThirdSetMauticResetBundle

Wow @PeterTL thanks! this will be so usefull for us who want recurrent campaigns. Thanks!!

@PeterTL Awesome thank you. I have already implemented a different work around for my main install (could throw that on a gist if anyone is interested), its not pretty in the backend but front end is nicer than having to use campaign ids. But will take a look at that plugin for other options. Well, when everyone is ready to do this then count us in. Thanks. Kev

@kgroveshok Of yourse! Please share!

Thanks for sharing. It is indeed dirty in the backend, but if it works... ;-)

+1

+1

+1

+1

@escopecz will it be implemented?

In the release notes below
"Release 2.11.0: Campaign Management"
The following tickets are closed,

Issue # 4781 Recurring campaigns
(https://github.com/mautic/mautic/issues/4781)

Has the management just moved to # 1606?

+1

So, was this implemented or not? I can't get it to work and I am already running 2.11

Still not !

I would like to see this implemented.

+1

+1

+1

+1

Is this available in the latest release?

+1 Is this available in the latest release?

@dbhurley why is this closed? Is this available now? Can you give us some feedback?

Hi @mleffler, any idea when this feature will be available in Mautic?

+1

+1

It's ready to test: https://github.com/mautic/mautic/pull/6132

Please help with testing if you want it to be deployed soon.

Wow, I've been waiting for this for over 2 years.

Yeah, this is a pretty important feature I'd say. Hoping this sees the light of day soon.

@npracht is this now available in the latest release?

It'll be part of 2.14.0.

Hello, I'm having some problems with this new feature and I commented this on the other issue:
https://github.com/mautic/mautic/pull/6132#issuecomment-403976890

If someone can help me with it I'll grateful. I'm trying to help so if you need more info just ask me.

@alanhartless not even 2.15.0 !

+1

I am raising this exact same concern, the feature is not available in the latest release and but it is most needed.

Really need some help regarding sending the campaigns to the same contact repeatedly using a looping interval of 1-2 days or etc.

Why is this thread closed?

Hello,

Check this video :
https://navigatetomorrow.com/tutorials/how-to-create-a-birthday-campaign-in-mautic

You can use "Restart campaign" in the campaign ;)

Bye
Léo

@leooxx the description under the video that is impossible!

image

Exemple : 1 mail every 30 days...

+1 days : mail sending
+30 days : restart

I am new to mautic. Version 2.15.1 installed and my leads are not able to run through an automation twice or more... I set the decision on "yes" but it still does not work.

Do I need to code something out of this thread or is the new version where it will run released and I only need to update?
If I delete the leads inside of the table of campaign_leads it works. But not if they are already inside of this table. And I can't delete everybody always manually...

Although the lead was moved out of the campaign by an action, it says "manually removed - 1".
After I deleted two leads, I tried it again and now there is a 2 on the "rotation" row. But it still does not run from itself.

Reason why I ask is: If someone had opted in and wants the same freebie again, it would be great if the campaign would run again and delivers the freebie. Although the leads went through and finished it.
Thanks for your help!

Marina from germany

PS: If you have any questions, feel free to ask I would be glad if I could totally move my list from my actual newsletterprovider to Mautic! <3

Was this page helpful?
0 / 5 - 0 ratings

Related issues

dennisameling picture dennisameling  ·  3Comments

victor-mp picture victor-mp  ·  3Comments

matishaladiwala picture matishaladiwala  ·  4Comments

namankumar picture namankumar  ·  4Comments

ranjit-git picture ranjit-git  ·  4Comments