Розробка кастомного REST-застосунку для Битрикс24 Маркетплейс

Інтеграції з Битрикс24 часто втрачають події та дані на стику систем. Ми проєктуємо та розробляємо REST-застосунки під ключ: від постановки задачі до публікації в Маркетплейс. Наші рішення скорочують ручну роботу та усувають втрати даних в обміні.

Розробка кастомного REST-застосунку для Битрикс24 Маркетплейс

МаркетплейсиСередній~1-2 тижні
Часті запитання

REST-застосунок Битрикс24: де ламається інтеграція

REST-застосунок Битрикс24 майже ніколи не падає «сам по собі» — він ламається на стику з платформою.

Портал відповідає на запит за частки секунди, але варто обробнику піти у важку вибірку по угодах або вивантаження файлів, як спрацьовує таймаут інтеграції: з'єднання рветься, транзакція залишається в напівстані, а в CRM з'являється дубль або втрачена сутність.

Далі розходження накопичується мовчки — його помічають уже за звіркою звітів, коли відновити ланцюжок подій дорожче, ніж побудувати його заново.

Друге джерело збоїв — ліміти запитів. Платформа обмежує частоту звернень на портал і на метод, і при пакетній синхронізації застосунок упирається в стелю: частина викликів повертається з відмовою, частина — із затримкою.

Якщо в коді немає черги з повторними спробами та врахуванням квоти, втрата подій стає регулярною: вебхуки не доїжджають, зміни по завданнях і рахунках не підтягуються, а бізнес бачить «завислу» воронку.

Третій клас відмов — збої оновлень. Битрикс24 змінює контракти методів і правила модерації застосунків, і код, який учора проходив перевірку, перестає відповідати вимогам: частина полів зникає з відповіді, змінюється формат події, посилюється перевірка прав. Без версіонування та набору автотестів на контракти таке оновлення викочується в прод непоміченим.

Окремо варто сказати про роботу з правами та областю доступу: застосунок, що запросив зайві дозволи, не проходить модерацію Маркетплейсу, а відсутні права дають відмови на половині методів.

Нижче розбираємо, як ці чотири сценарії закриваються на рівні архітектури, а не латками в обробниках.

Що дає коректно спроєктований застосунок

Швидкість відгуку застосунку визначається не потужністю сервера, а тим, скільки звернень до зовнішніх сервісів він робить на один запит користувача.

Коли обробник спочатку витягує довідник повністю, потім уточнює кожен запис окремо, час відповіді зростає лінійно від обсягу даних і на реальних вивантаженнях сягає десятків секунд.

Ми проєктуємо обмін так, щоб на типову дію припадала мінімальна кількість звернень, а важкі вибірки йшли у фонові завдання: інтерфейс відповідає одразу, дані довантажуються в міру готовності.

Стійкість до лімітів — друга половина тієї самої задачі. Зовнішні сервіси обмежують частоту запитів, і застосунок, який цього не враховує, починає отримувати відмови пачками.

Черга з повторами та зростаючою паузою, розділення пріоритетних і фонових операцій, локальний кеш довідників — усе це перетворює відмови з аварії на штатний режим: частина запитів просто виконується трохи пізніше, без втрати результату.

Втрата подій — найдорожчий клас збоїв, тому що про неї дізнаються за розбіжністю даних, а не за помилкою в журналі. Ми фіксуємо кожну вхідну та вихідну подію, зберігаємо її стан і вміємо догравати пропущене після перезапуску або мережевого розриву.

Частка втрачених подій за такого контуру — поодинокі випадки, які видно в моніторингу одразу, а не спливають через місяць у звірці.

Час відновлення після збою залежить від того, наскільки застосунок готовий до повторного запуску. Ідемпотентні обробники, збережені контрольні точки та зрозумілий порядок довантаження дозволяють підняти інтеграцію без ручної звірки та повторного введення даних.

Замість «піднімали два дні та звіряли вручну» виходить передбачуваний перезапуск, після якого система сама доганяє пропущене.

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

Способи інтеграції: вхідні вебхуки, локальні та тиражні застосунки

