Skip to main content

Hi,

I would like to know if users could enter a campaign multiple times after an event is triggered before actually exiting it.
We have an scenario where we want to send a reminder after a payment is overdue. A few days after the first email is sent, we will send another one. A few more days, if the payment has not been resolved yet, we will send one last email. In principle this should not be a problem but in our case, a user could  have different pending payments for different products and they should receive different emails and I am not completely sure how to implement this.
Thank you in advance.

There are a couple of ways you can go about this. 

By default, if you’re using an event triggered campaign, a contact will enter that campaign every time the event is triggered, regardless if they are still in the canvas workflow or not. So as long as your event is firing for every product reminder, that should work. 

Another approach would be to create a separate campaign for each product. Your event would need values so you can filter the correct reminder for the right product. I like this option because you can isolate conversion rates by product, and you might want different cadences based on each product (or maybe not?). 

Hopefully this helps!


Thanks for the reply. 

I am afraid that having a campaign per product won't be an option as there could be as many products as customers.

Knowing that they will enter the campaign everytime the event is triggered, that will definitely help. The only remaining question would be about the campaign exit: how could I ensure they exit from certain campaigns and not from others? My initial idea was if it could be done through a dynamic value that could depend on the first triggering event: the trigger event "payment_overdue" which made the user enter the campaign, contains the property paymentId "P1". So, they would exit the campaign only if system triggered the event "payment_collected" with the same property paymentId "P1". Obviously other users events would have a different value for the property  paymentId (hope this explanation makes sense)

Not sure if customer.io campaigns have this type of flexibility.

Thanks a lot 


Hmm if there are that many products then that does complicate it… I think I understand what you’re saying. 

One problem you face here is that customer.io canvas can only reference data from a single event, the triggering event. So if “payment_overdue” is the triggering event, I cannot query data from “payment_collected” within that canvas. 

One work around would be to store paymentId’s for each product as attributes on the contact record, perhaps as a date stamp, but if you’re dealing with tons of products that’s not really scalable.

This may not be ideal, but in the meantime could you go generic? So if a customers has any product that is overdue with payment, they get sent notices until all payments are up to date. For this you might have a boolean value on the person record of “payments_overdue” that is true/false, and if true they enter the campaign with CTA’s that get sent to a billing page where they have the chance to bring their billing up to date with all their products?

If I’m way off base for your product/experience forgive me lol


thanks @boostmyemail , that’s very helpful,
we had a similar issue, and now finding a possible solution, after reading your last answer.

we are having  a campaign where the trigger is a status update, like here payment_status = overdue,
and the issue was that as soon as any payment get collected, (payment_status = collected), then the user would stop receiving notifications for all payments, even if they are still pending.

 

note that i’m just using the payment context as example, our specific context and naming is different, but the logic looks exactly the same.

the possibile solution i’m thinking of is:

  • keep the campaign trigger as it is: payment_status = overdue
  • store which payment (ids) are still open, in the customer attributes
    • like customer.overdue_payments_ids = t1,2,3,4]
  • create a segment called `customers_with_overdue_payments`
    • the segment condition would be: customer.overdue_payments_ids is not empty
  • set a filter in the campaign: customer must be in the segment `customers_with_overdue_payments`

 

do you think it would make sense?

this would need a background job, that keeps the attribute customer.overdue_payments_ids always up-to-date, from out backend.

 

what could be improved or kept in mind while exploring this solution?

ideally i’d like to converge towards a solution that is as simple as possible, for a first mvp

 

thank you very much, for sharing this idea about how to solve this challenge!

p.s.
pinging also @bmsv_ - he might be interested as well, as author of this topic


update:
the solution was much easier than expected.

 

in the exit condition,it’s possible to select “trigger event attribute” as source of the data where to compare the values determining if the user stays in the campaign or not.

 

so, in short, the first trigger event, with all of its payload, remains saved on customer.io, and its fields are accessible, selecting it in the dropdown menu, in the exit conditions.

we resolved by adding the id of that specific order, in the exit condition.

 

the user will only exit the campaign, if ```triggerEvent.orderId == event.orderId```


Reply