//
// Сценарий автоматически определяет группу по тексту запроса пользователя
// актуально при подключении пользовательского канала одновременно к нескольким группам
// в этом случае АФ не будет запрашивать выбор группы у пользователя
//
// Настройки сценария
//
// Настройки для проведения классификации запроса пользователя
//
// Адрес API ендпойнтов для запросов баз знаний
установитьПеременную("kb_qna_enpoint", "https://chat.autofaq.ai/core-api/query/api/v1/query/batch") +
//
// Укажите токен для запроса в базы знаний, брать из поля "user token" в разделе Настройки - Общие - Параметры прямого подключения к базам знаний через API
установитьПеременную("autorizationToken", "ХХХХХХХХХХХХХ")+
//
// Укажите порог минимальной уверенности для автоопределения группы, в процентах
установитьПеременную("minimumConfidence", "50") +
//
// Укажите количество групп
установитьПеременную("groups_amount", "3")+
//
// Укажите ID и токены баз знаний групп - по паре переменных на каждую группу по аналогии
// Данные первой группы
установитьПеременную("kb_ids_1", "ХХХХ")+
установитьПеременную("kb_tokens_1", "ХХХХХХХХХХХХХХ")+
// Данные второй группы
установитьПеременную("kb_ids_2", "ХХХХ, ХХХХ")+
установитьПеременную("kb_tokens_2", "ХХХХХХХХХХХХХ, ХХХХХХХХХХХХ")+
// Данные третей группы
установитьПеременную("kb_ids_3", "ХХХХ")+
установитьПеременную("kb_tokens_3", "ХХХХХХХХХХХХХХХХХ")+
//
// Сценарий сохраняет текст запроса для отправки в базы знаний
установитьПеременную("queryText", "{platformInMessageQuery}")+
//
выполнитьJs("""
var g_num = Number(groups_amount);
var kb_ids = {};
kb_ids[0] = kb_ids_1.split(',').map(function(item) {return item.trim();});
kb_ids[1] = kb_ids_2.split(',').map(function(item) {return item.trim();});
kb_ids[2] = kb_ids_3.split(',').map(function(item) {return item.trim();});
var kb_tokens = {};
kb_tokens[0] = kb_tokens_1.split(',').map(function(item) {return item.trim();});
kb_tokens[1] = kb_tokens_2.split(',').map(function(item) {return item.trim();});
kb_tokens[2] = kb_tokens_3.split(',').map(function(item) {return item.trim();});
var exit = {};
for (var i = 0; i < g_num; i++) {
var query_temp = [];
for (var j = 0; j < kb_ids[i].length; j++) {
var q = {'service_id':Number(kb_ids[i][j]),'service_token':kb_tokens[i][j],'query':queryText,'top_k':1};
var z = query_temp.push(q);
}
var qq = 'query_text_' + (i+1).toString();
exit[qq] = JSON.stringify(query_temp);
}
exit;
""")+
//
// Сценарий отправляет запросы на классификацию сообщения пользователя в базы знаний группы 1
вызвать.внешнийСервис("{kb_qna_enpoint}","POST").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8"),("AUTOFAQ-User-Token", "{autorizationToken}")).сТеломСообщения("{query_text_1}").сохранитьРезультатКакСтроку("answer_1")+
// Проверка резльтатов запрос, если запрос завершился с ошибкой сценарий оставляет комментарий для администратора сервиса
если("{http_code} != 200").то(
комментарий("При запросе на классификацию возникла ошибка {http_code}, текст ошибки {answer_1}")
)+
//
// Сценарий отправляет запросы на классификацию сообщения пользователя в базы знаний группы 2
вызвать.внешнийСервис("{kb_qna_enpoint}","POST").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8"),("AUTOFAQ-User-Token", "{autorizationToken}")).сТеломСообщения("{query_text_2}").сохранитьРезультатКакСтроку("answer_2")+
// Проверка резльтатов запрос, если запрос завершился с ошибкой сценарий оставляет комментарий для администратора сервиса
если("{http_code} != 200").то(
комментарий("При запросе на классификацию возникла ошибка {http_code}, текст ошибки {answer_2}")
)+
//
// Сценарий отправляет запросы на классификацию сообщения пользователя в базы знаний группы 3
вызвать.внешнийСервис("{kb_qna_enpoint}","POST").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8"),("AUTOFAQ-User-Token", "{autorizationToken}")).сТеломСообщения("{query_text_3}").сохранитьРезультатКакСтроку("answer_3")+
// Проверка резльтатов запрос, если запрос завершился с ошибкой сценарий оставляет комментарий для администратора сервиса
если("{http_code} != 200").то(
комментарий("При запросе на классификацию возникла ошибка {http_code}, текст ошибки {answer_3}")
)+
//
// Разбор ответов
выполнитьJs("""
var answers = {};
var results = {};
var res = 0.0;
var minimumConfidenceLevel = parseFloat(minimumConfidence) / 100;
try {
answers[0] = JSON.parse(answer_1);
answers[1] = JSON.parse(answer_2);
answers[2] = JSON.parse(answer_3);
} catch(err) {
answers[0] = [];
answers[1] = [];
answers[2] = [];
}
var keys = Object.keys(answers);
for (var i = 0; i < keys.length; i++) {
res = 0.0;
for (var j = 0; j < answers[i].length; j++) {
if (answers[i][j].hasOwnProperty('results') && answers[i][j].results.length > 0) {
if (answers[i][j].results[0].score > res && answers[i][j].results[0].score > minimumConfidenceLevel) {
res = answers[i][j].results[0].score;
}
}
}
results[i] = res;
}
var kposition = Object.keys(results).reduce(function(a, b){ return results[a] > results[b] ? a : b });
if (results[Object.keys(results)[position]] == 0.0) {position = -1;}
try {
var group = Number(kposition) + 1;
} catch(err) {
var group = 0;
}
var exit = {'group':JSON.stringify(group)};
exit;
""")+
//
// Сценарий определил группу, ответ из баз знаний которой пришел с максимальной уверенностью и переводит запрос на эту группу
// Идентификаторы групп можно получить в разделе настроек Группы
комментарий("Определил группу номер {group}")+
// Сценарий переводит запрос на группу 1
если("{group} == 1").то(
комментарий("Перевожу чат на группу Вторая линия HR")+
перевестиНаГруппу("ХХХХХ-ХХХХ-ХХХХ-ХХХХ-ХХХХХ").иЗавершить
)+
// Сценарий переводит запрос на группу 2
если("{group} == 2").то(
комментарий("Перевожу чат на группу Первая линия")+
перевестиНаГруппу("ХХХХХ-ХХХХ-ХХХХ-ХХХХ-ХХХХХ").иЗавершить
)+
// Сценарий переводит запрос на группу 3
если("{group} == 3").то(
комментарий("Перевожу чат на группу Вторая линия IT")+
перевестиНаГруппу("ХХХХХ-ХХХХ-ХХХХ-ХХХХ-ХХХХХ").иЗавершить
)+
//
// Сценарий не смог определить группу, ипользователю переводитбудет запроспредложено навыбрать группу по-умолчаниюсамому
комментарий("ПеревожуНе чатсмог наопределить группу по-умолчанию")+
перевестиНаГруппу("ХХХХХ-ХХХХ-ХХХХ-ХХХХ-м").иЗавершитьзавершить |