Вибір способу підключення визначає не лише обсяг коду, а й те, як рішення житиме далі: хто зберігає доступи, що відбувається при оновленні порталу і скільки ручної роботи залишається при передачі клієнту. Нижче — три реальні варіанти, між якими обирають на старті інтеграції.

Варіант Коли підходить Обмеження
Вхідний вебхук Швидкий обмін з одним зовнішнім сервісом, прототип, разове вивантаження Права задаються один раз і не розмежовуються за користувачами, токен живе у відкритому вигляді, немає подієвої логіки та черги викликів
Локальний застосунок Інтеграція під конкретний портал: свої права, інтерфейс усередині Битрикс24, обмін із внутрішніми системами Встановлюється вручну на кожен портал, оновлення та виправлення доставляються окремо, немає картки в каталозі
Тиражний застосунок Продукт для багатьох клієнтів, продаж або масова установка через Маркетплейс Потребує проходження модерації, версіонування, підтримки кількох редакцій і сценаріїв відкликання доступу

Сценарії підключення

Вебхук закриває завдання, де потрібен один канал в один бік: прийняти заявку з сайту, віддати статус угоди, вивантажити довідник. Як тільки з'являються події, права різних ролей і повторні виклики при збої — вебхук починає обростати милицями, і його переписують у застосунок.

Локальний застосунок беруть, коли інтеграція прив'язана до одного порталу та внутрішніх систем замовника. Тиражний — коли рішення має ставитися у багатьох клієнтів і оновлюватися централізовано.

Обмеження інтеграції

Ключова відмінність — у моделі прав і життєвому циклі. У вебхука доступ не відкликається точково і не логується за користувачем; у застосунку є сценарій установки, видачі та відкликання дозволів.

Звідси різна вартість підтримки: правка вебхука — разова, правка тиражу — реліз зі зворотною сумісністю.

Розбираємо ваш сценарій і підбираємо варіант, який не доведеться переписувати через пів року.

Етапи розробки та впровадження REST-додатка

Робота йде ітераціями: кожна наступна спирається на артефакти попередньої, тому приховані залежності випливають на початку, а не на прийманні. Нижче — послідовність, за якою ми ведемо проєкт.

  1. Аудит інтеграцій. Збираємо карту поточних обмінів: які системи вже віддають і приймають дані, де дублюються сутності, які виклики йдуть в обхід штатних механізмів. Фіксуємо точки відмови та вузькі місця за навантаженням.
  2. Схема взаємодії. Узгоджуємо модель даних і сценарії: які сутності створює додаток, що читає з порталу, на які події підписується. На виході — діаграма потоків і перелік методів із форматами запитів і відповідей.
  3. Налаштування прав. Розмежовуємо доступи за ролями та областями видимості, визначаємо, що додаток робить від імені користувача, а що — від службового облікового запису. Окремо описуємо поведінку при відкликанні прав.
  4. Реалізація та перевірка сценаріїв. Збираємо додаток, проганяємо основні та граничні випадки: порожні відповіді, повторні виклики, розриви з'єднання, конфлікти одночасного запису. Помилки логуємо так, щоб за записом відновлювався весь ланцюжок виклику.
  5. Тестовий контур і навантаження. Розгортаємо копію порталу, перевіряємо встановлення та видалення додатка, поведінку при оновленні, відгук під паралельними запитами. Дивимося, як рішення поводиться при недоступності зовнішньої системи.
  6. Передача в експлуатацію. Публікуємо в Маркетплейс, оформлюємо картку та інструкції, передаємо регламент оновлень і порядок відкату на попередню збірку. Окремо — чек-ліст діагностики для першої лінії підтримки.

Кожен етап закривається артефактом: картою інтеграцій, схемою, матрицею прав, звітом про прогін сценаріїв, регламентом. Так на передачі в команди замовника залишається не лише працюючий додаток, а й розуміння, як його супроводжувати.

Що замовник отримує на руки після впровадження

