// Сценарий отправляет на указанный адрес текст переписки с пользователем.
// Дополнительно к письму прикладываются файлы, выбранные оператором.
// Сценарий может быть использован как для отправки переписки самому пользователю так и для отправки письма в сторонний сервис.
//
// Настройки сценария
//
// Формат текста письма. Установите true для HTML и false для обычного текста.
установитьПеременную("formated_text", "true") +
// Максимальный размер файлов для отправки в качестве вложения. Сценарий сообщит о пропущенных файлах и оператору и получателю письма.
установитьПеременную("useUserEmail", "true") +
// Адрес отправителя
установитьПеременную("from_email", "noreply@autofaq.ai") +
// Предустановленная тема письма. Оператор сможет сменить тему перед отправкой письма.
установитьПеременную("subject", "Переписка с пользователем {userFullName}")+
//
// Адрес сервиса по отправке писем, встроенного в AutoFAQ
установитьПеременную("host", "http://porter/api/postman/mail") +
//дополнительные переменные
установитьПеременную("t1","false")+
установитьПеременную("t2","false")+
установитьПеременную("t3","false")+
установитьПеременную("t4","false")+
установитьПеременную("t5","false")+
//
// Основной код сценария
//
// Сценарий проверяет файлы в переписке
выполнитьJs("""
try {
var parsedExtFiles = JSON.parse(externalFiles);
} catch(e) {
var parsedExtFiles = [];
}
var numOfFiles = parsedExtFiles.length;
var filesUrl_01 = ''; var filesUrl_name_01 = '';var filesUrl_size_01 = '';
var filesUrl_02 = ''; var filesUrl_name_02 = '';var filesUrl_size_02 = '';
var filesUrl_03 = ''; var filesUrl_name_03 = '';var filesUrl_size_03 = '';
var filesUrl_04 = ''; var filesUrl_name_04 = '';var filesUrl_size_04 = '';
var filesUrl_05 = ''; var filesUrl_name_05 = '';var filesUrl_size_05 = '';
var idx = 0;
var contentIndex = 0;
if (numOfFiles > 5) {
numOfFiles = 5;
}
if (numOfFiles > 0) {
for (var i = 0; i < numOfFiles; i++) {
idx = idx + 1;
if (idx == 1) {filesUrl_01 = 'http://bot-platform-back:8090/api/files/' + JSON.parse(parsedExtFiles[i])['id'];filesUrl_name_01 =JSON.parse(parsedExtFiles[i])['name'];contentIndex = 1;filesUrl_size_01 = JSON.parse(parsedExtFiles[i])['size'];}
if (idx == 2) {filesUrl_02 = 'http://bot-platform-back:8090/api/files/' + JSON.parse(parsedExtFiles[i])['id'];filesUrl_name_02 =JSON.parse(parsedExtFiles[i])['name'];contentIndex = 2;filesUrl_size_02 = JSON.parse(parsedExtFiles[i])['size'];}
if (idx == 3) {filesUrl_03 = 'http://bot-platform-back:8090/api/files/' + JSON.parse(parsedExtFiles[i])['id'];filesUrl_name_03 =JSON.parse(parsedExtFiles[i])['name'];contentIndex = 3;filesUrl_size_03 = JSON.parse(parsedExtFiles[i])['size'];}
if (idx == 4) {filesUrl_04 = 'http://bot-platform-back:8090/api/files/' + JSON.parse(parsedExtFiles[i])['id'];filesUrl_name_04 =JSON.parse(parsedExtFiles[i])['name'];contentIndex = 4;filesUrl_size_04 = JSON.parse(parsedExtFiles[i])['size'];}
if (idx == 5) {filesUrl_05 = 'http://bot-platform-back:8090/api/files/' + JSON.parse(parsedExtFiles[i])['id'];filesUrl_name_05 =JSON.parse(parsedExtFiles[i])['name'];contentIndex = 5;filesUrl_size_05 = JSON.parse(parsedExtFiles[i])['size'];}
}
}
var exit = {'contentIndex': contentIndex, 'filesUrl_01':filesUrl_01, 'filesUrl_02':filesUrl_02, 'filesUrl_03':filesUrl_03, 'filesUrl_04':filesUrl_04, 'filesUrl_05':filesUrl_05, 'filesUrl_name_01':filesUrl_name_01, 'filesUrl_name_02':filesUrl_name_02, 'filesUrl_name_03':filesUrl_name_03, 'filesUrl_name_04':filesUrl_name_04, 'filesUrl_name_05':filesUrl_name_05, 'filesUrl_size_01': filesUrl_size_01, 'filesUrl_size_02':filesUrl_size_02,'filesUrl_size_03':filesUrl_size_03,'filesUrl_size_04':filesUrl_size_04,'filesUrl_size_05':filesUrl_size_05};
exit;
""") +
//отображаем список файлов для выбора
если("{contentIndex} > 0").то(
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "t1_txt",
значение = "{filesUrl_name_01} размер {filesUrl_size_01} b",
название = "",
тип = "Однострочный нередактируемый текст",
обязательное = false
) +
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "t1",
название = "",
тип = "Переключатель",
описание = "",
обязательное = false
)
)+
если("{contentIndex} > 1").то(
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "t2_txt",
значение = "{filesUrl_name_02} размер {filesUrl_size_02} b",
название = "",
тип = "Однострочный нередактируемый текст",
обязательное = false
) +
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "t2",
название = "",
тип = "Переключатель",
описание = "",
обязательное = false
)
)+
если("{contentIndex} > 2").то(
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "t3_txt",
значение = "{filesUrl_name_03} размер {filesUrl_size_03} b",
название = "",
тип = "Однострочный нередактируемый текст",
обязательное = false
) +
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "t3",
название = "",
тип = "Переключатель",
описание = "",
обязательное = false
)
)+
если("{contentIndex} > 3").то(
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "t4_txt",
значение = "{filesUrl_name_04} размер {filesUrl_size_04} b",
название = "",
тип = "Однострочный нередактируемый текст",
обязательное = false
) +
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "t4",
название = "",
тип = "Переключатель",
описание = "",
обязательное = false
)
)+
если("{contentIndex} == 5").то(
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "t5_txt",
значение = "{filesUrl_name_05} размер {filesUrl_size_05} b",
название = "",
тип = "Однострочный нередактируемый текст",
обязательное = false
) +
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "t5",
название = "",
тип = "Переключатель",
описание = "",
обязательное = false
)
)+
// Сценарий предустанавливает адрес получателя из данных пользователя или оставляет поле пустым
если("{useUserEmail} == true").то(
установитьПеременную("_email", "{userEmail}")
)+
// Сценарий собирает форму для сбора данных у пользователя - адрес и комментарий к письму
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "formName",
название = "",
значение = "Сценарий отправит электронное письмо с текстом переписки на указанный адрес. Выбранные файлы в переписке будут приложены к письму.",
тип = "Нередактируемый текст",
описание = "",
обязательное = false
) +
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "email",
значение = "{_email}",
название = "Укажите адрес email",
тип = "Однострочный редактируемый текст",
обязательное = true
) +
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "subject",
значение = "{subject}",
название = "Укажите тему письма",
тип = "Однострочный редактируемый текст",
обязательное = true
) +
добавитьПолеВФормуОператора(
форма = "Отправка текста переписки на электронную почт",
переменная = "comment",
значение = "",
название = "Комментарий к письму",
тип = "Многострочный редактируемый текст",
обязательное = false
) +
//
// Сценарий отображает форму для опроса оператора
показатьФормуОператору(имя = "Отправка текста переписки на электронную почт") +
//
//собирает выбранные вложения для отправки в письме
комментарий("{filesUrl_01}")+
выполнитьJs("""
var filesUrls = [];
if (t1 == 'true'){
filesUrls.push(filesUrl_01);
}
if (t2 == 'true'){
filesUrls.push(filesUrl_02);
}
if (t3 == 'true'){
filesUrls.push(filesUrl_03);
}
if (t4 == 'true'){
filesUrls.push(filesUrl_04);
}
if (t5 == 'true'){
filesUrls.push(filesUrl_05);
}
var exit = {'filesUrls' : filesUrls};
exit;
""")+
//
// Сценарий получает историю сообщений и формирует запрос на отправку письма
выполнитьJs("""
var rawText = '';
var msgTypes = ['Question', 'AnswerOperator', 'AnswerChatterbox','AnswerOperatorWithBot','AnswerOperator', 'AnswerBot'];
var labelMap = {
'Question': 'Пользователь:',
'AnswerOperator': 'Оператор:',
'AnswerBot': 'Бот:',
'AnswerChatterbox': 'Бот:',
'AnswerOperatorWithBot': 'Оператор:'
}
if (conversation.channelUser.fullName) {
if (conversation.channelUser.email) {
var line_1 = '<div>Переписка с пользователем <b>' + conversation.channelUser.fullName + '</b> (' + conversation.channelUser.email + ')</div>';
} else {
var line_1 = '<div>Переписка с пользователем <b>' + conversation.channelUser.fullName + '</b> (адрес EMAIL не зарегистрирован)</div>';
}
} else {
if (conversation.channelUser.email) {
var line_1 = '<div>Переписка с пользователем ' + conversation.channelUser.email + ' (ФИО не указано)</div>';
} else {
var line_1 = '<div>Переписка с неизвестным пользователем</div>'
}
}
if (conversation.messages.length > 0) {
var first_event = conversation.messages[0];
var line_2 = '<div>Дата начала диалога ' + first_event.ts.slice(8,10) + '.' + first_event.ts.slice(5,7) + '.' + first_event.ts.slice(0,4);
line_2 = line_2 + ' ' + first_event.ts.slice(11,13) + ':' + first_event.ts.slice(14,16) + '</div><br>';
} else {
var line_2 = '<div>Дата начала диалога не указана</div><br>';
}
if (comment == '' || comment == 'NaN') {
var line_3 = '<div>Оператор не оставил комментарий к переписке.</div>';
} else {
var line_3 = '<div><b>Комментарий оператора к переписке:</b> ' + comment + '</div>';
}
line_3 = line_3 + '<br>';
var messages = conversation.messages.filter(function (str) {return msgTypes.indexOf(str.tpe) > -1;});
for (var i = 0; i < messages.length; i++) {
var message = messages[i];
var label = labelMap[message.tpe] || '';
if (label) {
if (formated_text != 'true') {
clean_txt = message.txt.replace(/<a[^>]*href="([^"]+)"[^>]*>(?:.*?<\/a>)?/g, '$1').replace(/<\/?[^>]+(>|$)/g, "").replace(/(\r\n|\n|\r)/gm, '\n');
rawText = rawText + '\n' + message.ts.slice(11,16) + ' ' + label + '\n' + clean_txt;
} else {
clean_txt = message.txt.replace(/(\r\n|\n|\r)/gm, '');
rawText = rawText + '<div>' + message.ts.slice(11,16) + ' ' + label + '</div><div>' + clean_txt + '</div>';
}
}
}
if (rawText == '') {
var line_4 = '<div><b>Содержание переписки недоступно.</b></div>'
} else {
var line_4 = '<div><b>Содержание переписки</b></div>';
}
if (formated_text == 'true') {
var final_text = '<html><head></head><body>' + line_1 + line_2 + line_3 + line_4 + rawText + '</body></html>';
} else {
var final_text = line_1 + '\n' + line_2 + '\n' + line_3 + '\n\n' + line_4;
final_text = final_text.replace(/<\/?[^>]+(>|$)/g, "") + '\n' + rawText;
}
var request = {
from: from_email,
to: email,
subject: subject,
body: final_text,
files: JSON.parse(filesUrls)
}
var exit = {'request': JSON.stringify(request)};
exit;
""")+
//
// Сценарий отправляет запрос на формирование письма
вызвать.внешнийСервис("{host}", "POST").сЗаголовками(("Content-Type","application/json")).сТеломСообщения("{request}").сохранитьРезультатКакСтроку("answer")+
//
// Если сервис по отправке писем ответил ошибкой сценарий сообщает об этом пользователю и завершает работу
если("{http_code} > 202").то(
//если запрос завершен с ошибкой сценарий помещает в диалог соответствующий комментарий и завершает свою работу
комментарий("При отправке письма возникла ошибка {http_code} - {answer}")+
завершить
)+
//
// Если сервис по отправке писем успешно отправляет письмо то сценарий сообщает об отправке и завершает свою работу
комментарий("Письмо с перепиской отправлено на адрес {email}") +
завершить |