Telegraft

Интеграция

Salesforce, где ваш бюджет обращений к API принадлежит всей организации

Интеграция с Salesforce позволяет Telegram-боту создавать и обновлять объекты Lead, Contact и Opportunity в уже существующей организации. Всё в архитектуре определяется суточной квотой обращений к API: она общая для всех интеграций организации, и болтливый бот способен исчерпать её и сломать системы, к нему никак не относящиеся.

Salesforce — интеграция: доступ, лимиты и доступность

Модель авторизации
OAuth 2.0
Квота обращений к API
Суточная, на организацию, а не на интеграцию
Доступность в Заливе
Региональных ограничений нет; доступ к API определяет редакция
Схема данных
5 узлов, всё через воркер

As of 2025-10-01, Telegram Bot API 13.4

Зачем нужна эта интеграция

Именно на Salesforce такие интеграции становятся дорогими, и вовсе не потому, что API сложный. Дело в том, что организация в Salesforce почти никогда не бывает чистым листом. Там есть правила валидации, которые никто не помнит написанным, обязательные пользовательские поля, триггеры на Apex, срабатывающие при вставке записи, и целый набор уже работающих интеграций, тихо расходующих ту же суточную квоту, из которой сейчас соберётся черпать ваш бот.

Квота — самое жёсткое ограничение. Она выдаётся на организацию на скользящие сутки, а не на интеграцию, поэтому ваш бот конкурирует с ночной синхронизацией ERP и с маркетинговой автоматизацией. Архитектура на опросах, выглядевшая разумной сама по себе, способна съесть заметную долю квоты, и беда не в том, что встанет ваш бот, — встанет что-то другое, и у человека, который будет это разбирать, нет ни одной причины заподозрить Telegram-бота.

Второе ограничение: запись запускает Apex. Вставка объекта Lead может поднять триггеры, потоки и правила валидации, совокупное поведение которых никто до конца не описывал, а бот, пишущий объёмами, доберётся до комбинаций, до которых человек, заводящий записи по одной, не дошёл бы никогда. Разбор существующей автоматизации — это отдельная реальная работа, и оценка такой интеграции как обычного клиента к REST API ровно так и удваивается посреди проекта.

Как на самом деле движутся данные

Лид приходитв Telegramквалифицированный лидВоркер ботасначала фиксируемОчередьзаписи D1подпись JWT и записьОрганизацияв Salesforceсобытие платформыВоркер бота
Запись ставится в очередь и выдаётся дозированно с оглядкой на общую квоту организации, а не отправляется в тот же миг, когда пришла; входящие изменения приходят событиями платформы, а не вычитываются опросом.

Connected app с потоком OAuth JWT bearer: он подходит для интеграции между серверами, потому что не требует ни интерактивного входа, ни хранения пароля пользователя. Ключ подписи лежит в секретах воркера. Интеграция аутентифицируется как выделенный технический пользователь с набором прав ровно на те объекты, что есть в сопоставлении, — работа под учётной записью конкретного продавца держится до его увольнения, а до тех пор ещё и портит журнал аудита.

Модель доступа: OAuth 2.0

Их лимиты и что они означают для вас

Суточная квота обращений к API выдаётся на организацию, а не на интеграцию.

Ваш бот делит её со всеми остальными системами. Частота синхронизации становится вопросом бюджета, а исчерпание квоты ломает интеграции, не имеющие к вам никакого отношения.

Governor limits в Apex ограничивают то, что может произойти внутри одной транзакции, вызванной вашей записью.

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

Правила валидации и обязательные пользовательские поля применяются к записи через API ровно так же, как в интерфейсе.

Поле, которое продавец заполняет по контексту, бот обязан передать или подставить по умолчанию. Выяснение полного списка входит в оценку и регулярно оказывается самым крупным сюрпризом проекта.

Platform events и Change Data Capture — поддерживаемые механизмы доставки изменений, и у них свои квоты.

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

Как это ломается и что происходит потом

Организация исчерпала суточную квоту обращений к API.

Начинают падать все интеграции организации, включая вашу. Бот следит за остатком квоты по заголовкам ответов и притормаживает раньше, чем успеет внести свой вклад в её исчерпание.

Запись не прошла правило валидации, о котором бот не знал.

