Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Expand
titleНажмите здесь, чтобы развернуть пример сценария
Code Block
//
// Сценарий проверяет наличие ответа и если ответа нет то предлагает пользователю меню запросов
// 
// Проверка наличия ответа на запрос в базах знаний
запросВБазыЗнаний("{platformInMessageQuery}", "botKnows")+
//
// В базе знаний есть ответ, сценарий передает запрос в базу знаний
если("{botKnows} == true").то(	
	завершитьСНовымЗапросом("{platformInMessageQuery}")
)+
//
// В базе знаний нет прямого ответа на запрос, сценарий предлагает выбрать из готовых вариантов
задатьПользователюВопрос("Здравствуйте 😊<br>Что Вас интересует?").сВариантамиОтвета("Первое","Второе","Компот").сохранитьРезультат("userChoice")+
//
// Если пользователь выбрал первый вариант, то сценарий передает запрос "Первые блюда" в базу знаний
если("{userChoice} == Первое").то(
	завершитьСНовымЗапросом("Первые блюда")
)+
//
// Если пользователь выбрал второй вариант, то сценарий передает запрос "Вторые блюда" в базу знаний
если("{userChoice} == Второе").то(
	задатьПользователюВопрос("Уточните по второмк?").сВариантамиОтвета("Гарнир","Горячее","Компот").сохранитьРезультат("userChoice2")+
	если("{userChoice} == Гарнир").то(
		завершитьСНовымЗапросом("Вторые блюда")
("Гарнир")
    )+
    если("{userChoice} == Горячее").то(
		сообщениеПользователю.сШаблоном("Наше горячее самое вкусное") +
        завершить
    )+
    если("{userChoice} == Горячее").то(
		сообщениеПользователю.сШаблоном("Про компот мы ничего не знаем, перевожу на оператора") +
        завершитьИПеревестиНаОператора
    )
)+
//
// Если пользователь выбрал третий вариант, то сценарий отправляет ответ и завершается
если("{userChoice} == Компот").то(
	сообщениеПользователю.сШаблоном("Закончился. Всего хорошего!") +
	завершить
)+
//
// Если пользователь не выбирал вариантов а написал другой запрос, то он передается в базы знаний
завершитьСНовымЗапросом("{userChoice}")

...

Классификация запроса и создание инцидента в ITSM системе через REST API

Регистрация запроса в CRM системе через REST APIПолучение списка открытых инцидентов в CRM системе через REST API

Получение списка открытых инцидентов


Отправляем запрос в базы знаний через API

Сценарий отправляет запрос в БЗ AF через API QUERY, в зависимости от уровня уверенности переводим на оператора или отдаем ответ пользователю

Code Block
breakoutModewide
languagejs
//Устанавливаем переменную реплики, которую будем отправлять в БЗ
установитьПеременную("queryText","{qwery}")+
//адрес  метода query
установитьПеременную("kb_qna_xplain_enpoint", "https://адрес_системы/core-api/query/api/v1/query")+
//id БЗ
установитьПеременную("kb_id", "10")+
//токен из настроек БЗ
установитьПеременную("kb_token", "494125ce201f471234839f3a485ff237")+
//устанавливаем переменную с попрогом уверенности
установитьПеременную("minScoreXplain", "0.6")+
//собираем тело запроса
выполнитьJs("""
var tags = {"service_id":kb_id,"service_token":kb_token,"query":queryText,"top_k":"1"};
var exit = {'query_text': JSON.stringify(tags)};
exit;
""")+
комментарий("{queryText}")+
//вызов внешнего сервиса
вызвать.внешнийСервис("{kb_qna_xplain_enpoint}","POST").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8"),("AUTOFAQ-User-Token", "{autorizationToken_clear}")).сТеломСообщения("{query_text}").сохранитьРезультатКакСтроку("answer")+
//проверям ответ на ошибки
если("{http_code} != 200").то(  
  комментарий("При запросе на классификацию возникла ошибка {http_code}, текст ошибки {answer}")
)+
//парсим ответ от БЗ
выполнитьJs("""
var clearQuestion = '';
var score = '';
try {
    var answerParsed = JSON.parse(answer);
} catch(err) {    
    var answerParsed = {};
}
//забираем сам ответ
if (answerParsed.hasOwnProperty('results') && answerParsed.results.length > 0) {
  clearQuestion = answerParsed.results[0].answer;
  scoreXplain = answerParsed.results[0].score;
}
var exit = {'clearQuestion':clearQuestion, 'scoreXplain':scoreXplain};
exit;
""")+
если("{clearQuestion} == ").или("{scoreXplain}<{minScoreXplain}").то(
  комментарий("нет ответа")+
  //Сообщение если нет ответа в xplain
  сообщениеПользователю.сШаблоном("Не нашел ответа на Ваш вопрос, перевожу диалог на оператора.<br>К сожалению, сейчас мы не работаем. Наши операторы ответят Вам в рабочее время с понедельника по пятницу с 9:00 до 18:00 по Московскому времени.")+
  завершитьИПеревестиНаОператора
)+
задатьПользователюВопрос("{clearQuestion}").сВариантамиОтвета("Мой вопрос решен","Нужен оператор").сохранитьРезультат("end_said")+
	если("{end_said} == Мой вопрос решен").то(
		сообщениеПользователю("Благодарим за обращение!")+
		завершитьИЗакрытьДиалог()
	)+
	если("{end_said} == Нужен оператор").то(
		сообщениеПользователю("Перевожу диалог на оператора, ожидкайте")+
		завершитьИПеревестиНаОператора
	)+
завершитьСНовымЗапросом("{end_said}")

Получение баланса по карте лояльности через SOAP вызов

...

Получить в сценарии информацию об операторе

Expand
Code Block
выполнитьJs("""
var fileError = 0;
try {
  var parsedExtFiles = JSON.parse(initByOperator);
} catch(e) {
  var fileError = 1;
}
var Oname = '';
var Oemail = '';

Oname = parsedExtFiles.fullName;
Oemail = parsedExtFiles.email;

var exit = {'Oname': Oname, 'Oemail': Oemail, 'fileError': fileError};
exit;
""")+
комментарий("Оператор - {Oname} {Oemail}")+
комментарий("Ошибка - {fileError}")+
завершить