Разработка
Разбираем, что такое интеграции сайта с внешними сервисами, какими они бывают, как устроены технически и почему именно на этом этапе проекты чаще всего выходят за сроки и бюджет.
Сайт редко живёт сам по себе. Заявка должна попасть в CRM, оплата — пройти через банк, товар — списаться со склада, клиент — получить письмо и сообщение в мессенджере. Всё это делают интеграции: невидимые снаружи связки между сайтом и сервисами, в которых компания уже работает. Пользователь их не замечает, пока они работают, и замечает мгновенно, когда они ломаются.
Путаница начинается с терминов. Клиент говорит «нам нужна интеграция с CRM», имея в виду, что заявки должны падать в систему. Разработчик уточняет — и выясняется, что задач там на самом деле три: создавать сделку, подтягивать статус обратно на сайт и не плодить дубли, если человек оставил заявку дважды.
Полезно разделять два принципиально разных случая.
Подключение скрипта. Вы вставляете на сайт код счётчика аналитики, виджета онлайн-чата, карты или формы стороннего сервиса. Данные при этом фактически передаются в чужую систему, а сайт выступает площадкой. Это делается быстро, риски минимальны, а от разработчика требуется корректно разместить код и не сломать скорость загрузки.
Обмен данными между системами. Сайт отправляет данные во внешний сервис и получает ответ, на который как-то реагирует: показывает результат, меняет статус заказа, блокирует оформление. Здесь появляется логика, обработка ошибок, безопасность и вопросы «что делать, если сервис не ответил». Это уже разработка, а не настройка.
Большинство конфликтов на проектах возникает из-за того, что заказчик оценивает задачу по первому сценарию, а работа идёт по второму.
Набор зависит от типа сайта, но повторяющихся сценариев не так много.

Важный момент: каждая интеграция — это не только функция, но и точка отказа. Чем больше внешних связей, тем выше вероятность, что где-то что-то отвалится. Поэтому список интеграций стоит составлять по принципу «что реально используется в работе», а не «что может когда-нибудь пригодиться».
Понимать детали заказчику не обязательно, но общий принцип экономит много нервов при обсуждении сроков.
Самый распространённый способ. У сервиса есть документированный набор команд: создать сделку, получить список товаров, рассчитать доставку. Сайт отправляет запрос, получает ответ. Всё предсказуемо ровно до тех пор, пока документация соответствует реальности, а у вас есть доступы и тестовая среда.
Обратная связь: внешняя система сама сообщает сайту о событии. Например, банк присылает уведомление об успешной оплате. Это критично для платежей — нельзя считать заказ оплаченным только потому, что пользователь вернулся на страницу «спасибо». Подтверждение должно прийти от платёжного сервиса напрямую, серверу.
Устаревший, но живучий способ: учётная система выгружает файл с товарами, сайт его забирает и обновляет каталог по расписанию. Работает, когда прямого API нет. Минус — данные обновляются не мгновенно, а по расписанию, и при большом каталоге выгрузка становится тяжёлой.
Для популярных связок существуют готовые решения. Они экономят время, но почти всегда требуют доработки: у каждой компании свои поля, статусы и правила. «Поставить модуль» — это начало работы, а не её завершение.
Интеграции — самая частая причина того, что проект сдаётся позже запланированного. Причины обычно не в коде.
Нет доступов. Реквизиты для тестовой среды платёжного сервиса, ключ API, учётная запись в CRM с нужными правами. Пока этого нет, разработчик может написать код, но не может проверить, что он работает. Ожидание доступов легко съедает недели.
Сервис работает не так, как написано в документации. Отдаёт данные в другом формате, ограничивает число запросов, молча игнорирует часть полей. Выясняется это только на практике.
Никто не описал бизнес-логику. Что происходит, если товар закончился между добавлением в корзину и оплатой? Если клиент оплатил, но заказ не создался? Если в CRM уже есть контакт с таким телефоном? Технически всё это решаемо, но решения нужно принимать заранее — иначе система поведёт себя случайным образом.
Не продумана обработка ошибок. Внешний сервис недоступен — и что видит пользователь? Белый экран, вечный спиннер или понятное сообщение и возможность оформить заказ другим способом? Правильный вариант: сайт продолжает работать, а заявка сохраняется локально и уходит позже.
Несогласованность данных. На сайте одни названия товаров, в учётной системе — другие. Категории не совпадают, единицы измерения разные. Интеграция не наведёт порядок в данных — она только перенесёт беспорядок быстрее.

Изменение на стороне сервиса. Внешние системы обновляют версии API и отключают старые. Интеграция, работавшая год, однажды перестаёт работать без каких-либо действий с вашей стороны. Это аргумент в пользу поддержки после запуска.
Каждая интеграция — это канал, по которому данные покидают сайт. Значит, к нему применимы те же требования, что и к остальной системе.
Ключи и пароли от внешних сервисов не должны лежать в открытом виде в коде или в репозитории. Доступы выдаются с минимально необходимыми правами: если сервису нужно только создавать сделки, ему не нужен доступ на удаление. Данные, которые передаются наружу, должны ограничиваться необходимым — незачем отправлять в сторонний виджет больше, чем ему требуется для работы.
Отдельная история — влияние на производительность. Сторонние скрипты загружаются с чужих серверов, и если такой сервер отвечает медленно, тормозить будет ваш сайт. Виджет чата, карта, пиксели аналитики, всплывающие формы — по отдельности мелочь, вместе иногда половина веса страницы. Решение простое: подключать только то, что действительно используется, и загружать тяжёлые виджеты отложенно, после основного контента.
Серверные интеграции нельзя выполнять синхронно там, где пользователь ждёт ответа. Если отправка данных в CRM занимает несколько секунд, форма не должна «висеть» всё это время. Заявка сохраняется, пользователь видит подтверждение, а передача во внешнюю систему идёт фоном.
Интеграции сложно оценить «в целом» — цифра появляется только после того, как понятно, с чем именно и в какую сторону нужно связываться. Чтобы разговор был предметным, от заказчика нужны конкретные вещи.
Отдельно стоит договориться о тестировании. Проверять интеграцию нужно не только на «хорошем» сценарии, когда всё прошло гладко, но и на плохих: неверные данные, отказ оплаты, дубль заявки, обрыв связи. Проверка на боевых деньгах и реальных заказах — плохая идея, поэтому тестовые режимы платёжных сервисов существуют не просто так.
И последнее: интеграции стоит закладывать в проект на этапе проектирования, а не после сдачи дизайна. От того, куда и как уходят данные, зависят поля в формах, шаги оформления заказа, структура каталога и логика личного кабинета. Добавить это в готовый сайт можно почти всегда, но дороже и дольше, чем предусмотреть заранее.
Читайте также
Разработка
Разработка
Дизайн
Разработка
Заявка
Свяжемся в течение рабочего дня, зададим уточняющие вопросы и предложим варианты. Без навязчивых звонков.
Форма обратной связи