Untitled

 avatar
unknown
plain_text
2 years ago
11 kB
28
Indexable
define(['postmonger'], function (Postmonger) {
    'use strict';

    var connection = new Postmonger.Session();
    var authTokens = {};
    var payload = {};
    var eventDefinitionKey;
    var requestedInteractionBody;
    var schemaForPhone = {};
    var lastStepEnabled = false;
    var steps = [
        { "label": "Configure SMS", "key": "step1" }
    ];
    var currentStep = steps[0].key;

    $(window).ready(onRender);

    connection.on('initActivity', initialize);
    connection.on('requestedTokens', onGetTokens);
    connection.on('requestedEndpoints', onGetEndpoints);
    connection.on('clickedNext', save);
    connection.on('requestedTriggerEventDefinition', function (eventDefinitionModel) {
        //console.log('DEFINITION ->');
        //console.log(eventDefinitionModel);
        if (eventDefinitionModel) {
            eventDefinitionKey = eventDefinitionModel.eventDefinitionKey;
            //console.log('>>>Event Definition Key ' + eventDefinitionKey);
            /*If you want to see all*/
            //console.log('>>>Request Trigger', JSON.stringify(eventDefinitionModel));
            //console.log('request schema ' + JSON.stringify(data['schema']));
        }
    });
    connection.on('requestedInteraction', function (interaction) {
        if (interaction) {
            requestedInteractionBody = interaction;
        }
    });
    connection.on('requestedSchema', function (data) {
        if (data) {
            schemaForPhone = data['schema'];
        }
    })

    function onRender() {
        // Journey Builder triggers this as soon 'ready' is called for the first time through 'initActivity'.
        connection.trigger('ready');
        connection.trigger('requestTokens');
        connection.trigger('requestEndpoints');
        connection.trigger('requestTriggerEventDefinition');
        connection.trigger('requestInteraction');
        connection.trigger('requestSchema');
    }

    function initialize(data) {
        if (data) {
            payload = data;
        }

        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 : {};

        $.each(inArguments, function (index, inArgument) {
            $.each(inArgument, function (key, val) { });
        });

        console.log(payload['arguments'].execute.inArguments[0]);

        // Update logo based on what ENV var is being used.
        $("#image-logo").attr("src", "images/{{activityLogo}}");
        
        // Add in our current activity's payload if it was already saved.
        if (payload['arguments'].execute.inArguments[0].message != '') {
            console.log("we have a valid payload already");
            // Put current payload back in the window when we open the app...
            var parsedMessage = replaceMessage(payload['arguments'].execute.inArguments[0].message);
            // Message itself.
            $(".messageTextContent").text(parsedMessage);

            // Title of message.
            var parsedTitle = payload['arguments'].execute.inArguments[0].campaignId;
            $("#messageTitleContent").text(parsedTitle.substring(50));

            // 'Select message' button.
            $("#selectMessageButton").html("<span class='tiny-label'>SELECTED MESSAGE:</span><br>" + parsedTitle.substring(50));

            // Dropdown.
            $("#senderNameDropdown").val(payload['arguments'].execute.inArguments[0].senderName);

            // Checkbox.
            if (payload['arguments'].execute.inArguments[0].isRealtime)
                $("#isCustomizable").prop("checked", true);
            else
                $("#isCustomizable").prop("checked", false);
            $(".senderName").text(($("#senderNameDropdown option:selected").val()));

            // Character counts.
            (function (characters) {
                var characterCount = $(".characterCount");
                var messageCount = $(".messageCount");
                var incrementMessage = 1;
                var counter = 0;
                var wordCounter = 160;

                $(characterCount).text(characters);

                if (characters > 306) {
                    wordCounter = 102;
                    $(".messageCountInfo").text("Messages (1 per 102 chars):");
                }

                for (let i = 0; i < characters; i++) {
                    counter++;
                    if (counter == wordCounter) {
                        incrementMessage++;
                        counter = 0;
                    }
                }

                $(messageCount).text(incrementMessage);
            })(parsedMessage.length);
        }

        connection.trigger('updateButton', {
            button: 'next',
            text: 'done',
            visible: true
        });
    }

    function onGetTokens(tokens) {
        //console.log(tokens);
        authTokens = tokens;
    }

    function onGetEndpoints(endpoints) {
        //console.log(endpoints);
    }

    function save() {
        var messageTextContent = $("#messageTextContent").text();
        var senderName = $("#senderNameDropdown").val();
        var messageTitle = $("#messageTitleContent").text()
        //var phoneNumber = findDefaultPhone(schemaForPhone);
        var isCustom = $("#isCustomizable").is(":checked");
        messageTextContent = replaceAmpScript(messageTextContent);
        payload.name = '{{messageTitle}} - ' + messageTitle;
        payload['arguments'].execute.inArguments = [{
            "message": messageTextContent,
            //"phoneNumber": '{{' + phoneNumber + '}}',
            "phoneNumberInteraction": '{{InteractionDefaults.MobileNumber}}',
            "phoneNumberContact": '{{Contact.Default.SMS}}',
            "campaignId": '{{Context.DefinitionId}} {{Context.VersionNumber}} ' + messageTitle,
            "campaignName": requestedInteractionBody.name,
            "senderName": senderName,
            "fiscalNumber": '{{Contact.Key}}',
            "startDate": "",
            "endDate": "",
            "isRealtime": isCustom
        }];


        //console.log(JSON.stringify(payload));
        //console.log(JSON.stringify(payload['arguments'].execute.inArguments));

        if (messageTextContent != null) {
            payload['metaData'].isConfigured = true;
            connection.trigger('updateActivity', payload);
        } else {
            alert('Please select a message.');
        }

    }

    function replaceMessage(message) {
        var varToReplace = [];
        var startBracket = 0;
        var endBracket = 0;
        var newString = message;

        for (let i = 0; i < message.length; i++) {
            if (message[i] == '{') {
                startBracket++;
            }

            if (startBracket >= 1) {
                varToReplace.push(message[i]);
            }

            if (message[i] == '}') {
                endBracket++;
            }

            if (endBracket == 2) {
                startBracket = 0;
                endBracket = 0;

                var startName = 0;
                var endName = 0;
                var stringVarName = [];

                for (let j = 0; j < varToReplace.length; j++) {
                    if (startName == 1 && varToReplace[j] != '"') {
                        stringVarName.push(varToReplace[j]);
                    }

                    if (varToReplace[j] == '"') {
                        if (startName == 0) startName++;
                        else endName++;
                    }

                    if (endName == 1) {
                        startName = 0;
                        endName = 0;

                        var varName = stringVarName.join("");
                        stringVarName = [];
                    }


                }
                var stringToReplace;
                if (newString == null) stringToReplace = message;
                else stringToReplace = newString;

                var replaceVar = varToReplace.join("");
                newString = stringToReplace.replace(replaceVar, '%%' + varName + '%%');
                stringToReplace = [];
                varToReplace = [];
            }
        }

        return newString;
    }

    function replaceAmpScript(message) {
        var startPercentage = 0
        var endPercentage = 0;
        var variableToReplace = [];
        var variableName = [];
        var newString = message;
        for (let i = 0; i < message.length; i++) {
            // Identify when we find a '%' sign.
            // Make sure we are at the start and ending.
            // Count the entire AMPScript variable and put it in its rightful position.
            // Get the name inside the % so we can get the variable.
            // Replace the entire array of characters with the variable we created.
            // Repeat and clear everything just in case!


            // Check if the second character in a row is also a percentage!
            if ((startPercentage == 1) && (message[i] != '%')) {
                startPercentage = 0;
                variableToReplace = [];
            }

            // When we find our first %: count it so then we start counting the finishing ones too, add up the increments!
            if (message[i] == '%') {
                if (startPercentage == 2) endPercentage++;
                else startPercentage++;
            }

            // We must write down the entire AMPScript variable so we can replace it later completely.
            if (startPercentage >= 1) variableToReplace.push(message[i]);

            // Right after we get that last percentage, close it off for writing down the variableToReplace.
            if (endPercentage == 2) {
                var stringToReplace;
                if (newString == null) stringToReplace = message;
                else stringToReplace = newString;

                // Replace the strings here!
                var replaceVar = variableToReplace.join("");
                newString = stringToReplace.replace(replaceVar, '{{Event.' + eventDefinitionKey + '.\"' + variableName.join("") + '\"}}')

                // Reset everything in case for another variable!
                startPercentage = 0;
                endPercentage = 0;
                variableName = [];
                variableToReplace = [];
            }

            if (startPercentage == 2 && message[i] != '%') {
                variableName.push(message[i]);
            }
        }

        return newString;
    }

    function findDefaultPhone(schema) {
        var keyForNumber;

        for (let i = 0; i < schema.length; i++) {
            if (keyForNumber != null || "") {
                break;
            }

            if (schema[i].type == "Phone") keyForNumber = schema[i].key;
        }

        return keyForNumber;
    }
});
Editor is loading...