Лид уже надёжно сохранён локально, поэтому ничего не потеряно. Отказ уходит человеку с названием правила, а не ставится на повтор: повторять запись, отклонённую валидацией, бессмысленно — она не пройдёт никогда.

Триггер на Apex выбрасывает исключение при пакетной записи.

Пакет отклоняется целиком. Поэтому размеры пакетов консервативны, а сообщение об ошибке называет, какие именно записи в него входили: поведение по умолчанию это скрывает.

Для существующего объекта Contact создан дублирующий Lead.

Правила дедупликации Salesforce соблюдаются, а не обходятся, и неоднозначное совпадение уходит на проверку человеку. Обход правил дедупликации ради работоспособности интеграции — решение с очень длинным хвостом последствий.

Доступность в ОАЭ и остальных странах Залива

Весь мир

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

Essentials и младшие редакции

Доступ к API ограничен или отсутствует в зависимости от редакции. Проверьте это до оценки: это жёсткий запрет, а не лимит, вокруг которого можно спроектировать.

Организации с тяжёлыми доработками

Обычный случай для давно работающего бизнеса в Заливе и основной источник стоимости здесь. Разбор существующих триггеров и правил валидации — отдельная реальная работа.

Песочницы

Полная или частичная песочница, повторяющая доработки продуктивной среды, здесь практически обязательна. Песочница разработчика без ваших триггеров пройдёт тесты, которые продуктивная среда завалит.

Когда эту интеграцию делать не нужно

  • Ваша редакция не включает доступ к API. Это жёсткий запрет, и спросить об этом стоит в первом разговоре, а не в третьем.
  • Никто не может рассказать, что делают существующие триггеры и правила валидации. Тогда этот разбор и есть проект, а вид, что это не так, удваивает оценку на полпути.
  • Организация и без вас подошла к суточной квоте вплотную. Добавление бота в насыщенную организацию ломает чужие системы, и обвинят в этом вас — справедливо.
  • Вам нужен лёгкий сбор лидов. HubSpot или Pipedrive закроют задачу за долю этого времени и этих денег.

На чём это работает

КомпонентВерсияЗачем
Cloudflare WorkerscurrentАвторизация по JWT bearer, дозированная запись и приём событий платформы.
Cloudflare D1currentОчередь записи, учёт расхода квоты и очередь ручного разбора.
Cloudflare KVcurrentКэш токена доступа и счётчик остатка квоты.
Zod4.4Валидация ответов API и содержимого событий.

Вопросы, которые возникают при оценке

Почему эта интеграция с CRM самая дорогая в разработке?

Потому что организация никогда не бывает чистым листом. Существующие триггеры, потоки и правила валидации приходится сначала выяснить, а потом с ними ужиться, а суточную квоту обращений к API — распланировать с учётом всего, что уже её расходует. Клиент к REST API здесь как раз самая простая часть.

Что будет, если мы исчерпаем суточную квоту обращений к API?

Падать начнут все интеграции организации, а не только ваша, и у человека, который будет это разбирать, нет причин заподозрить Telegram-бота. Бот читает остаток квоты из заголовков ответов и притормаживает до того, как внесёт свой вклад в исчерпание.

Что выбрать: опрос или события платформы?

Почти всегда события, потому что опрос расходует общую квоту непрерывно. У событий свой бюджет доставки, поэтому планируются оба, а не один из них считается бесплатным.

Может ли бот обойти правила дедупликации, чтобы запись прошла?

Может, и делать этого не нужно. Обход правил дедупликации делает интеграцию на вид надёжной, тихо ухудшая данные, на которые опираются все остальные, а последствия приходят через несколько месяцев в виде отдельного проекта по чистке данных.

Нужна ли нам песочница, повторяющая продуктивную среду?

Практически обязательна. Песочница разработчика без ваших триггеров и правил валидации пройдёт все тесты, а потом упадёт на проде — самый дорогой из возможных порядков событий.

Под какой учётной записью Salesforce должна аутентифицироваться интеграция?

Под выделенным техническим пользователем с ограниченным набором прав. Работа под доступом продавца держится ровно до его увольнения, после которого встаёт вся автоматическая запись, — а до тех пор журнал аудита приписывает действия бота живому человеку.

Что почитать дальше