Перейти к содержанию

Как управлять состоянием и сценами#

Установка#

Перед началом необходимо установить библиотеку и инициировать бота, подробно этот процесс описан здесь: Как импортировать библиотеку и инициировать своего бота.

Как управлять состоянием пользователя#

По умолчанию в данной библиотеке состояние хранится в карте типа ключ значение. В качестве ключа может быть любая строка в качестве значения, любой объект. Идентификатором состояния является сочетания идентификатора чата и идентификатора отправителя, то есть у каждого сочетания 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