/
Примеры сценариев (старая версия)

Примеры сценариев (старая версия)

Диалоговые сценарии

установитьПеременную("baseURL", "https://swapi.dev/api") + вызвать.внешнийСервис("{baseURL}/people/1/", "GET").сЗаголовками(("Content-Type", "application/json")).сохранитьРезультатКакСтроку("results")+ выполнитьJs(""" var result = JSON.parse(results); var exit = {'name':result.name, 'gender':result.gender}; exit; """)+ сообщениеПользователю.сШаблоном("name {name}<br>gender {gender}")+ завершить

Интеграционные сценарии для кнопок “Действия” операторов

установитьПеременную("host", "https://api.sendgrid.com/v3/mail/send")+ установитьПеременную("token", "token")+ установитьПеременную("from_email", "noreply@autofaq.ai")+ установитьПеременную("from_name", "autofaq")+ установитьПеременную("subject", "Переписка с пользователем {userFullName}")+ установитьПеременную("user_info", "Пользователь:\n{userFullName}")+ // Получаем историю сообщений выполнитьJs(""" var messages = conversation.messages.filter(function (str) {return ['Question', 'AnswerOperator'].indexOf(str.tpe) != -1}); var msg_history = ''; messages.forEach(function (item, i, arr) { msg_history += ((i > 0) ? '\n\n':'') + ((item.tpe == 'Question') ? 'Клиент:' : 'Оператор:') + '\n' + item.txt.replace(/<\/?[^>]+(>|$)/g, ""); }); var exit = {'msg_history':msg_history}; exit; """)+ // Собираем поля для формы оператора // Добавляем текстовое поле для отображения информации добавитьПолеВФормуОператора( форма = "Отправить на Email", переменная = "formName", название = "Действие:", значение = "Отправка сообщения на Email", тип = "Нередактируемый текст", описание = "", обязательное = false )+ // добавитьПолеВФормуОператора( форма = "Отправить на Email", переменная = "email", название = "Email", значение = "xxx@gmail.com", тип = "Однострочный редактируемый текст", обязательное = true )+ // добавитьПолеВФормуОператора( форма = "Отправить на Email", переменная = "comment", название = "Комментарий", тип = "Многострочный редактируемый текст", значение = "", обязательное = false )+ // Показываем форму оператору, пока оператор не закроет форму сценарий ждет // если оператор нажмет в форме Отмена - сценарий остановится показатьФормуОператору(имя = "Отправить на Email")+ // отправка запроса вызвать.внешнийСервис("{host}", "POST").сЗаголовками(("Authorization", "{token}"),("Content-Type","application/json")).сТеломСообщения("{\"personalizations\":[{\"to\":[{\"email\":\"{email}\",\"name\":\"{userFullName}\"}],\"subject\":\"{subject}\"}],\"content\": [{\"type\": \"text/plain\", \"value\": \"Комментарий оператора:\\n{comment}\\n\\n{user_info}\\n\\nИстория сообщений:\\n{msg_history}\"}],\"from\":{\"email\":\"{from_email}\",\"name\":\"{from_name}\"},\"reply_to\":{\"email\":\"{from_email}\",\"name\":\"{from_name}\"}}").сохранитьРезультат()+ // обработка ошибок если("{http_code} > 202").то( //если запрос завершен с ошибкой сценарий помещает в диалог соответствующий комментарий и завершает свою работу комментарий("При запросе возникла ошибка {http_code}, обратитесь к системному администратору")+ завершить )+ // помещаем комментарий в диалог об успешной регистрации инцидента комментарий("Сообщение отправлено на {email}")

В качестве тегов можно использовать функцию “установитьПеременнуюВДиалог“ с типом “Выпадающий список“

