umbot - это универсальный фреймворк для создания чат-ботов и голосовых навыков. Основные преимущества:
npm install umbot
import { Bot, BotController, WELCOME_INTENT_NAME } from 'umbot';
// Создаем контроллер с логикой навыка
class MyController extends BotController {
public action(intentName: string): void {
switch (intentName) {
case WELCOME_INTENT_NAME:
this.text = 'Привет! Я новый навык.';
this.buttons.addBtn('Помощь');
break;
case 'help':
this.text = 'Я умею отвечать на команды и показывать кнопки';
break;
default:
this.text = 'Извините, я вас не понял';
break;
}
}
}
// Инициализируем бота
const bot = new Bot();
// Настраиваем команды
bot.initConfig({
intents: [
{
name: 'help',
slots: ['помощь', 'что ты умеешь'],
},
],
});
// Настраиваем параметры
bot.initParams({
json: __dirname + '/data',
error_log: __dirname + '/logs',
isLocalStorage: true,
});
// Подключаем контроллер
const controller = new MyController();
bot.initBotController(controller);
bot.start('localhost', 3000);
Базовый класс для реализации логики навыка. Предоставляет:
this.text = 'Ответ пользователю'; // Текст ответа
this.tts = 'Ответ для озвучки'; // TTS версия (опционально)
this.buttons
.addBtn('Кнопка 1') // Простая кнопка
.addBtn('Ссылка', 'https://...') // Кнопка-ссылка
.addBtn('Действие', null, {
// Кнопка с данными
action: 'custom',
value: 123,
});
this.card
.addImage('image.jpg') // Добавить изображение
.addTitle('Заголовок') // Добавить заголовок
.addDescription('Описание'); // Добавить описание
// Сохранение данных
this.userData.counter = 42;
// Получение данных
const counter = this.userData.counter || 0;
bot.initConfig({
intents: [
{
name: 'start_game',
slots: ['начать игру', 'играть', 'старт'],
},
],
});
mmApp.addCommand('greeting', ['привет', 'здравствуй'], (cmd, controller) => {
controller.text = 'Здравствуйте!';
});
src/
├── controllers/ # Контроллеры с логикой
├── types/ # TypeScript типы
├── utils/ # Вспомогательные функции
├── config/ # Конфигурация
└── index.ts # Точка входа
interface IGameState {
score: number;
level: number;
lastAction?: string;
}
class GameController extends BotController<IGameState> {
public action(intentName: string): void {
// Теперь this.userData типизирован как IGameState
this.userData.score = 100;
}
}
try {
const result = await this.processUserInput();
this.text = `Успешно: ${result}`;
} catch (error) {
console.error('Ошибка:', error);
this.text = 'Извините, произошла ошибка';
}
// Проверка первого запуска
if (!this.userData.initialized) {
this.userData.initialized = true;
this.userData.score = 0;
}
// Сброс состояния
if (intentName === 'restart') {
this.userData = {};
this.text = 'Игра начата заново';
}
import { BotTest } from 'umbot';
const bot = new BotTest();
bot.initBotController(new MyController());
// Запуск тестирования
bot.test();
// В контроллере
console.log('Данные:', this.userData);
console.log('Команда:', this.userCommand);
// В конфигурации
bot.initParams({
error_log: './logs',
isDevMode: true,
});
Достаточно указать соответствующий токен в параметрах:
bot.initParams({
telegram_token: 'YOUR_TOKEN', // Для Telegram
vk_token: 'YOUR_TOKEN', // Для VK
viber_token: 'YOUR_TOKEN', // Для Viber
});
А также сказать самой библиотеке, какая платформа используется:
const bot = new Bot(T_VK);
Достаточно сохранить чувствительные данные в .env файл, передав путь к нему:
bot.initConfig({
env: './.env', // путь до файла
});
Пример содержимого .env файла:
TELEGRAM_TOKEN=your-telegram-token
VK_TOKEN=your-vk-token
VK_CONFIRMATION_TOKEN=your-vk-confirmation-token
VIBER_TOKEN=your-viber-token
YANDEX_TOKEN=your-alisa-token
MARUSIA_TOKEN=your-marusia-token
DB_HOST=localhost
DB_USER=user
DB_PASSWORD=password
DB_NAME=bot_db
Данные в this.userData
автоматически сохраняются между сессиями. Выберите способ хранения через параметр
isLocalStorage
:
bot.initParams({
isLocalStorage: true, // Файловое хранилище
// или
isLocalStorage: false, // База данных
});
this.buttons.addBtn('Да').addBtn('Нет').addBtn('Не знаю');
this.card.addImage('image.jpg', 'Заголовок', 'Описание').addTitle('Галерея изображений');