Untitled
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...