установитьПеременнуюВДиалог( ключ = "priority", значение = "", название = "Выберите тег", редактируемое = true, показыватьОператору = true, обязательное = true, множественныйВыбор = true, тип = "Выпадающий список", варианты = "{\"Тег 1\": \"t1\", \"Тег 2\": \"t2\"}" )+ завершить
// Пример сценария опроса оператора с заполнением метаданных пользователя // Сценарий предназначен для подключения в Интеграцию на событие "Нажата кнопка оператора" установитьПеременную("_email", "{userPayload.Email}")+ // Собираем поля для формы оператора // Добавляем текстовое поле для отображения информации добавитьПолеВФормуОператора( форма = "Обновление данных пользователя", переменная = "formName", название = "", значение = "Укажите новые значение или сотрите старые", тип = "Нередактируемый текст", описание = "", обязательное = false ) + // Добавляем поля пользователя добавитьПолеВФормуОператора( форма = "Обновление данных пользователя", переменная = "_email", название = "Email", тип = "Однострочный редактируемый текст", описание = "Email пользователя", обязательное = true ) + // показываем форму оператору, пока оператор не закроет форму сценарий ждет // если оператор нажмет в форме Отмена - сценарий остановится показатьФормуОператору(имя = "Обновление данных пользователя") + комментарий("Обовлены данные пользователя")+ установитьПеременнуюПользователю("userPayload.Email", "{_email}")+ завершить
// Адрес API ITSM системы - получить у администратора системы установитьПеременную("jira_host", "https://ххххххх.atlassian.net/rest/api/2/issue/")+ установитьПеременную("tags", "{\"Bug\": \"Проблема\", \"2\": \"Задача\", \"3\": \"Комментарий\", \"4\": \"Прочее\"}") + // Собираем поля для формы оператора // Добавляем текстовое поле для отображения информации добавитьПолеВФормуОператора( форма = "Обновление заявки", переменная = "formName", название = "Действие:", значение = "Регистрация нового инцидента", тип = "Нередактируемый текст", описание = "", обязательное = false ) + // Добавляем обязательное поле для резюме, форма сохранит введенный текст в переменную summary // Для подставновки ФИО пользователя используем переменную userFullName добавитьПолеВФормуОператора( форма = "Обновление заявки", переменная = "summary", название = "Резюме", значение = "Заявка для {userFullName}", тип = "Однострочный редактируемый текст", обязательное = true ) + // Добавляем обязательное поле для описания, форма сохранит введенный текст в переменную description // Для подставновки логина пользователя используем переменную userLogin // Чтобы ускорить процесс добавим вопрос пользователя к описанию с помощью переменной platformInMessageQuery добавитьПолеВФормуОператора( форма = "Обновление заявки", переменная = "description", название = "Описание заявки", тип = "Многострочный редактируемый текст", описание = "Опишите вашу проблему", значение = "Пользователь: {userFullName} логин: {userLogin} сообщает: {platformInMessageQuery}", обязательное = true ) + // Добавляем обязательное поле для выбора тега из списка тегов tags, сохранит выбранное значение в переменную tag добавитьПолеВФормуОператора( форма = "Обновление заявки", переменная = "issuetype", название = "Тег", тип = "Выпадающий список", описание = "Выберите из списка критичность заявки", обязательное = true, варианты = "{tags}" ) + // показываем форму оператору, пока оператор не закроет форму сценарий ждет // если оператор нажмет в форме Отмена - сценарий остановится показатьФормуОператору(имя = "Обновление заявки") + // отправка запроса на регистрацию инцидента в соответствии с выбранными значениями вызвать.внешнийСервис("{jira_host}", "POST").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8"),("Authorization", "Basic YWFwbGV0bjFAZ21haWwuY25IUUdmR05VRGdFOXlTMkhuRkE3RA==")).сТеломСообщения("{\"fields\":{\"project\":{\"key\":\"INT\"},\"summary\":\"{summary}\",\"description\":\"{description}\",\"issuetype\":{\"name\":\"{issuetype}\"}}}").сохранитьРезультат(("id","ticketid"),("key","key"),("self","link"))+ // обработка ошибок если("{http_code} != 201").то( // если запрос завершен с ошибкой сценарий помещает в диалог соответствующий комментарий и завершает свою работу комментарий("При запросе на регистрацию инцидента возникла ошибка {http_code}, обратитесь к системному администратору")+ завершить )+ // помещаем комментарий в диалог об успешной регистрации инцидента комментарий("Зарегистрирован инцидент: заявка {link}")+ // добавляем переменную чата со ссылкой на инцидент, переменная отобразится в боковой панели оператора без возможности редактирования установитьПеременнуюВДиалог( ключ = "linkJira", значение = "{link}", название = "Ссылка на Jira", показыватьОператору = true, редактируемое = false, обязательное = false, тип = "Текст" )+ установитьПеременнуюВДиалог( ключ = "incNum", значение = "{key}", название = "Инцидент №", тип = "Текст", показыватьОператору = true, обязательное = false, редактируемое = false )+ завершить

 

