- Created by Aleksandr Pletnev, last modified on Feb 10, 2021
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 8 Next »
Вызов внешнего сервиса и разбор ответа в JS
установитьПеременную("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}")+ завершить
Создание заявки в ITSM системе с использованием данных пользователя для динамического заполнения необходимых полей на примере Jira (Запуск интеграции по кнопке)
// Адрес 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 )+ завершить
Создание заявки через SOAP XML запрос
// заполнение переменных чата по результатам // назначение ответственного на заявку // обновление переменных чата по итогам установитьПеременную("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}")+ завершить
Форма с использованием полей различных типов (Запуск интеграции по кнопке)
комментарий("Запуск интеграции по кнопке.")+ установитьПеременнуюВДиалог("Поле 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}")+ комментарий("Конец сценария интеграции!")
Приветствие пользователя с интерактивным меню
задатьПользователюВопрос("Здравствуйте 😊<br>Что Вас интересует?").сВариантамиОтвета("Первое","Второе","Компот").сохранитьРезультат("userChoice")+ если("{userChoice} == Первое").то(завершитьСНовымЗапросом("Первые блюда"))+ если("{userChoice} == Второе").то(завершитьСНовымЗапросом("Вторые блюда"))+ если("{userChoice} == Компот").то(завершитьСШаблоном("Закончился. Всего хорошего!"))+ завершить
Индивидуальное приветствие пользователей для каждого канала или типа каналов (социальных сетей \ мессенджеров)
если("{channelType} == Telegram").то(сообщениеПользователю.сШаблоном("Добро пожаловать в наш Telegram"))+ если("{channelId} == 2f7ce72f-8003-4e17-b879-e3c71f239149").то(сообщениеПользователю.сШаблоном("Здравствуйте!"))+ завершить
- No labels