Описание устройства чат-бота бонусной системы
Чат-бот бонусной системы автопроката ТЕХ-АВТО сделан на базе популярного конструктора ботов Leadteh.ru.
Основное назначение этого чат-бота: поддержка бонусной и реферальной систем этого автопроката а также предоставление информации об автопрокате. В этом боте пользователь автопроката может посмотреть состояние своего бонусного счета, список всех операций с бонусами (начислений и списаний) а также свои платежи, своих рефералов и другую информацию. Общую информацию о функциях и работе этого чат-бота можно посмотреть здесь.
Для автопроката этот чат-бот служит отличным средством удержания клиентов и также используется для поддержки регулярной связи с клиентами через Телеграм.
Данный чат-бот стыкуется с CRM-системой Rentprog.ru, откуда он через API получает данные о клиентах и их платежах.
Для хранения своей базы данных операций с бонусами бот использует базу данных MySQL, которая находится на веб-хостинге автопроката. С этой базой данных бот взаимодействует через еще одно API, разработанное нами.
В разделе "Сообщения" личного кабинета Leadteh.ru менеджеры автопроката видят всех пользователей чат-бота и историю взаимодействия с ботом каждого пользователя. Там же менеджер может вести диалог с пользователем через Телеграм.
В этой статье описывается как устроен этот чат-бот "изнутри" чтобы в случае необходимости его можно было легко доработать (что на данном конструкторе ботов вполне возможно без программирования).
В разделе "Проекты" конструктора ботов виден список всех проектов (ботов). В данном случает там имеется два проекта: "Бот автопроката с бонусной системой" и "Бот менеджера автопроката". Первый бот предназначен для клиентов, а второй для менеджеров автопроката.
После выбора проекта меню в левой части конструктора ботов изменяется и в нем становится доступна кнопка "Сценарий". Вся логика данного чат-боте разделена на несколько сценариев. Это сделано для того чтобы сделать проще представление структуры бота на экране и ее понимание.
При нажатии на кнопку "Сценарий" открывается первый (стартовый) сценарий чат-бота. Перейти от одного сценария к другому можно при помощи поля выбора сценария, которое находится в правом-нижнем углу страницы конструктора.
Главный (стартовый) сценарий бота:
В этом сценарии происходит регистрация нового пользователя, инициализация его данных и выводится приветственное сообщение. После этого управление передается в сценарий "Меню".
Выполнение этого сценария начинается с блока "Старт" (при выполнении пользователем бота команды /start,"СТАРТ" или "ПУСК").
В блоке "registered ?" проверяется был ли уже пользователь зарегистрирован в этом боте или нет? (Установлен ли тег registered).
Если пользователь уже был зарегистрирован раньше, то дальше выполняется блок "Приветствие", который выводит приветственное сообщение и сразу же передает управление сценарию "Меню", в котором выводится главное меню бота.
Если же пользователь еще не регистрировался в этом боте, то у него последовательно запрашиваются имя и номер телефона. После правильного ввода номера телефона (длиной от 11 до 13 цифр) осуществляется поиск этого номера телефона в списке клиентов базы данных Rentprog.
Для этого сначала в блоке "GetToken" делается http-запрос одноразового токена через API Rentprog. Этот токен используется в следующем http-запросе в блоке "Get client_id". В результате этого запроса к базе клиентов автопроката в Рентпрог мы получаем уникальный идентификатор клиента (client_id) для клиента с этим номером телефона.
Блок "client_id < 100" проверяет найден ли клиент с указанным номером телефона в базе Рентпрог. Если найден (client_id не равен 0), то переходим к блоку "тег registered" для регистрации пользователя в боте. А если клиент не найден в базе Рентпрог, то при помощи следующих блоков "GetToken" и "Add new client" делается http-запрос к API Rentprog для добавления в базу клиентов Рентпрог нового клиента.
В результате этого запроса получаем client_id нового клиента в базе Рентпрог и переходим к блоку "тег registered" для продолжения регистрации. Цепочка последовательно выполняющихся блоков "тег registered", "cur_date=today", "cli_procent=0.02" и "cli_status=Стартовый" устанавливает исходные параметры нового пользователя.
Затем выполняется блок http-запроса к базе данных бонусов "Начисление бонуса 300". Этот блок создает в базе данных бонусов запись о начислении "приветственного бонуса" для нового пользователя. После успешного выполнения этого запроса делается переход к блоку "Приветствие" и дальше к сценарию, выводящему главное меню бота.
Сценарий "Меню":
Этот сценарий довольно простой так как он не имеет обращений к API и работы с переменными. Он просто выводит меню и разные информационные страницы в соответствии с нужной логикой работы бота.
Некоторые пункты главного меню запускают дополнительные сценарии: "Акции", "Реферальная программа" и "Вычисление бонуса". Сценарий "Акции" тоже не сложен, поэтому рассмотрим здесь более интересные сценарии...
Сценарий "Реферальная программа":
Этот сценарий предназначен для вывода количества рефералов и списка рефералов пользователя. А также для приглашения в бот новых пользователей по индивидуальной реферальной ссылке данного клиента.
Блок "Реферальная программа" выводит информацию о реферальной программе и дополнительно имеет меню из четырех пунктов.
Выбор пункта меню "Поделиться ссылкой" запускает блок "О реферальной ссылке", который выводит текст с информацией о реферальной ссылке и сразу вслед за этим запускается блок "Текст с реферальной ссылкой". Он выводит текст со ссылкой, который пользователь должен переслать своим знакомым для приглашения в этого бота. Кнопка "Назад в меню" в любом блоке передает управление в сценарий главного меню бота.
Этот бот пользуется реферальной системой встроенной в платформу Leadtex. Для этого он использует некоторые функции этой платформы.
При выборе пункта меню "Мои рефералы" в переменную refferals записывается количество рефералов данного пользователя при помощи встроенной функции getTelegramReferralsCountByDepth(). При этом учитываются только рефералы первого уровня, которые хотя бы один раз оплатили в автопрокате аренду автомобиля (имеют в боте тег kupil). Вслед за этим в блоке "Количество вознаграждений" при помощи http-запроса к базе бонусов получаем количество уже начисленных реферальных вознаграждений пользователя.
Следующий блок проверяет условие: больше ли количество рефералов (refferals) чем количество реферальных вознаграждений (countreffer)? Если не больше, то выполняется блок "Список рефералов", который выводит страницу со списком рефералов данного пользователя. Если же количество рефералов больше количества начисленных реферальных вознаграждений, то выполняется блог http-запроса "Начисление реферального вознаграждения", который создает в базе данных бонусов новую запись о начисление бонуса за реферала. Сразу после этого выводится список рефералов.
При выборе пункта меню "Мои бонусы" делается http-запрос к базе данных бонусов для получения списка всех операций с бонусами данного пользователя. И следующий блок "Вывод списка операций" выводит пользователю этот список вместе с итоговой суммой бонусов.
Сценарий "Вычисление бонуса"
Этот сценарий оказался довольно большим, поэтому пришлось сделать для него два скриншота, чтобы можно было что-то разобрать на них.
Начало сценария "Вычисление бонуса":
В этом сценарии первым выполняется блок http-запроса к базе данных бонусов "addpayments", который запрашивает у Rentprog список всех платежей данного клиента, записывает их в базу данных бонусов (делая при этом начисление бонуса по каждому новому платежу) и записывает в переменную kupil количество платежей клиента.
Следующий блок "Тег kupil ?" проверяет наличие тэга kupil (не переменной kupil а именно тэга). Тег kupil является сигналом того, что пользователь имеет хотя бы один платеж за аренду - то есть является клиентом автопроката. Если этот тэг у данного пользователя имеется то делается переход на следующий блок, который вычисляет количество рефералов клиента. Если же тега нет то блок "Переменная kupil > 0" проверяет есть ли у клиента платежи (переменную kupil) и если есть, то устанавливает тег kupil. Затем при помощи соответствующего блока получаем в переменную referrals количество рефералов первого уровня имеющих тег kupil.
Вслед за этим в блоке http-запроса к базе данных бонусов "Количество вознаграждений" получаем в переменную countref количество начисленных реферальных вознаграждений клиента.
Следующий блок проверяет условие: больше ли количество рефералов (refferals) чем количество реферальных вознаграждений (countreffer)? Если не больше, то выполняется блок "Запрос суммы бонуса". Если же количество рефералов больше количества начисленных реферальных вознаграждений, то выполняется блок http-запроса "Начисление реферального вознаграждения", который создает в базе данных бонусов новую запись о начисление бонуса за реферала.
Дальше блок "Запрос суммы бонуса" получает из базы данных бонусов общую сумму бонусов клиента (totbonus) и общую сумму его платежей (totplat).
Блок "old_status = cli_status" запоминает в переменной old_status текущее значение статуса (уровня) клиента. Оно будет нужно дальше для начисления бонуса при достижении клиентом нового уровня.
Следующий блок "переключатель" проверяет на каком "уровне" сейчас находится сумма платежей клиента (totplat).
Если эта сумма больше порога уровня "ВИП" (150000 руб в этом примере), то дальше переменной cli_status присваивается значение "ВИП" и переменной cli_procent значение 0.08 (кэшбек 8%).
Если переменная totplat меньше уровня "ВИП" (150000 руб), то проверяется условие больше ли она уровня "Премиум" (100000). И если больше, то соответственно устанавливаются значения переменных cli_status и cli_procent.
Если totplat меньше уровня "Премиум" (100000 руб), то проверяется условие больше ли она уровня "Базовый" (100000). И если больше, то соответственно устанавливаются значения переменных cli_status и cli_procent.
Если totplat меньше уровня "Базовый" (50000 руб), то cli_status присваивается "Стартовый" и cli_procent минимальное значение 0.02 (2%).
Продолжение сценария "Вычисление бонуса":
Дальше на каждом из четырех уровней статусов делается проверка условий - не изменился ли статус клиента (по сравнению с переменной old_status). Если значение статуса изменилось в большую сторону, то при помощи блока "Начисление бонуса" (http-запрос к базе данных бонусов) в базе данных делается запись о начислении бонуса за достижение соответствующего уровня (4000, 2500 или 1000 руб в этом примере).
Если же значение статуса изменилось в меньшую сторону (что может быть при возврате клиенту денег при досрочном возврате автомобиля), то при помощи блока "Списание бонуса" в базе данных бонусов делается запись о списании соответствующего бонуса.
После каждого из блоков начисления или списания бонуса делается корректировка значения текущей суммы бонуса (totbonus) и следом вызывается блок "Запрос списка операций". Этот http-запрос к базе данных бонусов возвращает отформатированную строку со списком всех бонусов клиента. Следующий блок "Вывод списка операций" выводит этот список операций а также итоговые данные клиента: общую сумму бонусов, сумму платежей, число рефералов, текущий статус и текущий процент кэшбека.
Нажатие на кнопку "Назад в меню" возвращает пользователя в главное меню бота.
Все числовые и строковые константы (уровни, проценты, суммы начислений бонусов, названия статусов и т.п.) в этом чат-боте вынесены в раздел "Списки" - "Глобальные переменные". Это позволяет изменять их значения в одном месте, не делая множество исправлений по всему боту.
Такой чат бот можно адаптировать для реализации любой бонусной системы. Причем не только для прокатов, а для любой организации работающей с клиентами.
Общую информацию о функциях и работе этого чат-бота можно посмотреть здесь.
Посмотреть как работает демо версия этого бота можно здесь: @aprok_bonus_bot







