Как перестать переписывать логику ботов под каждый мессенджер

05 Aug, 2026
2,261
🔱 277
👥 6

Представьте, что вам нужно запустить корпоративного помощника. Сначала просят Slack, через неделю отдел продаж требует Discord, а техподдержка привыкла к Telegram. Обычно это превращается в бесконечный цикл копипасты: тут мы обрабатываем ctx.message, там payload.text, а в Microsoft Teams вообще всё иначе. В итоге вместо бизнес-логики вы поддерживаете пять разных адаптеров и надеетесь, что API одного из них не обновится в пятницу вечером.

Команда Vercel выкатила библиотеку, которая пытается решить эту проблему радикально. Проект называется chat, и это унифицированный SDK на TypeScript. Идея простая: вы описываете поведение бота один раз, а он работает везде.

npm version npm downloads License: MIT

Что под капотом

По сути, это слой абстракции. Библиотека берет на себя всю грязную работу по приведению разных форматов сообщений к единому виду. Если в Slack это блоки, а в Telegram — сырой текст с разметкой, для вашего кода это будет просто объект сообщения.

На текущий момент поддерживаются:

  • Slack и Discord
  • Telegram и Microsoft Teams
  • Google Chat
  • GitHub и Linear (да, боты для тикетов теперь пишутся так же легко, как для мессенджеров)

Как это выглядит в коде

Самое приятное здесь — лаконичность. Вам не нужно инициализировать пять разных клиентов. Вы создаете один экземпляр Chat, подключаете нужные адаптеры и вешаете обработчики событий.

import { Chat } from "chat";
import { createSlackAdapter } from "@chat-adapter/slack";
import { createRedisState } from "@chat-adapter/state-redis";

const bot = new Chat({
  userName: "helper_bot",
  adapters: {
    slack: createSlackAdapter(),
    // Добавляйте другие платформы одной строкой
  },
  state: createRedisState(),
});

bot.onNewMention(async (thread) => {
  await thread.subscribe();
  await thread.post("Привет! Я зашел в этот тред.");
});

Обратите внимание на state. Библиотека умеет хранить состояние разговора. В комплекте идут адаптеры для Redis и In-memory (для тестов). Это избавляет от необходимости городить свою базу данных только для того, чтобы бот «помнил», на какой вопрос он сейчас отвечает.

Главные фишки, которые упрощают жизнь

Стриминг ответов от ИИ

Если вы делаете бота на базе LLM, то знаете, как важно показывать текст по мере генерации. В Slack есть нативный стриминг, а в других мессенджерах его приходится имитировать через редактирование сообщения. SDK делает это автоматически: если платформа поддерживает стриминг — он будет нативным, если нет — библиотека сама будет «дописывать» сообщение через правки.

Интерактивные карточки на JSX

Разметка сообщений в разных мессенджерах — это боль. Slack использует Block Kit, Teams — Adaptive Cards. В chat решили использовать JSX-подобный синтаксис. Вы описываете интерфейс карточки, а адаптер сам конвертирует его в нужный формат для конкретного мессенджера.

Модальные окна и действия

Обработка кликов по кнопкам или отправка форм из модалок обычно требует специфических эндпоинтов для каждой платформы. Здесь это реализовано через единые обработчики actions. Бот одинаково отреагирует на нажатие кнопки и в Discord, и в Slack.

Кому это пригодится

Проект выглядит идеальным для внутренних инструментов компании. Если вы пишете бота для деплоя, уведомлений об ошибках или управления задачами в Linear/GitHub, то chat сэкономит недели разработки.

С другой стороны, если вам нужны специфические фишки конкретной платформы (например, очень сложные анимированные стикеры в Telegram или специфические настройки прав в Discord), абстракция может мешать. В README есть честная таблица совместимости, где видно, что, например, модальные окна пока работают только в Slack.

Стоит ли пробовать

Проект от Vercel — это почти всегда знак качества в плане DX (Developer Experience). Документация на chat-sdk.dev пока не самая объемная, но базовая логика понятна из примеров.

Если вы устали от зоопарка библиотек типа telegraf, discord.js и slack/bolt в одном проекте, этот SDK — отличный кандидат на замену. Особенно радует поддержка AI-агентов: можно просто добавить «скилл» в Claude Code одной командой, и нейронка сама поймет, как писать код для вашего бота.

Начать можно с малого: переписать одно простое уведомление на этот SDK и посмотреть, насколько чище станет ваш код. Скорее всего, возвращаться к нативным библиотекам после этого не захочется.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.