- Created by Aleksandr Pletnev, last modified by Vlad Belyaev on Mar 26, 2021
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 18 Next »
установитьПеременную("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}")+ завершить
// Пример сценария опроса оператора с заполнением метаданных пользователя // Сценарий предназначен для подключения в Интеграцию на событие "Нажата кнопка оператора" установитьПеременную("_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 )+ завершить
// заполнение переменных чата по результатам // назначение ответственного на заявку // обновление переменных чата по итогам установитьПеременную("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}")+ комментарий("Конец сценария интеграции!")
// Пример сценария опроса оператора с заполнением метаданных пользователя // Сценарий предназначен для подключения в Интеграцию на событие "Нажата кнопка оператора" // После установки переменных новые данные отправляются в 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 )+ завершить
задатьПользователюВопрос("Здравствуйте 😊<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))
см пример из Использование SQL запросов
установитьПеременную("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, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'") } 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}") завершить
Принцип работы: для перемещения по меню пользователь вводит названия нужных документов в базах знаний. С помощью команды “задатьПользователюВопрос“ можно сделать процесс ввода текста более удобным и понятным.
В качестве приветствия будем использовать сценарий:
сообщениеПользователю.сШаблоном("Добро пожаловать в наш магазин")+завершитьСНовымЗапросом("Меню")
Таким образом все пользователи изначально будут попадать в наше меню
Создадим новую базу знаний. Для удобства назовем ее “Меню“
Добавим документ-сценарий с именем “Главное меню“ и вопросом “меню“ задатьПользователюВопрос("Для уточнения информации выберите раздел").сВариантамиОтвета("Смартфоны","Планшеты","Аксессуары","Другие вопросы").сохранитьРезультат("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}")+ завершить
- No labels