You might be able to add with Launch, it will require testing of course... at least it's a start.
As for how your Launch code triggers, that's up to you. We don't use the Adobe Data Layer either (our implementation was done long before that was a thing....) We use our own custom layer, and like I said, we use a lot of custom events...
Ok, just following up here after several back and forth conversations over Private Messaging.
Leaving out the specific vendor that was used, the working solution ended up using multiple rules:
- AppendScriptToPage (using the Library Loaded trigger)
- Rules for each "tracking scenario", such as Open, Close, Submit Question, etc
Within the AppendScriptToPage rule, we added both the vendor's code, and then each of the specific API Event Handlers. (It turned out that we couldn't listen for these directly inside the Adobe Rules, so we essentially daisy chained the Event Handlers from the vendor to trigger each tracking scenario rule.
In this case, despite the fact that we could have called the _satellite.track directly (since we had full control of both the code calling it and the rules themselves), the Satellite Track can be easily broken if the names of the rules are updated by someone who doesn't know the dependency (most rules the name are solely for identification, and don't have any impact on functionality, and we wanted to keep that same openness to these rules)... so we opted for creating Custom JS Rules inside the vendor's handlers, like so:
// Vendor Handler Start
var querySubmit = new Event("querySubmit ", { detail: { "threadId": threadId, "questionAnswerId": questionAnswerId, "question": question } });
window.dispatchEvent(querySubmit );
// Vendor Handler End
Then in each rule, we added custom code listeners:
window.addEventListener('querySubmit ', function (e) {
trigger();
}, false);
The trigger() is what tells Adobe to run the rule, and continue onto the conditions (if any) and the actions of the rule.
Then the clear vars, set variables, and send beacons were set up to perform the tracking as per the needs.
In the end, the tracking is now working and we didn't have to get the developers involved.
Other similar scenarios may differ depending on the vendor and code involved, but an implementation similar to this might help others out.