Skip to content
Возможности Когникон
Share
Explore
Сценарии чат-бота

icon picker
Модуль "Работа с Чек-листом"

Untitled (9).jpg
Действия с “Чек-листом” осуществляются в личном чате сотрудника. Для перехода в модуль сотрудник должен перейти по ссылке из группового чата.
Для старта сотруднику необходимо нажать на кнопку: “СТАРТ”
image.png
inlineButtons: {text: "СТАРТ", callback_data: "shiftStep"}
изображение.png
После нажатия кнопки “СТАРТ” в групповой чат приходит сообщение:
изображение.png
После нажатия сотрудником инлайн-кнопки “СТАРТ” в индивидуальном чате, запускается сценарий выполнения Чек-листа на текущий день недели. Задания берутся из словаря checklists.yaml
изображение.png
изображение.png
Сценарий чек листа зависит от дня недели. С помощью встроенной функции currentDate происходит определение дня недели из модуля moment, подключенного в файле requirements.sc.
image.png
require: dateTime/moment.min.js module = sys.zb-common
Далее вызывается функция prepareForChecklist() из файла utils.js.
image.png
function prepareForChecklist() { var session = $jsapi.context().session; var client = $jsapi.context().client; var request = $jsapi.context().request.rawRequest; session.clientChatId = request.message.chat.id $reactions.setClientTimezone("Europe/Moscow"); moment.locale('en'); client.username = request.message.from.username; if (client.username === undefined){ client.username = "nonickname"; }else{ client.username = "@"+client.username; } client.name = request.message.from.first_name; client.id = request.message.from.id client.report = []; session.stepNumber = 0; session.ErrorCounter = 0; session.early_id!=""; session.early_text!=""; session.stepNumber = 0; session.ErrorCounter = 0; session.checklistType = moment($jsapi.dateForZone("Europe/Moscow", "YYYY-MM-dd")).format("dddd"); }
Эта функция объявляет переменные и присваивает им значения. С этого момента начинается отсчет времени выполнения Чек-листа. По умолчанию, на его выполнение дается 420 минут, и на каждый шаг не более 30 минут. Также на экран выводится первое задание из Чек-листа, оно может быть таким:
изображение.png
Чек-лист включает в себя набор задач необходимых к выполнению за определенное время. На выполнение одного задания по умолчанию отводится 30 минут.
По мере выполнения сотруднику необходимо отправлять фотоотчет:
image.png
event: fileEvent script: // если пользователь еще не отправлял файл, то сохроняем его в $client.report // иначе сообщаем ему, что отправлять больше одного файла нельзя if (!$client.report[$session.stepNumber]) { $client.report[$session.stepNumber] = $request.data.eventData[0].url; $session.stepNumber++; ///шаг увеличиваем +1 $session.ErrorCounter = 0; /// ошибки обнуляем // после 3 секунд переходим в стейт обработки шага чек-листа $reactions.timeout({interval: "3 sec", targetState: '/Checklist/LoopBySteps'}); } else { var message = "Запрещено присылать больше одного фото. Необходимо повторить пункт.\nНажмите на кнопку \"Повторить\""; $temp.response = sendMessageToUserChatWithButton(message,'Повторить', 'repit_step'); // если ранее такое сообщение отправляли, то удаляем его if ($session.early_id!="" && $session.early_text!="" && $session.early_text === message) { deleteMessegeFromChat($session.early_id, $client.id, $injector.bot_token); } $session.early_id = $temp.response.result.message_id; $session.early_text = message; }
изображение.png
Если сотрудник не отправляет отчет в отведенное время включается счетчик ошибок и в личный чат приходит напоминание про выполнение задания.
Стейт для обработки таймаута:
image.png
state: timeout script: $session.timeout = true; $session.ErrorCounter++; go!: /Checklist/LoopBySteps
Отчет по одному заданию может содержать только одно фото, иначе возникнет ошибка, которую бот обработает фразой: “Запрещено присылать больше одного фото”.
При возникновении более трех ошибок у сотрудника бот отправляет в групповой чат сообщение: “У сотрудника сложность с чек-листом”, при этом уточняя у какого именно сотрудника возникли сложности с каким чек листом и на каком пункте.
image.png
if: $session.ErrorCounter === 3 script: var message = "У сотрудника " + $client.name + " " + $client.username + " сложность с чек-листом чистоты с пунктом " + ($session.stepNumber + 1) + "." + checklist[$session.checklistType].stepNames[$session.stepNumber]; // отправка сообщения в груповой чат $temp.response = sendMessageToGroupChat(message);
изображение.png
Когда сотрудник успешно справился с заданиями в отведенное время формируется отчет и отправляется в групповой чат:
image.png
state: Report script: var amountEndTimeInMilliseconds = $jsapi.timeForZone("Europe/Moscow"); var interval = Math.round((amountEndTimeInMilliseconds - $client.amountStartTimeInMilliseconds)/60000); var dayInGenitive = $nlp.inflect(checklist[$session.checklistType].dayName, "gent"); var dayInAccs = $nlp.inflect(checklist[$session.checklistType].dayName, "accs"); if (interval > 420){ $reactions.answer('Чек лист \«Задачи чистоты ' + dayInGenitive + '\» провален!'); } else { $reactions.answer('Задачи чистоты ' + dayInGenitive + ' выполнены!'); var message = "Сотрудник " + $client.name +" "+ $client.username + " справился с чек-листом чистоты за " + dayInAccs + ". время выполнения - " + interval + " " + $caila.conform("минута", interval) + " \nОтчёт:"; $temp.response = sendMessageToGroupChat(message); for (var i = 0; i < $client.report.length; i++) { var message = " " + $client.name +" "+ $client.username + " " + "Пункт " + (i + 1) + "." + checklist[$session.checklistType].stepNames[i] + ": " + $client.report[i] $temp.response = sendMessageToGroupChat(message); } }
изображение.png
Сотрудник получает в личный чат сообщение:
изображение.png


Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.