umbot
    Preparing search index...

    Адаптер, обеспечивающий поддержку платформы Telegram. Позволяет разрабатывать чат-ботов для Телеграм на TypeScript с использованием кросс-платформенного функционала: обработка текстовых запросов, работа с карточками и кнопками.

    Подключение адаптера не требует изменения существующей бизнес-логики: после интеграции все команды и обработчики, написанные для umbot, автоматически становятся доступны для Telegram. Единый интерфейс позволяет одновременно использовать одну бизнес-логику для нескольких платформ (Telegram, VK, Алиса и др.) без дублирования кода.

    Этот адаптер автоматически обрабатывает входящие webhook`и от мессенджера Telegram, преобразует их в унифицированный формат фреймворка и формирует ответ, совместимый с требованиями платформы. Подключается одной строкой и не мешает работе других адаптеров (например, для Алисы или Маруси).

    Поддерживает:

    • голосовые и текстовые запросы;
    • карточки, кнопки;

    Подключается как любой другой адаптер: bot.use(new TelegramAdapter(token)). Несколько адаптеров могут работать одновременно — система сама выберет подходящий на основе заголовков и структуры входящего запроса.

    // Простейший бот для Telegram, который отвечает на приветствие
    import { Bot } from 'umbot';
    import { TelegramAdapter } from 'umbot/plugins';

    const bot = new Bot()
    .use(new TelegramAdapter('YOUR_BOT_TOKEN'))
    .addCommand('start', ['привет'], (_text, ctx) => {
    ctx.text = 'Привет! Я твой первый бот для Telegram';
    });

    bot.start('localhost', 3000);
    • Bot
    • BotController
    • BasePlatform

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    _platformOptions?: IAdapterOptions
    _token?: string
    appContext?: AppContext<unknown, string | ITelegramContent>

    Контекст приложения

    isVoice: boolean = false

    Определяет тип платформы(голосовая или чат-бот)

    limit: number = 30

    Определяет лимит платформы. В значение указывается количество запросов, которое можно отправить платформе за 1 секунду. В случае если у платформы нет ограничений, можно указать 0 или null. По умолчанию null

    MAX_TIME_REQUEST: number = 2900

    Максимальное время ответа навыка в миллисекундах при превышении этого времени, будет отправлена ошибка

    platformName: string = T_TELEGRAM

    Имя платформы

    signatureName: string = 'x-telegram-bot-api-secret-token'

    Имя поля в заголовке запроса, по которому можно проверить корректность полученного запроса от платформы.

    WARMING_TIME_REQUEST: number = 2000

    Время ответа навыка в миллисекундах при превышении этого времени, будет отправлено предупреждение

    Methods

    • При превышении установленного времени исполнения, пишет информацию в лог После вызова getContent() автоматически проверяется время выполнения. Если оно превышает 2000 мс — пишется warning, если >2900 мс — ошибка.

      Parameters

      Returns void

    • Метод, который вызывается при уничтожении плагина. В данном методе можно добавить отписку, либо выполнить другие действия.

      Parameters

      • _bot: Bot

        Основной класс приложения

      Returns void | Promise<void>

    • Формирует тело ответа для отправки пользователю.

      Возвращает платформо-специфичный ответ (например, JSON для Алисы). Для платформ, которые отправляют ответ напрямую (например, Telegram через sendMessage), метод может возвращать { ok: true } или аналог.

      Parameters

      • controller: BotController

        контроллер с готовым ответом

      Returns Promise<string>

      ответ в формате, понятном платформе

    • Генерирует пример входящего запроса для локального тестирования вашего приложения. Позволяет эмулировать запрос от платформы с заданным текстом, ID пользователя, номером сообщения и состоянием. Необходимо указывать для того, чтобы можно было корректно проверить работоспособность приложения.

      Обязательно определите метод, если планируется тестирования приложения через инструменты предоставляемые платформой. Это существенно упростит процесс разработки приложения.

      Parameters

      • query: string

        Запрос пользователя

      • userId: string

        Идентификатор пользователя

      • count: number

        Порядковый номер запроса

      Returns Record<string, unknown>

    • Инициализация адаптера. Определять не обязательно. Стоит указывать в случаях, когда нужно выполнить доп логику, например указать токены или писать какую-то статистику по использованию.

      Parameters

      Returns void

    • Проверяет полученный запрос от платформы на корректность. Из коробки проверка идет по sha256. Если по какой-то причине поведение по умолчанию не подходит, то просто переопределите метод.

      Parameters

      Returns boolean

    • Возвращает признак того, соответствует ли запрос текущей платформе или нет

      Parameters

      • query: ITelegramContent

        Запрос, который пришел в приложение

      • Optionalheaders: Record<string, unknown>

        Заголовок с которым был отправлен запрос

      Returns boolean

      true, если запрос относится к этой платформе, иначе false

      isPlatformOnQuery(query, headers) {
      return headers?.['x-telegram-bot-api-secret-token'] === this._token;
      }
      isPlatformOnQuery(query) {
      return typeof query === 'object' && query.meta?.session_id;
      }
    • Отправка текста пользователю Этот метод используется для активных рассылок — когда голосовой навык или чат-бот инициирует диалог первым (например, уведомление). В методе реализована механика преобразования текстового значения controllerOrText в контроллер, а также базовый механизм для отправки ответа.

      Переопределять данный метод не рекомендуется. Переопределить стоит только в том случае, если по каким-то технических условиям текущая реализация метода вам не подходит.

      Если платформа не поддерживает возможность начать диалог самостоятельно, то можно оставить метод пустым, либо вывести любую заглушку.

      Parameters

      • userId: string | number

        Ид пользователя, которому нужно отправить сообщение

      • controllerOrText: string | BotController<IUserData, IPlatformData>

        Контроллер приложения или текст. Если необходимо отправить просто текст, можно передать строку, в случае, если необходимо передать картинку звук и тд, то необходимо корректно заполнить контроллер.

      Returns boolean | TContent

    • Обрабатывает входящий запрос и заполняет контроллер данными.

      Обязательно установите:

      • controller.userCommand и controller.originalUserCommand — текст сообщения пользователя
      • controller.userId — уникальный ID пользователя
      • controller.appType = this.platformName

      Опционально:

      • controller.userToken — если платформа присылает токен авторизации
      • controller.userMeta — если платформа присылает метаданные
      • controller.state — если платформа поддерживает локальное хранилище
      • controller.nlu — если платформа присылает NLU/интенты (через controller.nlu.setNlu(...))

      Parameters

      Returns Promise<boolean>

      false, если запрос повреждён или не может быть обработан; иначе true

    • Дополнительная обработка для звуков. В данном методе стоит реализовать логику, с помощью которой будут наложены дополнительные эффекты для озвучивания текста пользователю

      Parameters

      Returns void | Promise<void>