комментарий("Запуск интеграции по кнопке.")+ установитьПеременнуюВДиалог("Поле 2", значение = "Field 2", название = "Поле 2", показыватьОператору = true, обязательное = true, редактируемое = false)+ установитьПеременную("priority", "{\"v1\": \"Blocker\", \"v2\": \"Critical\", \"v3\": \"Major\", \"v4\": \"Minor\"}") + добавитьПолеВФормуОператора( форма = "Заведение заявки в Jira", переменная = "t1", название = "Что вам нужно сделать: ", тип = "Нередактируемый текст", значение = "Заполните форму" ) + добавитьПолеВФормуОператора( форма = "Заведение заявки в Jira", переменная = "t2", название = "Название заявки", тип = "Однострочный редактируемый текст", описание = "Введите название заводимой заявки", значение = "Введите", обязательное = true ) + добавитьПолеВФормуОператора( форма = "Заведение заявки в Jira", переменная = "t3", название = "Критичность", тип = "Выпадающий список", описание = "Выберите из списка критичность заявки", обязательное = true, значение = "v3", варианты = "{priority}" ) + добавитьПолеВФормуОператора( форма = "Заведение заявки в Jira", переменная = "t4", название = "Описание", тип = "Многострочный редактируемый текст", описание = "Опишите вашу проблему", обязательное = true ) + добавитьПолеВФормуОператора( форма = "Заведение заявки в Jira", переменная = "t5", название = "Уведомить руководителя?", тип = "Переключатель", обязательное = false ) + установитьПеременную("tags", "{\"v1\": \"Teacher\", \"v2\": \"Student\", \"v3\": \"Sales\", \"v4\": \"Tech\"}") + добавитьПолеВФормуОператора( форма = "Заведение заявки в Jira", переменная = "t6", название = "Теги", тип = "Множественный выбор", описание = "Выберите теги, которыми пометить обращение", варианты = "{tags}", обязательное = true ) + добавитьПолеВФормуОператора( форма = "Заведение заявки в Jira", переменная = "t7", тип = "Целое число", название = "Частота возникновения проблемы", описание = "% пользователей, у которых возникает проблема" ) + показатьФормуОператору(имя = "Заведение заявки в Jira") + комментарий("Вот что у нас получилось: {t2}, {t3}, {t4}")+ комментарий("Конец сценария интеграции!")
// Пример сценария опроса оператора с заполнением метаданных пользователя // Сценарий предназначен для подключения в Интеграцию на событие "Нажата кнопка оператора" // После установки переменных новые данные отправляются в CRM и сохраняются в профиле пользователя в АФ // установитьПеременную("host", "http://xxxx")+ установитьПеременную("_height", "{userPayload.Рост}")+ установитьПеременную("_weight", "{userPayload.Вес}")+ установитьПеременную("_typeNum", "{userPayload.Тип}")+ установитьПеременную("_comment", "{userPayload.Комментарий}")+ // Списки вариантов тегов установитьПеременную("types", "{\"Ученик\": \"Ученик\", \"Лид\": \"Лид\", \"Преподаватель\": \"Преподаватель\", \"Прочее\": \"Прочее\"}") + // Собираем поля для формы оператора // Добавляем текстовое поле для отображения информации добавитьПолеВФормуОператора( форма = "Обновление данных пользователя", переменная = "formName", название = "", значение = "Укажите новые значение или сотрите старые", тип = "Нередактируемый текст", описание = "", обязательное = false ) + // Добавляем поля пользователя добавитьПолеВФормуОператора( форма = "Обновление данных пользователя", переменная = "_height", название = "Рост", тип = "Целое число", описание = "Рост пользователя, см", обязательное = false ) + добавитьПолеВФормуОператора( форма = "Обновление данных пользователя", переменная = "_weight", название = "Вес", тип = "Целое число", описание = "Вес пользователя, кг", обязательное = false ) + добавитьПолеВФормуОператора( форма = "Обновление данных пользователя", переменная = "_type", название = "Тип", тип = "Выпадающий список", описание = "Выберите из списка тип пользователя", обязательное = false, варианты = "{types}" ) + добавитьПолеВФормуОператора( форма = "Обновление данных пользователя", переменная = "_comment", название = "Комментарий", тип = "Многострочный редактируемый текст", описание = "Комменатрий к пользователю", обязательное = false ) + // показываем форму оператору, пока оператор не закроет форму сценарий ждет // если оператор нажмет в форме Отмена - сценарий остановится показатьФормуОператору(имя = "Обновление данных пользователя") + // отправка запроса на регистрацию инцидента в соответствии с выбранными значениями вызвать.внешнийСервис("{host}", "POST").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8")).сТеломСообщения("{\"name\":\"{userFullName}\",\"type\":\"{_type}\",\"weight\":\"{_weight}\",\"comment\":\"{_comment}\",\"height\":\"{_height}\"}").сохранитьРезультатКакСтроку("answer")+ // обработка ошибок если("{http_code} != 200").то( // если запрос завершен с ошибкой сценарий помещает в диалог соответствующий комментарий и завершает свою работу комментарий("Данные пользователя не обновлены. При запросе на регистрацию данных пользователя возникла ошибка {http_code}, обратитесь к системному администратору")+ завершить )+ комментарий("Обовлены данные пользователя. Новые данные отправлены в CRM")+ установитьПеременнуюПользователю("userPayload.Рост", "{_height}")+ установитьПеременнуюПользователю("userPayload.Вес", "{_weight}")+ установитьПеременнуюПользователю("userPayload.Тип", "{_type}")+ установитьПеременнуюПользователю("userPayload.Комментарий", "{_comment}")+ установитьПеременнуюВДиалог( ключ = "user_chat", значение = "{_comment}", название = "Редактируемый комментарий", тип = "Текст", показыватьОператору = true, обязательное = false, редактируемое = true )+ завершить

