I have a need to update a field (let's call it API_Trigger) based on the values that may or may not change in other fields. This is so I can trigger an API call (see one of my earlier posts). I'd like this done universally as the 'other fields' can get changed in all kinds of locations (both internal to and external to Marketo).
I had a thought that I could create a smart campaign triggered on a change in Updated At that would update API_Trigger
However this doesn't seem to work.
Any thoughts on how to do a 'universal trigger'? If not, I've got to remember to put in a request campaign call on every form fill, etc etc. where a person may have details changed to make sure API_trigger gets updated.
My other thought was to add every record to a 'universal program' on creation, and then use the program member data is changed trigger, but that seems clunky (and risky if someone gets removed from the program accidentally).
My Webhook call is based on a second campaign that triggers whenever API_trigger changes it's value. This works just fine (as you'd expect).
Maybe I'm not seeing something obvious, but I think you could probably create a smart campaign that uses "Change data value" as a flow step.
The triggers could be a "Data value changes" on each of the fields you are expecting updates on, coupled perhaps by the right filters so that it doesn't trigger in the wrong occasions.
Something like this:
Reading your earlier post, it seems you are already doing something like that. Aside from Sanford's suggestion to aggregate all updates on a custom field and listen for changes on that one...
If you don't want to remember to add a "Request campaign" step to all your campaigns, maybe you can create a central campaign that triggers on "Fills out form" / "Person is created" (maybe forms that contain a specific string in their name) and "requests" your API call campaign.
Creation and modification scenarios would need to be treated separately like this:
Created AND field1, field2, field3 are not empty
Data value changes field1, Data value changes field2, Data value changes field3 AND (other filers you may need)
The notion of a central campaign is exactly what I am talking about here.
I am aggregating the fields I care about as per @SanfordWhiteman and the triggering my API call for integration purposes off the back of a change to the aggregated field. The key is to come up with a super robust way to update the aggregated field.
The notion of using the updated at date seemed perfect, but oddly doesn't work (possibly by design on Marketo's part). As per your suggestion, I probably will end up using a smart campaign containing series of triggers based on form fills, score changes etc. (without any constraints) to achieve the same end. The rate of updates will be moderately low, so it won't be overly burdensome on the system.
Creation is easy to manage as you can just use the 'created' trigger event.
@SanfordWhiteman , to your point about running it as an hourly batch; if I could get it down to 15 minutes, that probably would be acceptable.
Well you are definitely onto something with the "Updated At". I just tested a campaign with it and even added a constraint of "New value: is not empty" and it didn't trigger at all...
It's either a bug or intended. But ultimately I would settle for bug. It shouldn't be available as a trigger if it won't trigger...
I believe the intent is to prevent infinite loops (which makes sense, but it should be greyed out and explained).
It feels to me like what Marketo is really missing here (and in similar scenarios) is a way to stop a trigger or some way to signal that a campaign has finished processing.
This would be really powerful to chain processes together. For instance something similar to "webhook was called" but more like "webhook was called AND it finished, returning this result" or at least that it wen't through all flow steps in the requested campaign.
This could be dangerous if there is an error in the campaign and it never responds back... but I'm not sure that happens a lot and probably there could be some sort of time-out option.
Must it be a trigger? Can it not be an hourly batch for people whose Updated At is within the past hour?