Untitled
unknown
plain_text
2 years ago
11 kB
32
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...