Приветствую, авантюрист. Сразу предвидя кучу сопливых комментаторов, отвечу. Я не пропагандирую и не заставляю никого использовать Max. Мне никто не заплатил за эту статью (к сожалению). Да, я прекрасно осознаю мерзость текущей принудительной политики распространения МАКСА. Но нам все равно придется с ним взаимодействовать. В особенности айтишникам. Поэтому, если ты очередной мамкин ломатель системы, который не способен ни на что, кроме как писать комментарии, то просто пропусти эту статью. А если ты айтишник, который адекватно оценивает текущую ситуацию и понимает неизбежность происходящего или просто хочет прокачать свои скилы, то милости прошу.
И да, в МАX можно писать ботов, причем довольно с большой функциональностью, и там есть АПИ и прочие плюшки. Это к слову о тех, кто утверждает, что в МАКСе нет ничего, кроме сообщений, которые через раз доходят. И таких довольно много. Людей, которые даже в глаза не видели продукт, усерясь спорят о его непригодности.
Теория
Итак, чат-боты появились довольно давно в мессенджере «Телеграм» или даже раньше. Чат-бот — это чат, на другой стороне которого находится не собеседник-человек, а собеседник-программа. Программа обрабатывает ваши сообщения и выдает вам в ответ свои сообщения. По сути, изобрели терминал только в мессенджере. ) Весь ввод-вывод исключительно текстовый. Чат-бот работает через токены. Регистрируя бота в системе (МАКС, «Телеграм» — не важно), она выдаст тебе токен, который ты будешь использовать в своем боте. Именно по этому токену и будет происходить коммуникация между системой и чат-ботом.
Регистрация чат-бота
Для регистрации бота нам нужно попасть в МАКС для бизнеса. Для этого переходим по ссылке https://business.max.ru/
Сразу стоит оговориться, что прямо на сайте написано.
А это значит, что если делаешь бота или канал для своей частной организации, то надо еще почитать, где, как и куда тебе надо зарегистрироваться. Тут я не подскажу, но, думаю, несложно, и информации в сети куча. Мы же работаем как школа, а школы и ВУЗы уже имеют возможность создавать каналы и чат-ботов. В этом плане нам легче.
Жмем «Войти в MAX для бизнеса». Нам предлагают авторизоваться. Если частная организация, то просто авторизуемся. А если школа, то, чтобы сработала магия и тебе дали доступ, тут надо зайти за пользователя, который является администратором организации на «Госуслугах». По крайней мере, в теории.
Дальше просто жмём «Создать бота», заполняем необходимые поля, такие как название, имя ссылки и т. д. После заполнения твой бот отправится на модерацию. Написано до 24 часов.
После одобрения панель будет выглядеть примерно так
Жмем в окошке чат-бота «настроить» и там видим наш заветный токен.
На этом регистрация окончена. Токен у нас есть.
Подготовка среды
Итак, у нас есть некая документация для создания бота, ознакомиться можно с ней вот тут https://dev.max.ru/docs
Из этой же документации мы видим, что писать код мы можем только на JavaScript или на (прости господи) Golang. Библиотек для работы с МАКСом на других языках пока нет. Но, думаю, появится хотя бы на Python. Писать мы будем под Альт Линукс, а значит, JavaScript нам не подойдет, так как nodejs в официальных репозиториях только версии 16, а требуется не ниже 18. Возиться и устанавливать новый nodejs мне было лень, а значит, будем делать на GO. Сразу обозначу свое отношение к этому языку — мерзостный язык. Не понимаю и не разделяю восторгов его фанатов. Хотя опыта у меня с ним немного. Возможно, не до конца вкусил.
Ну что ж, меньше слов, погнали. Ставим компилятор и прочую нечисть языка GO
# apt-get insstall golang -y
Далее создадим каталог для бота
$ mkdir max_bot && cd max_bot
Теперь инициируем проект
$ go mod init first-max-bot
Далее установи библиотеку для работы с MAX API на golang
$ go get github.com/max-messenger/max-bot-api-client-go
Подготовка выполнена, теперь в каталоге нужно создать файл нашего бота
$ touch bot.go
В нем мы и будем писать наш код. Кстати, к документации, которую я привел выше, если ты тоже решил писать на GO, советую также ознакомиться с гихабом вот тут https://github.com/max-messenger/max-bot-api-client-go/tree/main/docs . Там есть хорошие примеры.
Написание кода
Разберем пример из документации. Первым делом мы подключаем всякие нужные штуки
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
maxbot "github.com/max-messenger/max-bot-api-client-go"
"github.com/max-messenger/max-bot-api-client-go/schemes"
)
Затем создаем главную функцию нашего модуля
func main() {
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGTERM, os.Interrupt)
defer stop()
api, _ := maxbot.New(os.Getenv("TOKEN"))
// Some methods demo:
info, err := api.Bots.GetBot(ctx)
fmt.Printf("Get me: %#v %#v", info, err)
for upd := range api.GetUpdates(ctx) { // Чтение из канала с обновлениями
switch upd := upd.(type) { // Определение типа пришедшего обновления
case *schemes.MessageCreatedUpdate:
// Отправка сообщения
message := maxbot.NewMessage().
SetChat(upd.Message.Recipient.ChatId).
SetText("Hello from Bot")
api.Messages.Send(ctx, message)
}
}
}
Вот тут мы прописываем наш токен
api, _ := maxbot.New(os.Getenv("TOKEN"))
В примере советуют брать его из переменной среды окружения, что верно, но я поступлю проще и просто впишу его строкой
api, _ := maxbot.New(«ТУТ Я ВСТАВЛЯЮ МОЙ ТОКЕН»)
Следующий код
fmt.Printf("Get me: %#v %#v", info, err)
Выводит некую информацию о боте. Она нужна для нас самих. Оставим ее, мало ли пригодится.
for upd := range api.GetUpdates(ctx) — это начало нашего цикла обработки сообщений. Он работает бесконечно.
А эти строчки отправляют сообщения в чат
message := maxbot.NewMessage().
SetChat(upd.Message.Recipient.ChatId).
SetText("Hello from Bot")
api.Messages.Send(ctx, message)
Данный бот будет просто отвечать на каждое сообщение от собеседника фразой «Hello from Bot».
Если ты хочешь получить сообщение, то используй следующий код
msg := upd.Message.Body.Text
На самом деле этого более чем достаточно, чтобы уже делать полноценного бота. Ты можешь получить, что тебе написал собеседник, и отправить ему нужную информацию. К примеру, если собеседник отправит сообщение «помощь», выведем ему некую подсказку. Сделать это можно так.
msg := upd.Message.Body.Text
if msg == «помощь» {
message := maxbot.NewMessage().
SetChat(upd.Message.Recipient.ChatId).
SetText("Это помощь: наш бот может то-то и так-то, а для вот этого напишите то-то")
api.Messages.Send(ctx, message)
}
Итог
Как видишь, написать простейшего бота не сложно. В качестве реально рабочего бота я реализовал простейший функционал: собеседник отправляет класс, например 6а, бот в ответ выдает ему расписание для данного класса.
Так как наше расписание хранится в базе данных, то подключиться боту к базе и выбрать оттуда нужные данные не составило труда. Работа с базами данных на языке GO, естественно, есть.
Вот так это работает. Как и сказал, функционал простейший, но на самом деле чертовски полезный. Дальше можно развивать. Например, сделать указание даты или вывод времени и т. д. Боты в МАКСЕ умеют и меню, и кнопки, и другие штуки, но об этом уже в следующих статьях.
А пока. Удачи. Авантюрист.