Впровадження закінчується не демонстрацією працюючого застосунку, а передачею комплекту, за яким ваша команда зможе його експлуатувати, розвивати та передавати новим інженерам. Нижче — що саме залишається у вас на руках.

  • Конфігурації застосунку та середовищ — файли налаштувань для локального стенда, тестового та робочого контуру: параметри підключення до порталу, ключі інтеграцій, змінні середовища. Розгортання повторюється на чистій машині без «доналаштування по пам'яті».
  • Схеми взаємодії — діаграми потоків даних між застосунком, порталом і зовнішніми системами: які методи REST викликаються, де зберігаються токени, як обробляються вебхуки та повторні доставки подій.
  • Політики доступу — матриця прав за ролями порталу та областями видимості даних, правила видачі й відкликання токенів, обмеження на вихідні запити. Перевіряльник бачить, хто і до яких даних має доступ.
  • Регламенти експлуатації — порядок оновлення застосунку, ротації ключів, реакції на відмову зовнішнього сервісу, план відкату на попередню збірку зі збереженням даних.
  • Інструкції для підтримки — що дивитися в логах при типових збоях, як відтворити проблему на тестовому контурі, до кого і з якими даними звертатися. Перша лінія закриває інцидент без розробника.
  • Документація по коду та API — опис модулів, точок розширення та публічних методів, щоб доопрацювання можна було вести силами іншої команди.
  • Скрипти міграцій і резервного копіювання — відтворюваний перенос налаштувань і даних між контурами, перевірений сценарій відновлення.
  • Приймальні сценарії — набір перевірок, за якими підтверджується працездатність після кожного оновлення.

Такий комплект знімає головний ризик: застосунок перестає бути «чорною скринькою» одного підрядника. Опишіть задачу — повернемося з оцінкою та планом, у якому вигляді передамо артефакти саме у вас.

Кейс: як ми усунули втрату подій у REST-застосунку

Замовник прийшов із симптомом, а не з діагнозом: інтеграція з Битрикс24 «іноді не спрацьовує». Насправді події з черги губилися під час сплеску навантаження — вебхук надходив, а обробник падав на таймауті, і ніхто про це не дізнавався.

Частка втрачених подій сягала 8%, а розбіжності між CRM та обліковою системою менеджери закривали вручну: звірка займала в команди до двох днів на тиждень.

Що було до

Обробка відбувалася синхронно в момент події: зовнішній сервіс відповідав повільно, запит зависав, повторних спроб не було, а помилки осідали лише в логах застосунку.

Час відгуку на піку сягав 12 секунд, частина операцій відвалювалася за таймаутом, і відновити їх можна було лише повторним запуском вручну. Жодної ідемпотентності не було — повторна доставка створювала дублі записів.

Що змінили

Ми винесли приймання подій та їх обробку в різні контури: застосунок приймає подію, фіксує її в черзі й одразу відповідає, а розбір іде асинхронно з обмеженням паралелізму.

Додали ідемпотентний ключ на кожну подію, щоб повторна доставка не плодила дублі, і налаштували повторні спроби з наростаючою паузою — збійний обробник повертається в роботу сам, без участі людини.

Окремо зібрали журнал необроблених подій: те, що не вдалося розібрати після всіх спроб, потрапляє в окремий список із причиною, а не розчиняється в логах.

Метрики після

Показник До Після
Частка втрачених подій до 8% менше 0,1%
Час відгуку на піку до 12 с стабільно до 1 с
Ручні операції на тиждень ~2 дні звірки поодинокі розбори

Усунення збоїв перестало бути рутиною: інженер переглядає журнал необроблених подій раз на тиждень, а не розбирає розбіжності по кожному клієнту. Застосунок пройшов модерацію й оновлюється в Маркетплейсі без зупинки роботи клієнтів.

Чим відрізняється тиражний застосунок від локального?

Тиражний застосунок — це продукт, який проходить модерацію та публікується в Маркетплейс Битрикс24, після чого його можуть встановити будь-які клієнти порталу.

Локальний застосунок живе всередині одного порталу: його встановлюють вручну, за прямим посиланням на обробник, і за межі конкретної інсталяції він не виходить. Звідси розходяться всі подальші вимоги — до оновлень, підтримки та безпеки.

Ключова відмінність — у моделі оновлень. Тиражний застосунок оновлюється централізовано: ви публікуєте нову версію, і вона розкочується на всі інсталяції через штатний механізм Маркетплейсу.

