Паттерны взаимодействия с ботами в Telegram: неочевидные практики на Python и баг в мессенджере

Я часто взаимодействую с ботами в Telegram. Чаще как пользователь, но создать собственного бота или потрогать чужого я не боюсь. При разработке собственного решения чувствуется, что бот не похож на GUI- или веб-приложение, но программисты тщательно превозмогают это чувство и делают так, как проще с точки зрения программирования.
В этой статье я расскажу про некоторые способы взаимодействия человека и бота в личных сообщениях и группах. Текст рассчитан на тех, кто только начинает изучать тему создания ботов, но, возможно, будет полезен и профессионалам.
Дисклеймер. Автор не является специалистом по UX. Изложенные тезисы не претендуют на звание лучших практик, а скорее показывают опыт автора, приобретенный на практике.
Шаблон
Статья практическая, поэтому предполагает фрагменты кода, которые наглядно продемонстрируют описанный подход. Для демонстрации я буду использовать свой основной язык программирования — Python. Итак, список требований:
- Python 3.9.
- Пакет python-telegram-bot версии 20.0a2 (python -m pip install python-telegram-bot==20.0a2).
- Созданный бот в Telegram и токен доступа. Для создания обратитесь к BotFather.
Фреймворк python-telegram-bot основан на обработчиках. Ядро получает обновления (Update) от Telegram Bot API и вызывает соответствующий обработчик из списка зарегистрированных. Если подходящего обработчика нет, то событие игнорируется.
Рассмотрим шаблон на примере простого echo-бота, который отвечает вашим же текстом.
import logging from telegram import Update from telegram.ext import * # Логирование logging.basicConfig( format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO ) logger = logging.getLogger(__name__) # Функция-обработчик async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: await update.message.reply_text(update.message.text) # Создание объекта Бот application = Application.builder().token("здесь ваш токен").build() # Регистрация обработчика на текстовые сообщения, но не команды application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo)) # Запуск бота application.run_polling()
Далее в примерах я буду приводить только функцию-обработчик и строку для регистрации обработчика.
После краткого введения приступим к обзору возможных взаимодействий с ботом. Бот — это программа, а программы должны исполнять команды. С них и начнем.
Команды
Команды в Telegram — это сообщения, начинающиеся со слэша (/). Примеры команд:
/start /subscribe@ExampleArticleBot
Первый вид команд используется в личных сообщениях. Имя бота добавляется в группах, чтобы явно указать, какому боту дана команда. Если в групповом чате написать команду без имени бота, то команда отправится всем ботам.

Команды — это хороший способ инициировать действие, так как список команд перечисляется в выпадающем меню чата с краткой справкой. При выборе команды сообщение отправляется незамедлительно. Это значит, что у команд не должно быть аргументов. Допустим, у нас бот в групповом чате с командой как на скриншоте выше, а команда принимает имя города через пробел. Таким образом, для получения погоды в Москве придется полностью напечатать следующий текст:
/weather@ExampleArticleBot Москва
Неудобно и отбивает всякое желание пользоваться ботом. Единственная команда, которая может получать аргументы, — это /start, и только при переходе по ссылке, которая выглядит следующим образом:
https://t.me/?start=
В этом случае у пользователя появится кнопка START, даже если пользователь уже активировал бота. При нажатии кнопки в чат отправится сообщение /start , но бот получит сообщение /start . Создадим обработчик аргументов команды start:
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: if update.message.text == "/start": await update.message.reply_text("Start without arguments") return # Удаляем /start arg = update.message.text[7:] await update.message.reply_text(arg) # Регистрация обработчика application.add_handler(CommandHandler("start", start))

Подобный подход позволяет боту задать первоначальный контекст обращения или помочь вести аналитику переходов, почти как UTM-метки.
Существенный минус команд проявляется в групповых чатах. Команды в отправленных сообщениях кликабельны, поэтому одна неосторожная команда может привести к лавине сообщений. Возможное решение — использование текста.
Текстовые сообщения
Специфичные команды можно представить в виде кодовых слов. Например, вместо /start запрограммировать бота реагировать на «Поехали!». Это отличное решение для ботов, которые в группах реагируют только на сообщения администраторов. Но есть в ложке меда бочка дегтя:
- Документация по командам бота должна распространяться отдельно.
- Программист должен учесть возможную вариативность сообщений.
- Бот должен иметь модификатор «имеет доступ к сообщениям», что может снизить доверие к боту.

Получается хорошая комбинация из команды, которая инициирует запрос, и текстовых аргументов. При этом бот не получает доступ ко всем сообщениям в чате, что несколько повышает безопасность.
# Точка входа в диалог async def weather(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int: await update.message.reply_text("В каком городе хотите посмотреть погоду?") return 1 # Обработка ответа async def show_weather(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int: city = update.message.text await update.message.reply_text( f"Вы хотите посмотреть погоду в городе .\n" f"\n" f"Но я не умею показывать погоду, извините :(" ) return ConversationHandler.END # Задаем точки входа и ветви диалога handler = ConversationHandler( entry_points=[CommandHandler("weather", weather)], states=< 1: [MessageHandler(filters.TEXT & ~filters.COMMAND, show_weather)] >, fallbacks=[] ) application.add_handler(handler)
В некоторых случаях бот предлагает несколько вариантов на выбор вместо свободного ввода. В этом случае уместно использовать кнопки.
Если вас интересует тема Telegram-ботов, посмотрите, что у нас есть еще на эту тему:
Кнопки

ReplyKeyboard в действии
В Telegram существует два вида кнопок, которые могут быть созданы сообщением от бота. Первый вид — ReplyKeyboard, заменяющий клавиатуру на сенсорных устройствах. Нажатие на эту кнопку отправляет в чат текст кнопки.
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: keyboard = [ ["Кнопка 1", "Кнопка 2"], ["Большая привлекательная кнопка кнопка"] ] await update.message.reply_text( "Какую кнопку будем нажимать?", reply_markup=ReplyKeyboardMarkup( keyboard, one_time_keyboard=False, input_field_placeholder="Ваш выбор?" ) ) application.add_handler(CommandHandler("start", start))
Такие кнопки можно использовать в том числе в групповых чатах. Современные клиенты Telegram автоматически отправляют сообщение в виде ответа на сообщение бота. При локализации бота придется менять обработчики для поддержки сообщений на разных языках. Также кнопки этой клавиатуры отвечают на последнее сообщение, которое создало клавиатуру.

