Telegram-бот для новых сделок

Опрашивает новые сделки CRM каждые две минуты; уведомляет Telegram-чат HTML-карточкой.

Что делает

Следит за crm.item.list на предмет сделок с id > lastSeenDealId и базовой стадией NEW. Для каждой новой сделки загружает связанный контакт (crm.item.get), форматирует HTML-карточку и публикует её в Telegram-чат через grammy. Предоставляет slash-команды /start и /status.

Стек

Node.js 18+, grammy, node-cron.

Установка

pnpm add grammy node-cron

Переменные окружения

export B24_HOOK='https://your.bitrix24.com/rest/1/secret'
export TELEGRAM_BOT_TOKEN='...'   # @BotFather
export TELEGRAM_CHAT_ID='...'     # чат назначения

Запуск

npx tsx 06-telegram-bot.ts

Исходник

skills/b24jssdk-recipes/examples/06-telegram-bot.ts.

Примечания

  • lastSeenDealId живёт в памяти — сохраняйте его, чтобы пережить перезапуски.
  • Для интерактивных действий (назначить, пометить мусором) расширьте через InlineKeyboard из grammy.
  • HTML-экранирование делается прямо в коде. Если меняете формат сообщения, сохраняйте parse_mode: 'HTML' и экранируйте пользовательские строки.
  • Когда батч за тик большой (много новых сделок сразу), замените построчный вызов fetchContactName на один actions.v2.batch.make, который загружает все контакты за один round-trip. Пример формы: actions.v2.batch.make({ calls: deals.map((d) => ['crm.item.get', { entityTypeId: 3, id: d.contactId }]) }).