2
votes

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.

1

1 Answers

1
votes

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.