I have been trying without success to understand how to work with the InArguments/OutArguments from Journey Builder on marketing cloud. I have been reading through the documentation on Marketingcloud as well as GitHub examples and still can't understand. I believe much of the information online is outdated or incomplete.
Here is my config.json:
"workflowApiVersion": "1.1",
"metaData": {
"icon": "images/icon.png",
"iconSmall": "images/iconSmall.png",
"category": "customer updates"
},
"type": "REST",
"lang": {
"en-US": {
"name": "SampleCA",
"description": "A Template for a custom Journey Builder activity",
"step1Label": "Configure Activity"
}
},
"arguments": {
"execute": {
"inArguments":[
{
"ContactKey": "{{Context.ContactKey}}"
}
],
"outArguments": [],
"url": "https://programb.herokuapp.com/execute",
"verb": "POST",
"body": "",
"header": "",
"format": "json",
"useJwt": true,
"timeout": 10000
}
},
"configurationArguments": {
"applicationExtensionKey": "6f382672-1c0f-42e1-ac02-6bec3ad0e57b",
"save": {
"url": "https://programb.herokuapp.com/save",
"verb": "POST"
},
"publish": {
"url": "https://programb.herokuapp.com/publish",
"verb": "POST"
},
"stop": {
"url": "https://programb.herokuapp.com/stop",
"verb": "POST"
},
"validate": {
"url": "https://programb.herokuapp.com/validate",
"verb": "POST"
}
},
"wizardSteps": [
{ "label": "Get User Input", "key": "step1" }
],
"userInterfaces": {
"configModal": {
"height": 400,
"width": 1000,
"fullscreen": false
}
},
"schema": {
"arguments": {
"execute": {
"inArguments": [
{
"ContactKey": {
"dataType": "ContactKey",
"isNullable": false,
"direction" : "in"
}
}
],
"outArguments": []
}
}
}
}
and my customActivity.js:
define([
'postmonger'
], function (
Postmonger
) {
'use strict';
var connection = new Postmonger.Session();
var token;
var payload = {};
var contactKey;
$(window).ready(function() {
connection.trigger('requestTokens');
connection.trigger('ready');
});
connection.on('clickedNext', save);
connection.on('getTokens', function( data ) {
if( data.error ) {
console.error( data.error );
} else {
tokens = data;
}
});
connection.on('initActivity', function(payload) {
console.log("INITACTIVITY INITACTIVITY INITACTIVITY INITACTIVITY INITACTIVITY ");
var hasInArguments = Boolean(
payload['arguments'] &&
payload['arguments'].execute &&
payload['arguments'].execute.inArguments &&
payload['arguments'].execute.inArguments.length > 0
);
var inArguments = hasInArguments ? payload['arguments'].execute.inArguments : {};
console.log("INARGS INARGS INARGS INARGS INARGS INARGS INARGS INARGS INARGS INARGS INARGS INARGS ");
console.log(inArguments);
console.log("INARGS INARGS INARGS INARGS INARGS INARGS INARGS INARGS INARGS INARGS INARGS INARGS ");
$.each(inArguments, function (index, inArgument) {
$.each(inArgument, function (key, val) {
if (key === 'contactKey') {
contactKey = val;
}
});
});
console.log(payload);
connection.trigger('updateButton', {
button: 'next',
text: 'done',
visible: true
});
console.log("INITACTIVITY INITACTIVITY INITACTIVITY INITACTIVITY INITACTIVITY ");
});
connection.on('requestedTokens', function(tokens) {
token = tokens;
});
function save() {
payload['arguments'].execute.inArguments = [{
"tokens": token,
"contactKey": contactKey
}];
payload['metaData'].isConfigured = true;
console.log(payload);
connection.trigger('updateActivity', payload);
}
});
Could you please tell me how to get these InArguments for each contact going into my customActivity and manipulate them in my app?
As I understand my app.js serves my index.html when a request is made to "/" this then launches my customActivity.js script which uses Postmonger module to reply to events such as Init/Ready. Any clarification on this would be much appreciated.
Thank you.
Each contact that goes through your custom activity will perform a POST call to the url in arguments.execute.url, in your case https://programb.herokuapp.com/execute, with the parameters you set in the InArguments attribute.