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