Что делает
Следит за 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 }]) }).