Skip to content
Gallery
Кейс Cinnabon
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.