@dieugene/ya-cloud-calls-router
Version:
Центральный диспетчер вызовов для Yandex Cloud функций с поддержкой маршрутизации событий, обработки веб-хуков, очередей сообщений и управления Telegram ботами
274 lines (209 loc) • 8.68 kB
Markdown
# Ya Cloud Calls Router
Центральный диспетчер вызовов для Yandex Cloud функций с поддержкой маршрутизации событий, обработки веб-хуков, очередей сообщений и управления Telegram ботами.
## Описание
`/ya-cloud-calls-router` - это универсальный роутер для облачных функций Yandex Cloud, который обеспечивает централизованную обработку различных типов событий:
- 📡 **Внешние JSON запросы** - веб-хуки, API вызовы
- ⏰ **Таймерные события** - запланированные задачи
- 📨 **Сообщения из очередей** - асинхронная обработка
- 🤖 **Telegram боты** - обработка обновлений и веб-хуков
- 🧪 **Тестовые вызовы** - отладка и тестирование
## Установка
```bash
npm install /ya-cloud-calls-router
```
## Быстрый старт
```javascript
const router = require('@dieugene/ya-cloud-calls-router');
// Инициализация с обработчиком бота
const botHandler = {
async process(input, botToken) {
// Логика обработки бота
return { success: true };
},
async process_webhook(input, botToken) {
// Логика обработки веб-хука
return { success: true };
},
// Регистрация обработчиков диспетчера
reg_dispatcher_handlers({ Timers, Queues, Webs, Admins }) {
// Регистрация обработчиков таймеров
Timers.reg(async (input) => {
console.log('Timer event:', input);
return true;
});
// Регистрация обработчиков очередей
Queues.reg(async (message) => {
console.log('Queue message:', message);
return true;
});
// Регистрация веб-обработчиков
Webs.reg(async (input) => {
console.log('Web request:', input);
return true;
});
// Регистрация админ-обработчиков
Admins.reg.json(async (input) => {
console.log('Admin JSON:', input);
return { result: 'processed' };
});
}
};
// Инициализация роутера
router.init(botHandler);
// Экспорт обработчика для Yandex Cloud
module.exports.handler = router.handler;
```
## API
### Основные методы
#### `router.init(handler)`
Инициализирует роутер с обработчиком бота.
**Параметры:**
- `handler` - объект с методами обработки
#### `router.handler(event, context)`
Основная функция-обработчик для Yandex Cloud Function.
**Возвращает:** Promise с результатом обработки
### Структура обработчика
Обработчик должен реализовывать следующие методы:
```javascript
const handler = {
// Обязательный метод обработки основных событий
async process(input, botToken) {
// input: { action, data: { string, object } }
// botToken: string (при работе с ботами)
return result;
},
// Опциональный метод обработки веб-хуков
async process_webhook(input, botToken) {
return result;
},
// Опциональная регистрация диспетчеров
reg_dispatcher_handlers({ Timers, Queues, Webs, Admins }) {
// Регистрация обработчиков
}
};
```
### Диспетчеры
#### Timers
Обработка событий по таймеру.
```javascript
Timers.reg(async (input) => {
// Обработка таймерного события
return true; // или false
});
```
#### Queues
Обработка сообщений из очередей.
```javascript
Queues.reg(async (message) => {
// message: { domain, body, queue_url }
return true; // или false
});
```
#### Webs
Обработка веб-запросов и хуков.
```javascript
Webs.reg(async (input) => {
// Обработка веб-запроса
return true; // или false
});
```
#### Admins
Обработка тестовых/админских вызовов.
```javascript
// Пустые тестовые вызовы
Admins.reg.empty(async (input) => {
return { result: 'empty processed' };
});
// Текстовые тестовые вызовы
Admins.reg.text(async (input) => {
return { result: 'text processed' };
});
// JSON тестовые вызовы
Admins.reg.json(async (input) => {
return { result: 'json processed' };
});
```
## Переменные окружения
- `BOT_NAME` - имя бота (по умолчанию: 'NO_NAME')
- `TELEGRAM_BOT_TOKEN` - токен Telegram бота
- `QUEUE_URL` - URL очереди сообщений
## Типы событий
Роутер автоматически определяет тип события на основе входящих данных:
- **external.json** - внешние JSON запросы
- **timer.empty** - пустые события таймера
- **timer.text** - текстовые события таймера
- **queue** - сообщения из очереди
- **test.empty** - пустые тестовые события
- **test.text** - текстовые тестовые события
- **test.json** - JSON тестовые события
## Зависимости
- `/utils` - утилиты для работы с облаком
- `/logger` - система логирования
- `/queuer` - работа с очередями сообщений
- `/tg-updates-checker` - проверка обновлений Telegram
## Примеры использования
### Простой бот-обработчик
```javascript
const router = require('@dieugene/ya-cloud-calls-router');
const simpleBot = {
async process(input) {
const update = input.data.object;
if (update.message) {
console.log('Получено сообщение:', update.message.text);
// Логика обработки сообщения
}
return { success: true };
}
};
router.init(simpleBot);
module.exports.handler = router.handler;
```
### Расширенный обработчик с диспетчерами
```javascript
const router = require('@dieugene/ya-cloud-calls-router');
const advancedBot = {
async process(input, botToken) {
// Основная логика бота
return await this.handleBotUpdate(input.data.object);
},
async handleBotUpdate(update) {
// Детальная обработка обновления
return { processed: true };
},
reg_dispatcher_handlers({ Timers, Queues, Webs, Admins }) {
// Обработка регулярных задач
Timers.reg(async (input) => {
console.log('Выполнение планового задания');
await this.performScheduledTask();
return true;
});
// Обработка внешних веб-хуков
Webs.reg(async (input) => {
const data = input.data.object;
if (data.type === 'payment_notification') {
await this.handlePayment(data);
return true;
}
return false;
});
// Админские команды
Admins.reg.json(async (input) => {
const command = input.data.object.command;
switch (command) {
case 'status':
return { status: 'running', uptime: process.uptime() };
case 'restart':
return { result: 'restarting...' };
default:
return { error: 'unknown command' };
}
});
}
};
router.init(advancedBot);
module.exports.handler = router.handler;
```
## Лицензия
ISC
## Автор
Eugene Ditkovsky