Локальний оновлюють точково — на кожному порталі окремо, а якщо клієнт вносив правки в код, оновлення може конфліктувати з ними. Тому в тиражі зворотна сумісність і міграції даних закладаються заздалегідь, а в локальному достатньо домовитися з одним замовником.

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

Локальний застосунок часто успадковує права того, хто його встановив, — цього достатньо всередині одного контуру, але для публікації в Маркетплейс такий підхід не пройде.

Підтримка теж влаштована по-різному. Тиражний застосунок потребує лінії підтримки для всіх клієнтів, єдиного журналу помилок і передбачуваного циклу випуску версій. Локальний обслуговується адресно: правки вносяться під конкретний портал, а регрес перевіряється на його ж даних.

Вибір між форматами — це вибір між масштабом і швидкістю: тираж дає охоплення та повторюваний дохід, локальний — швидкий результат під одне завдання.

Часті технічні сумніви при розробці

Перед стартом розробки майже завжди виникають одні й ті самі питання: чи витримає застосунок ліміти запитів, що буде після чергового оновлення платформи, чи не зламається інтеграція і хто відповідає за підтримку після запуску. Нижче — відповіді по суті, без загальних слів.

Чи впираємося ми в ліміти запитів Битрикс24?

Так, ліміти є, і їх не можна ігнорувати. Ми закладаємо обробку помилок із повторними спробами та наростаючою паузою, виносимо важкі операції у фонові завдання і кешуємо те, що не змінюється щохвилини.

На практиці це дає стабільну роботу навіть при піковому навантаженні: застосунок не «падає» на масовому вивантаженні, а спокійно розбирає чергу.

Що буде після оновлення платформи?

Платформа оновлюється регулярно, і частина методів переходить у застарілі. Ми будуємо застосунок на публічних, документованих викликах і ізолюємо їх в окремому шарі — при змінах правимо одне місце, а не весь застосунок. Це знижує ризик раптових поломок і вартість доопрацювань після чергового релізу.

Як забезпечується сумісність і безпека даних?

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

Сумісність перевіряємо на різних редакціях порталу, щоб поведінка була передбачуваною в усіх користувачів.

Хто підтримує застосунок після запуску?

Ми передаємо вихідний код, схему інтеграцій та інструкції з розгортання. Далі можлива підтримка за узгодженим регламентом: відстежуємо зміни платформи, оновлюємо залежності, усуваємо інциденти. Ви не залишаєтеся один на один із застосунком після здачі.

Опишіть задачу — повернемося з оцінкою та планом робіт.

Обговоримо ваше завдання та повернемося з оцінкою

Щоб оцінка була предметною, а не «зі стелі», нам потрібно зрозуміти сценарій: які сутності застосунок читає та записує в Битрикс24, чи працює він через вхідні вебхуки або повноцінний OAuth-контур, чи потрібні фонові завдання та обробка подій.

Від цього залежить обсяг робіт із REST-застосунку Битрикс24 — від тонкої обгортки над парою методів до сервісу з чергами, ретраями та синхронізацією даних.

Надішліть опис завдання у вільній формі: що має відбуватися, хто користувачі, які розділи порталу задіяні, чи є вже напрацювання або готове ТЗ. Якщо ТЗ немає — зберемо його разом на дзвінку, зафіксуємо межі та точки інтеграції.

Після розбору ви отримаєте:

  • план робіт за етапами: аналітика, проєктування контуру авторизації, розробка, тестування на тестовому порталі, публікація в Маркетплейсі;
  • оцінку трудозатрат з розбивкою за блоками та припущеннями, від яких вона залежить;
  • терміни за кожним етапом з урахуванням рев'ю з боку Маркетплейсу;
  • склад команди — хто веде архітектуру, хто пише код, хто відповідає за тестування та публікацію;
  • ризики та варіанти їх закриття: ліміти на методи, поведінка при відкликанні токена, міграція даних;
  • формат підтримки після релізу: оновлення під зміни API, моніторинг помилок, реакція на звернення.

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

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060
  • Розробка віджета онлайн-запису для медичного центру
    Розробка віджета онлайн-запису для медичного центру
    837
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    928
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    865
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1223