My question is similar to Eliot's, though I am asking about Event Context.

"inArguments": [
    { "FirstName":"{{Event.__EventDefinitionKey__.FirstName}}" }

Unlike Activities events cannot be placed anywhere in the journey so I assume EventDefinitionKey must always be the same for a particular journey.


Is it possible to retrieve an Event Key (EventDefinitionKey) using Data Bindings? So that I don't bother updating the config.json file with the event key each time.


I don't know of any possibility to retrieve the event definition key using data binding, but here is the solution I use for my custom activities:

  • I added a field to the configuration dialog of the custom activity where I enter the event definition key when configuring the activity
  • When the configuration is finished I construct/overwrite the arguments with the now correct data binding expressions in customActivity.js

Using this solution you don't need to adapt the config.json and host a custom activity for every journey and only add an additional input field to your configuration wizard.

Additional field in configuration wizard interface:

<input id="eventDefinitionKey" placeholder="journey entry event's event definition key" type="text" required="required" minlength="1">

Setting the inArguments on save in customActivity.js:

var eventDefinitionKey = $('#eventDefinitionKey').val();
payload['arguments'].execute.inArguments = [{
    'FirstName': '{{Event.' + eventDefinitionKey + '.FirstName}}'

An example can be found on my github account:

  • This is a good approach, but in this case the user must put the correct event key each time they set up a new journey.
    – Eduard
    Jul 26 '17 at 7:45

Another option apparently is using requestedInteraction together with a requestInteraction event called by the Custom Activity.

Here is an example code:

connection.on('requestedInteractionDefaults', function(settings) { 
    if( settings.error ) {
         console.error( settings.error );
    } else {
         defaults = settings;
    console.log('defaults', defaults);
    var eventKey = retrieveKey(defaults.email[0]);
    console.log('EventKey', eventKey);

// Assume that the string of the format  
// '{{Event.ContactEvent-72af1529-1d7d-821e-2a08-34fb5068561d."EmailAddress"}}' 
// It will return 'ContactEvent-72af1529-1d7d-821e-2a08-34fb5068561d' 
function retrieveKey (string) {
    var pos1 = string.indexOf(".");
    var pos2 = string.indexOf(".", (pos1 + 1) );
    var result = string.substring( (pos1 + 1) , pos2);
    return result;

And console output:

enter image description here

  • 3
    Inspired by the answer. By triggering "requestInteraction" and upon receiving "requestedInteraction", you can access eventDefinitionKey from settings.triggers[0].metaData.eventDefinitionKey
    – frogcoder
    Dec 11 '17 at 11:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.