Сценарии для модуля Приветствие

Реализован для Московского времени, где +3 GMT, переменная HourOffset

установитьПеременную("HourOffset", "3")+ установитьПеременную("startHour", "9")+ установитьПеременную("endHour", "22")+ выполнитьJs(""" var serverTime = new Date(); var serverTimeStamp = serverTime.getTime(); var timeZoneOffset = serverTime.getTimezoneOffset(); var currentTimeStamp = serverTimeStamp + (parseInt(HourOffset) * 3600000) - (timeZoneOffset * 60000); var currentDate = new Date(currentTimeStamp); var currentHour = parseInt(currentDate.getHours()); var start = parseInt(startHour); var stop = parseInt(endHour); if (currentHour >= start && currentHour < stop) { var workTime = 1; } else { var workTime = 0; } var exit = {'workTime':workTime}; exit; """) + если("{platformInMessageQuery} == /start").и("{workTime} == 0").то( комментарий("Это присоединение к боту в нерабочее время")+ сообщениеПользователю.сШаблоном("Сейчас служба поддержки не работает. Просим писать нам с {startHour}:00 по {endHour}:00 МСК.<br>Unfortunately you contacted us outside of our support service hours. We will reply to you in the morning. Thank you for waiting.")+ завершитьИЗакрытьДиалог() )+ если("{platformInMessageQuery} == /start").и("{workTime} == 1").то( комментарий("Это присоединение к боту в рабочее время")+ сообщениеПользователю.сШаблоном("Чем могу вам помочь?<br>How can I help you?")+ завершитьИЗакрытьДиалог() )+ запросВБазыЗнаний("{platformInMessageQuery}", "botKnows")+ если("{botKnows} == true").то( комментарий("Бот знает ответ, продолжаем не взирая на график.")+ завершитьСНовымЗапросом("{platformInMessageQuery}") )+ если("{workTime} == 0").то( комментарий("Мой график работы с {startHour} по {endHour} по МСК. Сейчас {currentHour} часов - я не работаю.")+ сообщениеПользователю.сШаблоном("Сейчас служба поддержки не работает. Просим писать нам с {startHour}:00 по {endHour}:00 МСК.<br>Unfortunately you contacted us outside of our support service hours. We will reply to you in the morning. Thank you for waiting.")+ завершитьСНовымЗапросом("{platformInMessageQuery}") )+ комментарий("Мой график работы с {startHour} по {endHour} по МСК. Сейчас я работаю.")+ завершитьСНовымЗапросом("{platformInMessageQuery}")
задатьПользователюВопрос("Здравствуйте 😊<br>Что Вас интересует?").сВариантамиОтвета("Первое","Второе","Компот").сохранитьРезультат("userChoice")+ если("{userChoice} == Первое").то(завершитьСНовымЗапросом("Первые блюда"))+ если("{userChoice} == Второе").то(завершитьСНовымЗапросом("Вторые блюда"))+ если("{userChoice} == Компот").то(завершитьСШаблоном("Закончился. Всего хорошего!"))+ завершитьСНовымЗапросом("{userChoice}")
если("{channelType} == Telegram").то(сообщениеПользователю.сШаблоном("Добро пожаловать в наш Telegram"))+ если("{channelId} == 2f7ce72f-8003-4e17-b879-e3c71f239149").то(сообщениеПользователю.сШаблоном("Здравствуйте!"))+ завершитьСНовымЗапросом("{platformInMessageQuery}")
если("{channelType} == Telegram").то(сообщениеПользователю.сШаблоном("Добро пожаловать в наш Telegram"))+ если("{channelId} == 2f7ce72f-8003-4e17-b879-e3c71f239149").то( // Запоминаем запрос пользователя в переменную message, чтобы продолжить работу в случае успеха установитьПеременную("message","{platformInMessageQuery}")+ сообщениеПользователю.сШаблоном("Здравствуйте!")+ задатьПользователюВопрос("Введите пароль").сохранитьРезультат("password")+ // Перейти на проверку пароля перейтиНаМетку("проверка"))+ // После проверки всех условий продолжаем работу с пользователем повторив его запрос завершитьСНовымЗапросом("{platformInMessageQuery}")+ // Проверка пароля установитьМетку("проверка")+ если("{password} == valid_password").то(сообщениеПользователю.сШаблоном("Успех! Можете продолжить работу в системе")+завершитьСНовымЗапросом("{message}"))+ если("{password} != valid_password").то(сообщениеПользователю.сШаблоном("Ошибка! Попробуйте еще раз")+повторитьСШага(6))

Принцип работы: для перемещения по меню пользователь вводит названия нужных документов в базах знаний. С помощью команды “задатьПользователюВопрос“ можно сделать процесс ввода текста более удобным и понятным.

 

В качестве приветствия будем использовать сценарий:

сообщениеПользователю.сШаблоном("Добро пожаловать в наш магазин")+завершитьСНовымЗапросом("Меню")

Таким образом все пользователи изначально будут попадать в наше меню

 

Создадим новую базу знаний. Для удобства назовем ее “Меню“

Добавим документ-сценарий с именем “Главное меню“ и вопросом “меню“

задатьПользователюВопрос("Для уточнения информации выберите раздел").сВариантамиОтвета("Смартфоны","Планшеты","Аксессуары","Другие вопросы").сохранитьРезультат("userChoice")+ если("{userChoice} == Смартфоны").то(завершитьСНовымЗапросом("Смартфоны"))+ если("{userChoice} == Планшеты").то(завершитьСНовымЗапросом("Планшеты"))+ если("{userChoice} == Аксессуары").то(завершитьСНовымЗапросом("Аксессуары"))+ завершитьСНовымЗапросом("{userChoice}")

Добавим документ-сценарий с именем “Смартфоны“ и вопросом “Смартфоны“. Он будет являться каталогом смартфонов. Для удобства можно создать отдельную базу знаний

задатьПользователюВопрос("Выберите смартфон").сВариантамиОтвета("Смартфон_1","Смартфон_2","Смартфон_3", "Меню").сохранитьРезультат("userChoice")+ если("{userChoice} == Смартфон_1").то(завершитьСНовымЗапросом("Смартфон_1"))+ если("{userChoice} == Смартфон_2").то(завершитьСНовымЗапросом("Смартфон_2"))+ если("{userChoice} == Смартфон_3").то(завершитьСНовымЗапросом("Смартфон_3"))+ если("{userChoice} == Меню").то(завершитьСНовымЗапросом("Меню"))+ завершитьСНовымЗапросом("{userChoice}")

 

Добавим документ-сценарий с именем “Смартфон_1“ и вопросом “Смартфон_1“. В данном документе можно разместить фото и описание отдельно взятого смартфона

сообщениеПользователю.сФайлами(852).сШаблоном("")+ задатьПользователюВопрос("Оченю хороший смартфон").сВариантамиОтвета("Позвать оператора","Назад","Меню").сохранитьРезультат("userChoice")+ если("{userChoice} == Позвать оператора").то(завершитьИПеревестиНаОператора)+ если("{userChoice} == Назад").то(завершитьСНовымЗапросом("Смартфоны"))+ если("{userChoice} == Меню").то(завершитьСНовымЗапросом("Меню"))+ завершитьСНовымЗапросом("{userChoice}")

 

Для других пунктов меню необходимо проделать ту же самую процедуру

 

База знаний “Меню“ с созданными документами

 

Пример работы

 

Прочие сценарии

выполнитьJs(""" var answers = conversation.answers.filter(function (str) {return str.serviceId > 0;}); var topicSet = []; for (var i = 0; i < answers.length; i++) { var topic = answers[i]['autofaqServiceTitle']; if (topicSet.indexOf(topic) < 0) {topicSet.push(topic);} } var exit = {'topics':JSON.stringify(topicSet)}; exit; """)+ комментарий("{topics}")+ завершить
установитьПеременную("id", "42")+ установитьПеременную("requestxml", "<request ID=\"{id}\" reqType=\"BALANCE\"/>")+ вызвать.внешнийСервис("https://account/api/query", "POST").сЗаголовками(("Content-Type", "text/xml;charset=UTF-8"),("Accept", "text/xml"), ("Authorization", "Basic PASSWORD")).сТеломСообщения("{requestxml}").сохранитьРезультатКакСтроку("formResponse")+ выполнитьJs(""" function escapeHtml(text) { return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;") } var exit = {} try { // remove <?xml ... ?> header formResponse = formResponse.replace(/<\?xml.+\?>|<!DOCTYPE.+]>/, '') // parse XML var parser = new marknote.Parser(); var doc = parser.parse(formResponse); // extract info exit.accountBalance = doc.getRootElement().getAttributeValue('accountBalance'); exit.formResponseHTML = escapeHtml(formResponse); } catch(e) { exit.error = 'error' + JSON.stringify({message: e.message, stack: e.stack}); } exit; """) + комментарий("{error}") + // комментарий("formResponseHTML: {formResponseHTML}") + завершитьСШаблоном("Балланс: {accountBalance}") завершить
// заполнение переменных чата по результатам // назначение ответственного на заявку // обновление переменных чата по итогам установитьПеременную("IntegrationSign", "Accident") + установитьПеременную("ContactCompany", "Блок платформ") + установитьПеременную("ServiceName", "Сервис") + установитьПеременную("IncidentType", "Incident") + установитьПеременную("Priority", "Medium") + установитьПеременную("Urgency", "Regular") + установитьПеременную("Description", "{platformInMessageQuery}") + установитьПеременную("DetailedDescription", "Тестовый инцидент, просьба закрыть") + установитьПеременную("Action", "CREATE") + установитьПеременную("Company", "Компания") + установитьПеременную("Organization", "Организация") + установитьПеременную("Group", "Группа") + установитьПеременную("GroupID", "26514") + установитьПеременную("RequesterFullName", "?") + установитьПеременную("RequesterLogin", "?") + установитьПеременную("host", "http://Х.Х.Х.Х/arsys/services/ARService") + выполнитьJs(""" var getClientInfoTemplate = <<EOF <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:RTL:HPD:IncidentCreate"> <soapenv:Header> <urn:AuthenticationInfo> <urn:userName>autofaq.intergration</urn:userName> <urn:password>.g!e:BI_qZdh</urn:password> <!--Optional:--> <urn:authentication>?</urn:authentication> <!--Optional:--> <urn:locale>?</urn:locale> <!--Optional:--> <urn:timeZone>?</urn:timeZone> </urn:AuthenticationInfo> </soapenv:Header> <soapenv:Body> <urn:CreateNewIncident> <urn:Integration_Sign>${IntegrationSign}</urn:Integration_Sign> <urn:Contact_Company>${ContactCompany}</urn:Contact_Company> <urn:ServiceCI>${ServiceName}</urn:ServiceCI> <urn:Incident_Type>${IncidentType}</urn:Incident_Type> <urn:Priority>${Priority}</urn:Priority> <urn:Urgency>${Urgency}</urn:Urgency> <urn:Description>${Description}</urn:Description> <urn:Detailed_Decription>${DetailedDescription}</urn:Detailed_Decription> <urn:z1D_Action>${Action}</urn:z1D_Action> <urn:Company>${Company}</urn:Company> <urn:Organization>${Organization}</urn:Organization> <urn:Group>${Group}</urn:Group> <urn:GroupID>${GroupID}</urn:GroupID> <urn:RequesterFullName>${RequesterFullName}</urn:RequesterFullName> <urn:RequestreLogin>${RequesterLogin}</urn:RequestreLogin> </urn:CreateNewIncident> </soapenv:Body> </soapenv:Envelope> EOF var exit = {'getClientInfoRqEncoded': getClientInfoTemplate.replace(/(\r\n|\n|\r)/gm,'')}; exit; """)+ вызвать.внешнийСервис("{host}", "POST").сЗаголовками(("Content-Type", "text/xml;charset=UTF-8"),("SOAPAction","RTL:HPD:IncidentCreate")).сПараметрами(("server","skuf-ar"),("webService","RTL:HPD:IncidentCreate")).сТеломСообщения("{getClientInfoRqEncoded}").сохранитьРезультатКакСтроку("getClientInfoRs")+ комментарий("Запрос со статусом {http_code}")+ выполнитьJs(""" var parser = new marknote.Parser(); var doc = parser.parse(getClientInfoRs); var error = 0; var incNum = ''; var incDate = ''; var faultstring = ''; try { incNum = doc.getRootElement().getChildElement("ns0:CreateNewIncidentResponse").getChildElement("ns0:Request_ID").getText(); incDate = doc.getRootElement().getChildElement("ns0:CreateNewIncidentResponse").getChildElement("ns0:Create_Date").getText(); } catch(e) { error = 1; } try { faultstring = doc.getRootElement().getChildElement("soapenv:Fault").getChildElement("faultstring").getText(); } catch(e) { faultstring = ''; } var exit = {'error': error, 'faultstring': faultstring, 'incDate':incDate, 'incNum':incNum}; exit; """)+ если("{http_code} > 210").то(комментарий("Возникла ошибка при создании инцидента: {http_code}, {faultstring}")+ установитьПеременнуюВДиалог("a_incNum",значение = "-", название = "Номер инцидента", показыватьОператору = true, обязательное = false, редактируемое = false)+ установитьПеременнуюВДиалог("b_incDate",значение = "-", название = "Дата инцидента", показыватьОператору = true, обязательное = false, редактируемое = false)+ установитьПеременнуюВДиалог("c_incComment",значение = "", название = "Причина закрытия", показыватьОператору = true, обязательное = false, редактируемое = true)+ завершить)+ если("{error} == 1").то(комментарий("Возникла ошибка при создании инцидента. {faultstring}")+ установитьПеременнуюВДиалог("a_incNum",значение = "-", название = "Номер инцидента", показыватьОператору = true, обязательное = false, редактируемое = false)+ установитьПеременнуюВДиалог("b_incDate",значение = "-", название = "Дата инцидента", показыватьОператору = true, обязательное = false, редактируемое = false)+ установитьПеременнуюВДиалог("c_incComment",значение = "", название = "Причина закрытия", показыватьОператору = true, обязательное = false, редактируемое = true)+ завершить)+ комментарий("Создан инцидент {incNum} от {incDate}")+ установитьПеременнуюВДиалог("a_incNum",значение = "{incNum}", название = "Номер инцидента", показыватьОператору = true, обязательное = false, редактируемое = false)+ установитьПеременнуюВДиалог("b_incDate",значение = "{incDate}", название = "Дата инцидента", показыватьОператору = true, обязательное = false, редактируемое = false)+ установитьПеременнуюВДиалог("c_incComment",значение = "", название = "Причина закрытия", показыватьОператору = true, обязательное = true, редактируемое = true)+ установитьПеременнуюВДиалог("d_incStatus",значение = "-", название = "Статус инцидента", показыватьОператору = true, обязательное = false, редактируемое = false)+ установитьПеременнуюВДиалог("e_incPriority",значение = "-", название = "Приоритет инцидента", показыватьОператору = true, обязательное = false, редактируемое = false)+ установитьПеременнуюВДиалог("f_incUrgency",значение = "-", название = "Срочность инцидента", показыватьОператору = true, обязательное = false, редактируемое = false)+ установитьПеременнуюВДиалог("g_incAssignedGroup",значение = "-", название = "Назначенная группа", показыватьОператору = true, обязательное = false, редактируемое = false)+ // регистрация ответственного установитьПеременную("Assignee", "Иванов") + установитьПеременную("AssigneeLogin", "e.ivanov") + выполнитьJs(""" var setGroupTemplate = <<EOF <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:RTL:HPD:IncidentCreate"> <soapenv:Header> <urn:AuthenticationInfo> <urn:userName>autofaq.intergration</urn:userName> <urn:password>.g!e:BI_qZdh</urn:password> <!--Optional:--> <urn:authentication>?</urn:authentication> <!--Optional:--> <urn:locale>?</urn:locale> <!--Optional:--> <urn:timeZone>?</urn:timeZone> </urn:AuthenticationInfo> </soapenv:Header> <soapenv:Body> <urn:SetGroup> <!--Optional:--> <urn:Company>${Company}</urn:Company> <!--Optional:--> <urn:Organization>${Organization}</urn:Organization> <!--Optional:--> <urn:Group>${Group}</urn:Group> <!--Optional:--> <urn:GroupID>${GroupID}</urn:GroupID> <!--Optional:--> <urn:Incident_Number>{incNum}</urn:Incident_Number> <!--Optional:--> <urn:Assignee>${Assignee}</urn:Assignee> <!--Optional:--> <urn:AssigneeLogin>${AssigneeLogin}</urn:AssigneeLogin> </urn:SetGroup> </soapenv:Body> </soapenv:Envelope> EOF var exit = {'setGroupEncoded': setGroupTemplate.replace(/(\r\n|\n|\r)/gm,'')}; exit; """)+ вызвать.внешнийСервис("{host}", "POST").сЗаголовками(("Content-Type", "text/xml;charset=UTF-8"),("SOAPAction","RTL:HPD:IncidentCreate")).сПараметрами(("server","skuf-ar"),("webService","RTL:HPD:IncidentCreate")).сТеломСообщения("{setGroupEncoded}").сохранитьРезультатКакСтроку("responseSetGroupEncoded")+ выполнитьJs(""" var parser = new marknote.Parser(); var doc = parser.parse(responseSetGroupEncoded); var updateError = 0; var updaredIncNum = ''; var updateFaultstring = ''; try { updaredIncNum = doc.getRootElement().getChildElement("ns0:SetGroupResponse").getChildElement("ns0:Incident_Type").getText(); } catch(e) { updateError = 1; } try { updateFaultstring = doc.getRootElement().getChildElement("soapenv:Fault").getChildElement("faultstring").getText(); } catch(e) { updateFaultstring = ''; } var exit = {'updateError': updateError, 'updateFaultstring': updateFaultstring, 'updaredIncNum':updaredIncNum}; exit; """)+ если("{http_code} > 210").то(комментарий("Возникла ошибка при назначении ответственного: {http_code}, {faultstring}")+ завершить)+ если("{updateError} == 1").то(комментарий("Возникла ошибка при назначении ответственного: {faultstring}")+ завершить)+ комментарий("Назначен отвественный {Assignee}, группа {Group}")+ завершить

Related content