Как управлять состоянием и сценами#
Установка#
Перед началом необходимо установить библиотеку и инициировать бота, подробно этот процесс описан здесь: Как импортировать библиотеку и инициировать своего бота.
Как управлять состоянием пользователя#
По умолчанию в данной библиотеке состояние хранится в карте типа ключ значение. В качестве ключа может быть любая строка в качестве значения, любой объект. Идентификатором состояния является сочетания идентификатора чата и идентификатора отправителя, то есть у каждого сочетания chatId + senderId будет отдельное состояние.
В качестве примера был создан простой бот для имитации регистрации пользователя. Чтобы сохранить строку в состоянии используется конструкция ctx.session.{var_name} = "string example"
.
Ссылка на пример: state-bot.js.
const WhatsAppBot = require('@green-api/whatsapp-bot')
const session = WhatsAppBot.session
const Stage = WhatsAppBot.Stage
const Scene = WhatsAppBot.BaseScene
const bot = new WhatsAppBot({
idInstance: "{{INSTANCE_ID}}",
apiTokenInstance: "{{TOKEN}}",
})
const loginScene = new Scene("loginScene")
loginScene.enter((ctx) => ctx.reply("Привет! Этот бот - пример использования состояния.\nПожалуйста введите логин:"))
loginScene.on("text", (ctx) => {
const login = ctx.message.text
if (login && login.length >= 6 && login.length <= 12) {
ctx.session.login = login
ctx.reply("Логин \"" + login + "\" - успешно сохранен.\nПридумайте пароль:")
ctx.scene.enter("passwordScene")
} else {
ctx.reply("Логин должен быть от 6 до 12 символов")
}
})
loginScene.on("message", (ctx) => {
ctx.reply("Сообщение должно содержать текст!")
})
const passwordScene = new Scene("passwordScene")
passwordScene.on("text", (ctx) => {
const password = ctx.message.text
if (password && password.length >= 6 && password.length <= 12) {
ctx.session.password = password
ctx.reply("Успех! Ваш логин: " + ctx.session.login + "\nВаш пароль: " + ctx.session.password)
ctx.scene.leave()
} else {
ctx.reply("Пароль должен быть от 6 до 12 символов")
}
})
const stage = new Stage([loginScene, passwordScene]) //регистрация сцен
bot.use(session()) //инициация обработчика сессии
bot.use(stage.middleware()) //инициация обработчика сцен
bot.on('message', (ctx) => ctx.scene.enter('loginScene')) //активация первой сцены
bot.launch() //запуск бота
Список примеров#
Описание | Ссылка на пример |
---|---|
Как инициализировать обработчик | hello-bot.js |
Сцена "Эхо" | echo-bot.js |
Как фильтровать по типу уведомлений | media-bot.js |
Как фильтровать по тексту сообщения | filter-bot.js |
Как работать с состоянием бота | state-bot.js |
Пример готового чат бота | demo-bot |