Если хочется разные действия для нескольких сообщений одновременно, то на помощь приходит InlineKeyboard — клавиатура под сообщением.
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: keyboard = [ [ InlineKeyboardButton("Кнопка 1", callback_data="button-1"), InlineKeyboardButton("Кнопка 2", callback_data="button-2") ], [InlineKeyboardButton("Большая привлекательная кнопка кнопка", url="https://habr.com/")] ] await update.message.reply_text( "Какую кнопку будем нажимать?", reply_markup=InlineKeyboardMarkup(keyboard) ) async def weather(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: keyboard = [ [ InlineKeyboardButton("Санкт-Петербург", callback_data="LED"), InlineKeyboardButton("Москва", callback_data="SVO"), InlineKeyboardButton("Иркутск", callback_data="IKT") ] ] await update.message.reply_text( "Где хотите посмотреть погоду?", reply_markup=InlineKeyboardMarkup(keyboard) ) application.add_handler(CommandHandler("start", start)) application.add_handler(CommandHandler("weather", weather))
Кнопки встроенной клавиатуры разнообразны и могут содержать один из следующих элементов:
- callback_data — строка для специальных обработчиков, рассмотрим подробнее позже.
- url — ссылка на любой ресурс. Кнопка со ссылкой отмечается стрелкой в верхнем правом углу.
- inline_query — запускает inline-режим в указанном чате с текущим ботом. Наиболее известный бот с inline-режимом — gif.
- callback_game — ссылка на игру.
- web_app — ссылка на WebApp-приложение, доступно только в личных сообщениях.
- login_url — ссылка на аутентификацию в сервисе через Telegram.
- pay — ссылка на оплату счета через кошелек в Telegram.

Кнопки с действием, если это не callback_data, открывает новое окно с указанным действием. Если у сообщения одна кнопка, то она будет продублирована в закреплении, что может быть полезно в групповых чатах.
Максимальное количество кнопок под сообщением — 100, вне зависимости от компоновки. При превышении этого числа Telegram не выводит ошибку, но «лишние» кнопки не отображает.
Вернемся к обработке действия с callback_data. Нажатие на кнопку генерирует событие callback_query.
Обработка нажатия кнопки

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: keyboard = [ [InlineKeyboardButton("❤️", callback_data="like-trex")] ] await update.message.reply_text( "Нажми лайк, чтобы поддержать Тирекса!", reply_markup=InlineKeyboardMarkup(keyboard) ) async def query(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: # Убираем кнопки await update.callback_query.message.edit_reply_markup(None) # Отмечаем, что мы обработали событие и выводим текст text = f"Спасибо, , что поддержал Тирекса!" await update.callback_query.answer(text, show_alert=True) application.add_handler(CommandHandler("start", start)) application.add_handler(CallbackQueryHandler(query))
При нажатии на кнопку в верхнем правом углу появляется пиктограмма часов. Это значит, что событие передано боту. Обработчик callback_query может ответить разными способами:
- Обработать событие «тихо». На кнопке исчезнет пиктограмма часов.
- Ответить всплывающим текстом. Этот способ варьируется в зависимости от клиента, но идея заключается в появлении текста поверх чата на короткий промежуток времени.
- Ответить всплывающим окном. Текст отображается всплывающим окном с кнопкой «ОК».
- Открыть чат с пользователем по ссылке или запустить игру в Telegram по ссылке.
В одной из следующих статей я расскажу о том, как сделал бота для массового заказа шавермы в Selectel. А пока вы можете подписать на бота компании — он рассказывает о предстоящих мероприятиях компании.

- Блог компании Selectel
- Мессенджеры
- Python
Клавиатура как способ взаимодействия с ботом

iMakeBots
Взаимодействие с ботом должно быть интуитивным. Пользователь должен понимать, как общаться с ботом чтобы получить необходимый результат. Давайте рассмотрим какие есть способы взаимодействия с ботом.
При открытии бота по умолчанию сразу доступна кнопка Старт, при нажатии, на которую будет начат диалог и в бот будет отправлена команда /start . Уже здесь мы можем поймать эту команду, обработать и выполнить какие-то действия. Вместе с этой командой в бот отправляется минимальная информация о пользователе:
- id — уникальный идентификатор пользователя в Telegram
- last_name — значение поля фамилия, может быть пустым
- first_name — значение поля имя, может быть пустым
- username — уникальное значение текстовый идентификатор, может быть пустым
- language_code — кодовое обозначение выбранного языка интерфейса приложения (en, ru . )
- is_bot — флаг, определяющий бот, если пользователь, то поле будет пустое
Полезный инструмент
У каждого бота есть ссылка, которая открывает диалог с ним в Telegram — https://t.me/ИМЯ_БОТА. К этой ссылке можно добавить параметры start или startgroup со значениями. Значение может быть длиной от 1 до 64 символов и состоять из букв латинского алфавита (больших — A-Z и маленьких — a-z), цифр — 0-9, нижнего подчеркивания _ и тире -.
https://t.me/ИМЯ_БОТА?start=ВАШЕ_ЗНАЧЕНИЕ
Telegram Bot API рекомендует использовать base64url для кодирования параметров с двоичным и другими типами контента.
По ссылке с параметром start будет открыт диалог с ботом, с кнопкой Старт в месте поля ввода. Если используется параметр startgroup, пользователю будет предложено выбрать группу для добавления бота.
Как только пользователь подтвердит действие (нажмет кнопку Старт в своем приложении или выберет группу для добавления бота), ваш бот получит сообщение от этого пользователя в таком формате:
/start ВАШЕ_ЗНАЧЕНИЕ
Для удобства пользователя, можно через настройки Commands вашего бота у @BotFather, задать список поддерживаемых ботом команд. Тогда при вводе знака слеш / , пользователь увидит все команды и сможет сразу их отправить, просто нажав на одну из них. Каждая команда состоит из собственно командного слова, начинающегося со слеша и короткого описания:
/invoice Выписать счет
Клавиатуры и их возможности
Для управления ботом вы как создатель бота предполагаете какой-то сценарий. Пользователю чтобы получить от бота желаемый результат нужно отправить команду. Бот, когда получит команду обработает ее и отреагирует по установленному вами сценарию. Но представьте, что пользователь написал команду с ошибкой, бот в этом случае должен предупредить что команда не распознана и попросить попробовать еще раз. Это не совсем удобно пользователю, и он может пойти искать другого бота с аналогичными возможностями. Вы можете потерять потенциального клиента, это не совсем хорошо.
В этом случае нам помогут клавиатура. Ее нужно просто после старта диалога с ботом вывести на экран пользователю, и когда тот нажмет на нужную ему кнопку, боту отправиться заложенная вами правильная команда. В этом случае уходим от возможных ошибок, интерфейс бота выглядит более приветливо и профессионально. Качество бота повышается.
С каждым сообщением бот может отправлять разный набор кнопок как по количеству, так и по назначению. Кнопки можно расположить непосредственно под сообщением (InlineKeyboardButton), или зафиксировать под тестовым полем для ввода сообщения (KeyboardButton). Различия в них очень существенные на мой взгляд.
KeyboardButton
Этот объект представляет одну кнопку клавиатуры, располагающуюся под текстовым полем для отправки сообщения. Поставляется она в интерфейс приложения в наборе с другими аналогичными кнопками через объект ReplyKeyboardMarkup. В качестве параметров с ним можно передать:
- text — текст который будет на отображен на кнопке, обязательный параметр, поддерживает текст и смайлики (эмодзи)
- request_contact — если параметр установлен в true, пользователь отправит в бот свой номер телефона, на который зарегистрирован аккаунт
- request_location — если параметр установлен в true, пользователь отправит в бот свое текущее местоположение
Если будет заполнен только обязательный параметр text, то при нажатии на кнопку будет отправлено текстовое сообщение с содержанием из этого параметра. Если будет включено дополнительно одно из необязательных параметров или локация, или контакт, то будет отправлен или контакт, или локация соответственно. Необязательные параметры взаимоисключающие.
Помимо набора кнопок в объект ReplyKeyboardMarkup можно передать еще ряд параметров:
- keyboard — массив кнопок (объекты KeyboardButton)
- resize_keyboard — если предать true, то клавиатура подгонится по высоте до возможного минимума.
- one_time_keyboard — возможность скрывать клавиатуру после ее использования
- selective — если надо показать клавиатуру только определенным пользователям
При необходимости удалить клавиатуру используйте объект ReplyKeyboardRemove.
InlineKeyboardButton
Это объект одной кнопки встроенной клавиатуры. Располагается набор таких кнопок сразу под сообщением. С помощью этого объекта можно передать кнопке url, или использовать его для голосования как один из вариантов. В любом случае можно сделать много интересного и полезного. Рассмотрим его возможности на практике чуть ниже. Передается в наборе с другими аналогичными кнопками через объект InlineKeyboardMarkup. Принимает параметры:
- text — текст который будет на отображен на кнопке, обязательный параметр, поддерживает текст и смайлики (эмодзи)
- url — адрес на который будет направлен пользователь
- callback_data — строка 1-64 символа будет передан боту через объект CallbackQuery
- switch_inline_query — после нажатия будет предложен выбор чата где будет использован бот во встроенном режиме, пример @gif dog
- switch_inline_query_current_chat — после нажатия вставит команду для использования бота во встроенном режиме в текущем чате
- callback_game — описание игры, которая будет запущена при нажатии пользователем кнопки.
- pay — кнопка будет использована как кнопка оплаты
Теперь немного практики
Предлагаю рассмотреть поближе возможности клавиатур. Для примера я сделаю 4 кнопки: 2 KeyboardButton и 2 InlineKeyboardButton. Для этого будем работать с теми же инструментами, которые были в предыдущей статье. Добавим только несколько новых методов.
Логика скрипта будет простая, при старте бот будет выводить сообщение о готовности и 2 кнопки Голосовать и Помощь. При нажатии на кнопку Помощь — выведется сообщение с небольшой инструкцией, а при нажатии на кнопку Голосовать на экране появиться сообщение и под ним 2 кнопки, при нажатии на которые произойдет увеличения счетчика.

Чтобы обрабатывать команды от всех типов кнопок нам надо составить условия проверки. В моем примере от кнопки KeyboardButton команда приходит в виде обычного текстового сообщения вместе с объектом Message под ключом text, а от кнопки InlineKeyboardButton в объекте CallbackQuery под ключом data.

Кнопки будем отправлять в параметре reply_markup в методе sendMessage. Набор кнопок идет в таком формате:

Создадим два метода для разных клавиатур, на входе принимают массив строк кнопок, на выходе строку в формате JSON.

Сам набор кнопок будет выглядеть вот так.

Во встроенных кнопках (inlineKeyboardButton) в качестве значения параметра callback_data будем передавать служебную информацию в виде action_type_count1_count2 , где
- action — действие, в нашем случае это vote
- type — тип кнопки: 1 — левая, 0 — правая
- count1 — текущее значение левой кнопки
- count2 — текущее состояние правой кнопки
В значении параметра text передаем бинарный код эмодзи в кодировке UTF-8 (список эмодзи), которые преобразуются из шестнадцатеричных данных в двоичные данные функцией hex2bin(), и еще выведем текущее числовое значение счетчика кнопки.
Теперь нам остается только описать механизм определения команды и механизм ее обработки. Поэтому в методе init() создадим конструкцию оператора switch

Давайте разберемся, что в этом коде происходит. Оператор switch принимает значение $message, которое может быть, как просто текст сообщения (в том числе команды), так и значение объекта callbackQuery.
- При получении команды /start — мы выводим приветственное слово и набор кнопок: Голосовать, Помощь.
- При получении команды Помощь, выводим простое текстовое сообщение.
- При получении команды Голосовать, выводим текстовое сообщение и набор встроенных кнопок с параметром callback_data.
- При получении не запланированного значения, выводим текстовое сообщение.
- И самое интересное это когда принимаем значение в начале которого стоит action , в нашем случае это vote. Мы формируем новую клавиатуру изменяем в ней текстовое значение, увеличиваем счетчик у нажатой кнопки и подставляем новую служебную информацию в параметрах callback_data.
Для создания новой клавиатуры мы используем метод setParams(), а для отправки изменений мы используем метод changeVote(). Здесь остановим внимание на методах Bot API

- editMessageReplyMarkup — меняем клавиатуру у заданного сообщения
- answerCallbackQuery — позволяет выводить уведомление о проделанной работе CallbackQuery, мы его используем, уведомляя пользователя о результате его голосования.
Подводим итоги
Мы рассмотрели некоторые способы взаимодействия между пользователем и ботом, в основном это элементы интерфейса бота. Исходный код можно скачать по этой ссылке. Далее нас ждет знакомство с медиа-файлами.
Вы можете оставить комментарий к статье.
Клавиатура как способ взаимодействия с ботом
Очень полезная возможность, которая упрощает взаимодействие пользователя с ботом. Рассмотрим этот объект пользовательской клавиатуры с опциями ответа, какие типы нам доступны на текущую версию API.
Еще раз про кнопки и клавиатуру
id — уникальный идентификатор пользователя в Telegram
last_name — значение поля фамилия, может быть пустым
first_name — значение поля имя, может быть пустым
username — уникальное значение текстовый идентификатор, может быть пустым
language_code — кодовое обозначение выбранного языка интерфейса приложения (en, ru . )
is_bot — флаг, определяющий пользователя как бота, в случае с ботом равен 1, в случае с пользователем пустое значение
Полезный инструмент
У каждого бота есть ссылка, которая открывает диалог с ним в Telegram — https://telegram.me/ИМЯ_БОТА . К этой ссылке можно добавить параметры start или startgroup со значениями. Значение может быть длиной от 1 до 64 символов и состоять из букв латинского алфавита (больших — A-Z и маленьких — a-z), цифр — 0-9, нижнего подчеркивания _ и тире -.
https://telegram.me/ИМЯ_БОТА?start=ВАШЕ_ЗНАЧЕНИЕ
Telegram Bot API рекомендует использовать base64url для кодирования параметров с двоичным и другими типами контента.
По ссылке с параметром start будет открыт диалог с ботом, с кнопкой Старт в месте поля ввода. Если используется параметр startgroup, пользователю будет предложено выбрать группу для добавления бота.
Как только пользователь подтвердит действие (нажмет кнопку Пуск в своем приложении или выберет группу для добавления бота), ваш бот получит сообщение от этого пользователя в таком формате:
/start ВАШЕ_ЗНАЧЕНИЕ
Для удобства пользователя, можно через настройки Commands вашего бота у @BotFather, задать список поддерживаемых ботом команд. Тогда при вводе знака слеш / , пользователь увидит все команды и сможет сразу их отправить, просто нажав на одну из них. Каждая команда состоит из собственно командного слова, начинающегося со слеша и короткого описания:
/invoice Выписать счет
Клавиатуры и их возможности
Для управления ботом вы как создатель бота предполагаете какой-то сценарий. Пользователю чтобы получить от бота желаемый результат нужно отправить команду. Бот, когда получит команду обработает ее и отреагирует по установленному вами сценарию. Но представьте, что пользователь написал команду с ошибкой, бот в этом случае должен предупредить что команда не распознана и попросить попробовать еще раз. Это не совсем удобно пользователю, и он может пойти искать другого бота с аналогичными возможностями. Вы можете потерять потенциального клиента, это не совсем хорошо.
В этом случае нам помогут клавиатуры. Ее нужно просто после старта диалога с ботом вывести на экран пользователю, и когда тот нажмет на нужную ему кнопку, боту отправиться заложенная вами правильная команда. В этом случае уходим от возможных ошибок, интерфейс бота выглядит более приветливо и профессионально. Качество бота повышается.
С каждым сообщением бот может отправлять разный набор кнопок как по количеству, так и по назначению. Кнопки можно расположить непосредственно под сообщением (InlineKeyboardButton), или зафиксировать под тестовым полем для ввода сообщения (KeyboardButton). Различия в них очень существенные на мой взгляд. Давайте рассмотрим некоторые их возможности.
KeyboardButton
Этот объект представляет одну кнопку клавиатуры, располагающуюся под текстовым полем для отправки сообщения. Поставляется она в интерфейс приложения в наборе с другими аналогичными кнопками через объект ReplyKeyboardMarkup. В качестве параметров с ним можно передать:
text — текст который будет на отображен на кнопке, обязательный параметр, поддерживает текст и смайлики (эмодзи)
request_contact — если параметр установлен в true, пользователь отправит в бот свой номер телефона на который зарегистрирован аккаунт
request_location — если параметр установлен в true, пользователь отправит в бот свое текущее местоположение
Если будет заполнен только обязательный параметр text , то при нажатии на кнопку будет отправлено текстовое сообщение с содержанием из этого параметра. Если будет включено дополнительно одно из необязательных параметров или локация, или контакт, то будет отправлен или контакт, или локация соответственно. Необязательные параметры взаимоисключающие.
Помимо набора кнопок в объект ReplyKeyboardMarkup можно передать еще ряд параметров:
keyboard — массив кнопок (объекты KeyboardButton)
resize_keyboard — если предать true, то клавиатура подгонится по высоте до возможного минимума.
one_time_keyboard — возможность скрывать клавиатуру после ее использования
selective — если надо показать клавиатуру только определенным пользователям
При необходимости удалить клавиатуру используйте объект ReplyKeyboardRemove.
InlineKeyboardButton
Это объект одной кнопки встроенной клавиатуры. Располагается набор таких кнопок сразу под сообщением. С помощью этого объекта можно передать кнопке url , или использовать его для голосования как одним из вариантов. В любом случае можно сделать много интересного и полезного. Рассмотрим его возможности на практике чуть ниже. Передается в наборе с другими аналогичными кнопками через объект InlineKeyboardMarkup. Принимает параметры:
text — текст который будет на отображен на кнопке, обязательный параметр, поддерживает текст и смайлики (эмодзи)
url — адрес на который будет направлен пользователь
callback_data — строка 1-64 символа будет передан боту через объект CallbackQuery
switch_inline_query — после нажатия будет предложен выбор чата где будет использован бот во встроенном режиме, пример @gif dog
switch_inline_query_current_chat — после нажатия вставит команду для использования бота во встроенном режиме в текущем чате
callback_game — описание игры, которая будет запущена при нажатии пользователем кнопки.
pay — кнопка будет использована как кнопка оплаты
Теперь немного практики
Предлагаю рассмотреть поближе возможности клавиатур. Для примера я сделаю 4 кнопки: 2 KeyboardButton и 2 InlineKeyboardButton. Для этого будем работать с теми же инструментами, которые были в предыдущей статье. Добавим только несколько новых методов.
Логика скрипта будет простая, при старте бот будет выводить сообщение о готовности и 2 кнопки Голосовать и Помощь. При нажатии на кнопку Помощь — выведется сообщение с небольшой инструкцией, а при нажатии на кнопку Голосовать на экране появиться сообщение и под ним 2 кнопки, при нажатии на которые произойдет увеличения счетчика.

Чтобы обрабатывать команды от всех типов кнопок нам надо составить условия проверки. В моем примере от кнопки KeyboardButton команда приходит в виде обычного текстового сообщения вместе с объектом Message под ключом text, а от кнопки InlineKeyboardButton в объекте CallbackQuery под ключом data.
elseif (array_key_exists('callback_query', $arrData)) < $chat_id = $arrData['callback_query']['message']['chat']['id']; $message = $arrData['callback_query']['data']; >?>
Кнопки будем отправлять в параметре reply_markup в методе sendMessage. Набор кнопок идет в таком формате:
Массив данных ( 'Тип клавиатуры' => Массив строк кнопок ( Массив кнопок строки ( Массив параметров кнопки ( ) ) ), // если предусмотрено 'Дополнительный параметр', )
Создадим два метода для разных клавиатур, на входе принимают массив строк кнопок, на выходе строку в формате JSON.
$data, ); return json_encode($inlineKeyboard); > private function getKeyBoard($data) < $keyboard = array( "keyboard" =>$data, "one_time_keyboard" => false, "resize_keyboard" => true ); return json_encode($keyboard); > ?>
Сам набор кнопок будет выглядеть вот так.
getKeyBoard([[["text" => "Голосовать"], ["text" => "Помощь"]]]); $inlineKeyboard = $this->getInlineKeyBoard([[ ['text' => hex2bin('F09F918D') . ' 0', 'callback_data' => 'vote_1_0_0'], ['text' => hex2bin('F09F918E') . ' 0', 'callback_data' => 'vote_0_0_0'] ]]); ?>
Во встроенных кнопках (inlineKeyboardButton) в качестве значения параметра callback_data будем передавать служебную информацию в виде action_type_count1_count2 , где
action — действие, в нашем случае это vote
type — тип кнопки: 1 — левая, 0 — правая
count1 — текущее значение левой кнопки
count2 — текущее состояние правой кнопки
В значении параметра text передаем бинарный код эмодзи в кодировке UTF-8 (список эмодзи), которые преобразуются из шестнадцатеричных данных в двоичные данные функцией hex2bin, и еще выведем текущее числовое значение счетчика кнопки.
Теперь нам остается только описать механизм определения команды и механизм ее обработки. Поэтому в методе init() создадим конструкцию оператора switch
"Приветствую, давайте начнем нашу практику. Нажмите на кнопку Голосовать.", 'chat_id' => $chat_id, // отправляем клавиатуру 'reply_markup' => $justKeyboard, ); $this->requestToTelegram($dataSend, "sendMessage"); break; // если пришла команда Голосовать case 'Голосовать': $dataSend = array( 'text' => "Выберите один из вариантов", 'chat_id' => $chat_id, // отправляем встроенную клавиатуру 'reply_markup' => $inlineKeyboard, ); $this->requestToTelegram($dataSend, "sendMessage"); break; // если запросили Помощь case 'Помощь': $dataSend = array( 'text' => "Просто нажмите на кнопку Голосовать.", 'chat_id' => $chat_id, ); $this->requestToTelegram($dataSend, "sendMessage"); break; // если вызвана встроенная кнопка case (preg_match('/^vote/', $message) ? true : false): // получаем новую клавиатуру $params = $this->setParams($message); $dataSend = array( 'reply_markup' => $params[0], 'message_id' => $arrData['callback_query']['message']['message_id'], 'chat_id' => $chat_id, ); // изменяем клавиатуру под выбранным сообщением $this->changeVote($dataSend, $params[1], $arrData['callback_query']['id']); break; // незапланированное действие обрабатываем как поумолчанию default: $dataSend = array( 'text' => "Не запланированная реакция, может просто нажмете на кнопку Голосовать.", 'chat_id' => $chat_id, ); $this->requestToTelegram($dataSend, "sendMessage"); break; > ?>
Давайте разберемся, что в этом коде происходит. Оператор switch принимает значение $message , которое может быть, как просто текст сообщения (в том числе команды), так и значение объекта callbackQuery .
При получении команды /start — мы выводим приветственное слово и набор кнопок: Голосовать, Помощь.
При получении команды Помощь, выводим простое текстовое сообщение.
При получении команды Голосовать, выводим текстовое сообщение и набор встроенных кнопок с параметром callback_data .
При получении не запланированного значения, выводим текстовое сообщение.
И самое интересное это когда принимаем значение в начале которого стоит action , в нашем случае это vote . Мы формируем новую клавиатуру изменяем в ней текстовое значение, увеличиваем счетчик у нажатой кнопки и подставляем новую служебную информацию в параметрах callback_data .
Для создания новой клавиатуры мы используем метод setParams() , а для отправки изменений мы используем метод changeVote(). Здесь остановим внимание на методах Bot API
editMessageReplyMarkup — меняем клавиатуру у заданного сообщения
answerCallbackQuery — позволяет выводить уведомление о проделанной работе CallbackQuery, мы его используем, уведомляя пользователя что он удачно проголосовал.
requestToTelegram($data, "editMessageReplyMarkup") ? "Вы проголосовали " . hex2bin($emoji) : "Непредвиденная ошибка, попробуйте позже."; // отправляем уведомление при любом результате $this->requestToTelegram([ 'callback_query_id' => $callback_query_id, 'text' => $text, 'cache_time' => 3, ], "answerCallbackQuery"); > private function setParams($data) < // разбиваем в массив по знаку _ $params = explode("_", $data); // увеличиваем значение или левой или правой кнопки $params[1] ? $params[2]++ : $params[3]++; // готови клавиатуру с новыми значениями callback_data $arr[] = $this->getInlineKeyBoard([[ [ 'text' => hex2bin('F09F918D') . ' ' . $params[2], 'callback_data' => 'vote_1_' . $params[2] . '_' . $params[3] ], [ 'text' => hex2bin('F09F918E') . ' ' . $params[3], 'callback_data' => 'vote_0_' . $params[2] . '_' . $params[3] ] ]]); // готовим эмодзи для уведомления $arr[] = $params[1] ? 'F09F918D' : 'F09F918E'; return $arr; > ?>
Подводим итоги
Мы рассмотрели некоторые способы взаимодействия между пользователем и ботом, в основном это элементы интерфейса бота.
Модель оптимизации информационного процесса взаимодействия пользователей с распределенными информационными ресурсами на базе чат-бота Текст научной статьи по специальности «Компьютерные и информационные науки»
информационное взаимодействие / информационный образовательный ресурс / субъект образовательного процесса / чат-бот / дерево взаимодействия / PHP / MySQL / information interaction / information educational resource / subject of the educational process / chatbot / interaction tree / PHP / MySQL
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Ступина М. В.
Современные основные профессиональные образовательные программы отличает высокая трудоемкость самостоятельной работы, что определяет цель настоящего исследования, заключающуюся в поиске новых и оптимизации существующих форм информационного взаимодействия между субъектами образовательного процесса и распределенными информационными ресурсами в условиях смешанного обучения. В настоящей работе предлагается модель процесса информационного взаимодействия интерактивного характера пользователей с распределенными информационными ресурсами на базе чат-бота . В статье последовательно представлен опыт создания чат-бота для мессенджера Telegram, реализующего модель информационного взаимодействия при организации самостоятельной работы (на примере изучения языков программирования). Рассмотрены структура предлагаемого программного решения и его компоненты, представлена физическая схема спроектированной базы данных. Разработано дерево взаимодействия , описывающее основные сценарии чат-бота . Результаты исследования могут быть использованы при реализации самостоятельной работы в различных учебных дисциплинах.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Ступина М. В.
ИНФОРМАЦИОННО-СПРАВОЧНЫЙ ЧАТ-БОТ ДЛЯ ОБУЧАЮЩИХСЯ И ПРЕПОДАВАТЕЛЕЙ ВУЗА НА ОСНОВЕ СОЦИАЛЬНОЙ СЕТИ VK И СИСТЕМЫ MOODLE
ПРОЕКТИРОВАНИЕ И РАЗРАБОТКА ЧАТ-БОТА ДЛЯ ПРЕДСТАВЛЕНИЯ РАСПИСАНИЯ В СОЦИАЛЬНОЙ СЕТИ
РАЗРАБОТКА ЧАТ-БОТА НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ PYTHON В МЕССЕНДЖЕРЕ «TELEGRAM»
ИСПОЛЬЗОВАНИЕ ЧАТ-БОТА В КАЧЕСТВЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ РЕСТОРАННОГО БИЗНЕСА
РАЗРАБОТКА ЧАТ-БОТА В КАЧЕСТВЕ ВИРТУАЛЬНОГО ПОМОЩНИКА ДЛЯ МОТИВАЦИИ СТУДЕНТОВ К ПОЛУЧЕНИЮ ПРОФЕССИИ
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Optimization of the information process model of user interaction with distributed information resources on the basis of a chatbot
Modern basic professional educational programs are distinguished by the high labor intensity of independent work, which determines the purpose of this study, which is to search for new and optimize existing forms of information interaction between the subjects of the educational process and distributed information resources in conditions of blended learning. In this paper, a model of the process of information interaction of the interactive nature of users with distributed information resources based on a chatbot is proposed. The article consistently presents the experience of creating a chatbot for the Telegram messenger, which implements the model of information interaction when organizing independent work (on the example of learning programming languages). The structure of the proposed software solution and its components are considered, the physical scheme of the designed database is presented. An interaction tree has been developed that describes the main scenarios of the chatbot . The results of the study can be used in the implementation of independent work in various academic disciplines.
Текст научной работы на тему «Модель оптимизации информационного процесса взаимодействия пользователей с распределенными информационными ресурсами на базе чат-бота»
Известия Кабардино-Балкарского научного центра РАН № 2(112) 2023
ИНФОРМАТИКА И ИНФОРМАЦИОННЫЕ ПРОЦЕССЫ
DOI: 10.35330/1991-6639-2023-2-112-30-38 EDN: HZBPJB
Модель оптимизации информационного процесса взаимодействия пользователей с распределенными информационными ресурсами на базе чат-бота
Аннотация. Современные основные профессиональные образовательные программы отличает высокая трудоемкость самостоятельной работы, что определяет цель настоящего исследования, заключающуюся в поиске новых и оптимизации существующих форм информационного взаимодействия между субъектами образовательного процесса и распределенными информационными ресурсами в условиях смешанного обучения. В настоящей работе предлагается модель процесса информационного взаимодействия интерактивного характера пользователей с распределенными информационными ресурсами на базе чат-бота. В статье последовательно представлен опыт создания чат-бота для мессенджера Telegram, реализующего модель информационного взаимодействия при организации самостоятельной работы (на примере изучения языков программирования). Рассмотрены структура предлагаемого программного решения и его компоненты, представлена физическая схема спроектированной базы данных. Разработано дерево взаимодействия, описывающее основные сценарии чат-бота. Результаты исследования могут быть использованы при реализации самостоятельной работы в различных учебных дисциплинах.
Ключевые слова: информационное взаимодействие, информационный образовательный ресурс, субъект образовательного процесса, чат-бот, дерево взаимодействия, PHP, MySQL
Поступила 06.03.2023, одобрена после рецензирования 20.03.2023, принята к публикации 24.03.2023
Для цитирования. Ступина М. В. Модель оптимизации информационного процесса взаимодействия пользователей с распределенными информационными ресурсами на базе чат-бота // Известия Кабардино-Балкарского научного центра РАН. 2023. № 2(112). С. 30-38. DOI: 10.35330/1991-6639-2023-2-112-30-38
Optimization of the information process model of user interaction with distributed information resources on the basis of a chatbot
Don State Technical University 344003, Russia, Rostov-on-Don, pl. Gagarina, 1
Abstract. Modern basic professional educational programs are distinguished by the high labor intensity of independent work, which determines the purpose of this study, which is to search for new and optimize existing forms of information interaction between the subjects of the educational process and distributed information resources in conditions of blended learning. In this paper, a model of the process of information interaction of the interactive nature of users with distributed information resources
© Ступина М. В., 2023
Донской государственный технический университет 344003, Россия, г. Ростов-на-Дону, пл. Гагарина, 1
MSC: 68P20; 68U35
based on a chatbot is proposed. The article consistently presents the experience of creating a chatbot for the Telegram messenger, which implements the model of information interaction when organizing independent work (on the example of learning programming languages). The structure of the proposed software solution and its components are considered, the physical scheme of the designed database is presented. An interaction tree has been developed that describes the main scenarios of the chatbot. The results of the study can be used in the implementation of independent work in various academic disciplines.
Keywords: information interaction, information educational resource, subject of the educational process, chatbot, interaction tree, PHP, MySQL
Submitted 06.03.2023, approved after reviewing 20.03.2023, accepted for publication 24.03.2023
For citation. Stupina M.V. Optimization of the information process model of user interaction with distributed information resources on the basis of a chatbot. News of the Kabardino-Balkarian Scientific Center of RAS. 2023. No. 2(112). Pp. 30-38. DOI: 10.35330/1991-6639-2023-2-112-30-38
Современный этап развития общества характеризуется стремительными процессами цифровизации всех сфер человеческой деятельности, в том числе и системы образования. Следует отметить, что вопросы использования средств информационно-коммуникационных технологий (ИКТ) в образовательном процессе рассматриваются уже не одно десятилетие и сопровождаются короткими инновационными циклами [1]. Однако пандемия COVID-19 c 2020 года увеличила практику внедрения цифровых технологий, изменило характер их использования и способствовала еще большему их распространению: многие вузы предлагают основные профессиональные образовательные программы (ОПОП) в он-лайн-формате (например, при реализации заочной формы организации учебного процесса), некоторые организационные формы обучения (лекции, семинары, лабораторные работы и др.) и информационного взаимодействия периодически или на регулярной основе осуществляются в дистанционном или гибридном формате, а также все большее внимание уделяется использованию и развитию информационно-образовательной среды (ИОС) вуза.
Использование средств ИКТ в образовании меняет его формат на смешанный, сочетающий в себе элементы традиционного очного обучения и интерактивного онлайн-обуче-ния. В свою очередь это определяет необходимость изменения структуры и содержания учебных дисциплин ОПОП. Кроме того, особого внимания требует и организация самостоятельной работы — активной, осознанной, системной, целенаправленной и контролируемой [2, 3] — как одного из важнейших элементов образовательного процесса, доля которой, в соответствии с текущей редакцией ФГОС ВО, составляет не менее 50 % трудоемкости ОПОП [3].
Самостоятельная работа в смешанном обучении практически полностью реализуется в формате онлайн, что требует создания условий информационного взаимодействия, которые включают в себя взаимодействие как между пользователями — субъектами образовательного процесса, так и с информационными ресурсами, размещенными в сети Интернет в различных хранилищах, порталах и средах1. Создаваемые условия информационного взаимодействия должны способствовать оперативности получения информационных ресурсов, оптимальным образом обеспечивать доступ к учебному контенту, его передачу и хранение.
1 Ступина М.В. Формирование компетентности студентов в области использования инструментальных средств разработки информационных систем с применением облачных технологий (на примере подготовки будущих бакалавров-разработчиков информационных систем): дис. . канд. пед. наук: 13.00.08. М., 2018. 197 с.
Таким образом, становится актуальной задача оптимизации информационного взаимодействия между субъектами образовательного процесса и распределенным комплексом информационных ресурсов в условиях смешанного обучения и увеличивающейся трудоемкости самостоятельной работы.
МОДЕЛЬ ИНФОРМАЦИОННОГО ПРОЦЕССА ВЗАИМОДЕЙСТВИЯ С РАСПРЕДЕЛЕННЫМИ ИНФОРМАЦИОННЫМИ РЕСУРСАМИ
На текущем этапе развития средств ИКТ традиционная схема информационного взаимодействия субъектов образовательного процесса претерпевает существенную трансформацию в связи с добавлением такого компонента, как интерактивные средства обучения, которые будем рассматривать как «программные, аппаратно-программные и технические средства и устройства, функционирующие на базе микропроцессорной и вычислительной техники, обеспечивающие обучение в диалоговом взаимодействии пользователя с компью-тером»2. Таким образом, информационное взаимодействие осуществляется в диалоговом режиме между субъектами образовательного процесса и информационными образовательными ресурсами (ИОР), которые, как отмечает в своей работе Е. Я. Бутко [1], являются частью информационных ресурсов, выполняя прежде всего функции информирования и передачи знаний.
Выделим основные характеристики процесса информационного взаимодействия [4]:
— возможность осуществления информационной деятельности по сбору, обработке, продуцированию, передаче, хранению информации;
— опосредованность информационного взаимодействия при использовании соответствующего аппаратного и программного обеспечения, технических средств и устройств;
— оперативность доступа к ИОР при наличии Интернет-соединения;
— индивидуализация работы с интерактивными средствами обучения;
— массовость, обусловленная возможностью подключения неограниченного количества пользователей.
Опираясь на исследование Е. А. Носкова [4], можно сделать вывод, что информационное взаимодействие требует наличия интерактивного режима «диалога» множества пользователей с комплексом дидактически обусловленных распределенных ИОР. Актуальность проблемы информационного взаимодействия с ИОР усиливается на фоне персона-лизации обучения в ИОС и тенденции формирования индивидуальных образовательных траекторий.
Проведенный анализ научной литературы по теме исследования показал, что одним из перспективных направлений автоматизации процессов обработки информации (хранение, воспроизведение, редактирование и др.), реализации интерактивного «диалога» с пользователями, организации дистанционной работы с использованием привычных технических и программных средств (прежде всего таких, как мобильные устройства и мессенджеры) является применение чат-ботов.
Преимущества использования чат-ботов в образовательном процессе: реализация диалогового режима с пользователем в комфортной и привычной среде одного из мессенджеров; кроссплатформенность и аппаратная независимость; отсутствие необходимости устанавливать дополнительное программное обеспечение, а также использовать аутентификацион-ные данные для входа на ту или иную платформу; повышение мотивации и уровня заинтересованности за счет возможности постоянной коммуникации; возможность автоматизации
2 АртюхинаМ. С. Интерактивное взаимодействие как основа образовательной среды вуза [Электронный ресурс] // Современные проблемы науки и образования. 2014. № 6. URL: https://science-education.ru/m/article/view?id=17006 (дата обращения: 28.01.2023).
учебных процессов (обратной связи; консультаций; проведения текущего, рубежного, промежуточного и др. контроля).
С учетом изложенного выше для оптимизации процесса информационного взаимодействия, реализации интерактивного диалога между субъектами образовательного процесса и распределенным комплексом ИОР, повышения оперативности доступа и усиления мо-тивационной составляющей самостоятельной работы в смешанном обучении предлагается программное решение на базе чат-бота. Схема процесса информационного взаимодействия между субъектами образовательного процесса и распределенным комплексом ИОР, в структуру которой включено программно-техническое средство — чат-бот, представлена на рисунке 1.
Рис. 1. Модель процесса информационного взаимодействия между субъектами образовательного процесса и распределенным комплексом ИОР на базе чат-бота
Fig. 1. Model of the process of information interaction between the subjects of the educational process and a distributed complex of IER based on a chatbot
Программная реализация чат-бота
В рамках исследования было разработано программное обеспечение, реализующее представленную схему процесса информационного взаимодействия между субъектами образовательного процесса и распределенным комплексом ИОР на базе чат-бота.
Чат-бот предназначен для самостоятельной работы при изучении языков программирования, позволяя: получить учебные материалы курса (по модулям, по темам); пройти тестовый контроль по материалам модуля; отслеживать статистику изучения материалов; обратиться к справочнику языка и разбору кейсов.
Общий принцип работы с чат-ботом выглядит следующим образом. При нажатии на команду /start (Начало) для пользователя открывается новая сессия. Начало диалога включает выбор языка программирования для изучения. Для его выбора необходимо нажать кнопку, соответствующую одному из доступных языков программирования. После выбора языка программирования пользователю предлагается выбрать модуль для изучения. После выбора модуля для изучения пользователю доступен набор кнопок для выбора темы в рамках этого модуля. После выбора темы пользователь получает видеоурок. После просмотра видеоурока пользователь имеет возможность отметить его просмотренным для формирования статистики прохождения модуля. После каждого выбора (языка, модуля, темы) у пользователя есть возможность вернуться к предыдущему шагу путем нажатия кнопки «Назад». После прохождения уроков пользователь может пройти тест по модулю, нажав соответствующую кнопку на клавиатуре. Для каждого вопроса представлены варианты ответов на внутренней клавиатуре чат-бота.
Для реализации чат-бота были выбраны следующие программно-инструментальные средства: система управления базами данных MySQL, серверный язык программирования PHP и фреймворк Yii2. В качестве программной среды разработки использовался редактор phpStorm, а для администрирования системой управления базами данных MySQL — утилита phpMyAdmin. Обмен данными c чат-ботом происходит в формате JSON. В качестве мессен-джера для организации диалога выбран Telegram.
Telegram-бот размещен на хостинге и регулярно отслеживает получение новых сообщений. Для этого используется специальный метод setWebhook: он позволяет указать URL-адрес и получать входящие обновления через исходящий веб-перехватчик. Всякий раз, когда для бота появляется обновление, будет отправлен HTTPS-запрос POST на указанный URL-адрес, содержащий обновление в формате JSON. Для проверки, что запрос Webhook исходит от Telegram, в URL-адресе используется секретный токен доступа.
При реализации чат-бота был использован Telegram Bot API. Bot API представляет себой HTTP-интерфейс для работы с ботами в Telegram. Внутри работает MTProto — промежуточный сервер, который обрабатывает все шифрование и реализует взаимодействие с Telegram API. Взаимодействие осуществляется с этим сервером через простой HTTPS-интерфейс, который предлагает упрощенную версию Telegram API.
Структура разработанного программного решения включает в себя следующие основные компоненты:
1. База данных MySQL, где содержатся ссылки на ИОР, банк вопросов и другой учебный контент, сгруппированный в соответствии с тематическим планом, а также хранятся прогресс освоения курса и учебные результаты каждого пользователя.
2. Веб-приложение для преподавателя, которое позволяет создавать новые модули и темы; добавлять, редактировать и удалять учебный контент, отслеживать прогресс выполнения курса.
3. Приложение чат-бот Telegram, которое по запросу-команде получает данные из базы данных и предоставляет их пользователю, сохраняет прогресс в базе данных, проводит тестирование по модулю и проверяет правильность ответов.
На рисунке 2 показана схема базы данных, разработанная на основе реляционной модели данных. База данных содержит 9 таблиц и имеет возможность дальнейшего расширения.
Рис. 2. Схема базы данных Fig. 2. Database Scheme
Алгоритм работы чат-бота построен по древовидному принципу проверки типовых запросов, поступающих от пользователя. Запросы — это текстовые команды, которые подаются чат-боту с использованием клавиатуры или в виде сообщений в диалоговом окне. Каждая команда-запрос от пользователя сравнивается с символом-шаблоном (в т.ч. с использованием регулярных выражений), и в зависимости от события вызывается соответствующая функция обработки, определяющая бизнес-логику работы чат-бота.
На рисунке 3 представлено в схематичном виде дерево взаимодействия чат-бота Telegram.
Рис. 3. Дерево взаимодействия чат-бота Fig. 3. Chatbot Interaction Tree
В таблице 1 представлены основные события, на которые может ответить разработанный чат-бот. Поскольку чат-бот основан на бизнес-правилах, некоторые события в таблице представлены в общем — шаблонном виде и заключены в операторные скобки <>. При навигации в чат-боте эти команды выводятся в виде кнопок клавиатуры (inline или reply). При неизвестной чат-боту команде выводится соответствующее сообщение об ошибке.
Таблица 1. События чат-бота
Table 1. Chatbot events
Событие Реакция на событие
/start или Начать Вывод приветственного сообщения и клавиатуры для взаимодействия
/help или Помощь Вывод информации о чат-боте, справки по работе с чат-ботом и навигации
Вывод перечня модулей
Назад Возврат в меню на уровень выше
Статистика прохождения Показывать перечень выполненных тем модуля
Тестирование Начать тестирование по материалам модуля
/stop или Остановить Остановить работу чат-бота
В ответ на сообщение пользователя он обязательно получает ответ, сгенерированный функцией-обработчиком поступившей команды. Ответ возвращается в виде текстового сообщения, стикера или видеофайла в зависимости от запроса.
Основной метод, используемый в ответе чат-бота, sendMessage ([$chat_id, $text,$parse_mode,$reply_markup]) отправляет сообщение $text в чат пользователя $chat_id. $parse_mode позволяет задать формат html, а $reply_markup — вывести клавиатуру.
Функции-обработчики выполняют запросы базе данных, подсчет данных и формируют ответ. Взаимодействие с БД происходит с использованием драйвера PDO_MYSQL. При невозможности обработки запроса срабатывает условие по умолчанию, и пользователь получает сообщение о невозможности обработать эту команду.
Современная парадигма образования требует переосмысления педагогического сопровождения самостоятельной работы обучающихся в условиях смешанного обучения с целью формирования как профессиональных компетенций, так и гибких навыков самоорганизации, саморазвития, самоконтроля и тайм-менеджмента. Предлагаемое решение оптимизации процесса информационного взаимодействия интерактивного характера между субъектами образовательного процесса и распределенным комплексом ИОР на базе чат-бота обеспечивает реализацию идеи личностно-ориентированного и профессионально-направленного подходов к обучению.
Представленная модель информационного взаимодействия требует строгого следования сценарию организации самостоятельной работы для достижения дидактических целей обучения в рамках того или иного учебного курса. Структура хранения данных позволяет адаптировать чат-бот под любую дисциплину за счет блочно-модульного структурирования
учебного контента, поддержки возможности саморефлексии. Кроме того, разработанный набор бизнес-правил исключает попытки отойти от предписанного сценария, что фокусирует внимание пользователя на задачах, рассматриваемых в рамках самостоятельной работы, методически организованной преподавателем.
1. Бутко Е. Я. Формирование информационных образовательных ресурсов // Образовательные ресурсы и технологии. 2015. № 4(12). С. 17-23.
2. Тедорадзе Т. Г., РомановаМ. Л., Шапошников В. Л., Глущенко Т. Е. Функции самостоятельной работы студентов // Ученые записки университета Лесгафта. 2021. № 2(192). С.312-317.
3. Бенгина Т. А., Лиманова Л. В. Методическое обеспечение самостоятельной работы студентов // Известия Самарского научного центра Российской академии наук. Социальные, гуманитарные, медико-биологические науки. 2022. № 87. С. 27-33.
4. Носков Е. А. Информационное взаимодействие как фактор подготовки студентов в области национальной безопасности // Вестник Оренбургского государственного университета. 2020. № 5(228). С. 57-65.
5. Киреева Н. А., Родионов А. С., Фархутдинов Р. И., Хусаинов И. Р. Разработка чат-бота по истории для применения в техническом вузе // Электротехнические и информационные комплексы и системы. 2018. № 3. С. 73-79.
6. Будникова А. С., Бабенкова О. С. Использование чат-ботов при изучении иностранного языка // Ученые записки. Электронный научный журнал Курского государственного университета. 2020. № 3(55). С. 146-150.
Информация об авторе
Ступина Мария Валерьевна, канд. пед. наук, доцент кафедры информационных технологий, Донской государственный технический университет;
344003, Россия, г. Ростов-на-Дону, пл. Гагарина, 1;
masamvs@bk.ru, ORCID: https://orcid.org/0000-0002-6394-6966
1. Butko E.Ya. Formation of information educational resources. Obrazovatel’nye resursy i tekhnologii [Educational resources and technologies]. 2015. No. 4(12). Pp. 17-23. (In Russian)
2. Tedoradze T.G., Romanova M.L., Shaposhnikov V.L., Glushchenko T.E. Functions of independent work of students. Uchenye zapiski universiteta imeni P.F. Lesgafta. 2021. No. 2(192). Pp. 312-317. (In Russian)
3. Bengina T.A., Limanova L.V. Methodological support of independent work of students. Izvestiya Samarskogo nauchnogo tsentra Rossiyskoy akademii nauk. Sotsial’nye, gumanitarnye, mediko-biologicheskie nauki [Proceedings of the Samara Scientific Center of the Russian Academy of Sciences. Social, humanitarian, medical and biological sciences]. 2022. No. 87. Pp. 27-33. (In Russian)
4. Noskov E.A. Information interaction as a factor in preparing students in the field of national security. Vestnik Orenburgskogo gosudarstvennogo universiteta [Bulletin of the Orenburg State University]. 2020. No. 5(228). Pp. 57-65. (In Russian)
5. Kireeva N.A., Rodionov A.S., Farkhutdinov R.I., Khusainov I.R. Development of a chatbot on history for use in a technical university. Elektrotekhnicheskie i informatsionnye kompleksy i sistemy [Electrical and information complexes and systems]. 2018. No. 3. Pp. 73-79. (In Russian)
6. Budnikova A.S., Babenkova O.S. Using chatbots when learning a foreign language. Uchenye zapiski. Elektronnyy nauchnyy zhurnal Kurskogo gosudarstvennogo universiteta [Scientific notes. Electronic scientific journal of Kursk State University]. 2020. No. 3(55). Pp. 146-150. (In Russian)
Information about the author