Як push-повідомлення торгового бота надходять миттєво

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

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Як push-повідомлення торгового бота надходять миттєво
Простий
від 1 дня до 3 днів
Часті запитання

Чому push-повідомлення торгового бота надходять із затримкою

Затримка push-повідомлень торгового бота майже ніколи не пов'язана з «повільним інтернетом». Повідомлення проходить ланцюжок: подія на біржовому шлюзі → черга повідомлень → сервіс розсилки → транспорт операційної системи → пристрій.

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

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

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

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

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

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

Що дає відмовостійка доставка сигналів

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

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

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

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

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

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

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

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

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

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

Способи доставки: порівняння варіантів інтеграції

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

Варіант Коли підходить Обмеження
Пряме надсилання через сервіс доставки (FCM/APNs) Власний бекенд уже формує події угоди, потрібен контроль над текстом і таргетингом Немає гарантії порядку доставки; за агресивного енергозбереження пристрою сигнал може надійти із затримкою; потрібна власна логіка повторів і дедуплікації
Через брокер повідомлень (черга + воркер-відправник) Висока частота подій, кілька споживачів, потрібна стійкість до сплесків З'являється проміжна ланка, яка сама потребує моніторингу; затримка зростає на час постановки та зняття з черги
Вебхук від біржі/брокера напряму в застосунок Простий сценарій, мінімум інфраструктури Немає гарантії доставки на пристрій, якщо застосунок закрито; легко губляться події за недоступності отримувача
Локальне опитування (періодичний запит стану) Резервний канал, коли push недоступний Затримка дорівнює інтервалу опитування; за частих запитів зростає витрата батареї та трафіку

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

Вибір варіанта інтеграції визначається не «модністю» стеку, а вимогами до затримки та ціни втрати події.

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

Як ми вибудовуємо доставку push-повідомлень торгового бота

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

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

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

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

Конфігурації, схеми та регламенти на виході

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

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

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

Кейс: як ми скоротили затримку сигналів у 4 рази

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

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

Ми зняли метрики до змін: середня затримка доставки сигналу — близько 12 секунд, на пікових навантаженнях — до 40. Частка сигналів, доставлених пізніше 5 секунд, трималася на рівні 18%.

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

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

Пріоритет повідомлення виставлено високий, щоб система не відкладала доставку за економії заряду, а на клієнті додано дедуплікацію — повторний пуш за тим самим сигналом не створює другий алерт.

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

Метрика До Після
Середня затримка доставки ~12 с ~3 с
Затримка на піку до 40 с до 9 с
Частка сигналів пізніше 5 с 18% 4%
Втрачені повідомлення не відстежувалися <0,5%

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

Чим відрізняється push-повідомлення від in-app повідомлення?

Push-повідомлення надходить через системний сервіс операційної системи та спливає на заблокованому екрані, коли застосунок закрито або вивантажено з пам'яті.

In-app повідомлення живе всередині активної сесії: воно малюється поверх поточного екрана і існує лише поки користувач тримає застосунок відкритим.

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

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

Всередині активної сесії повідомлення доставляється одразу по постійному з'єднанню, але тільки якщо застосунок на передньому плані.

Тому критичні події — спрацювання умови, виконання заявки, стоп-лосс — надсилаємо системним повідомленням, а деталі та підтвердження показуємо in-app, коли користувач уже в застосунку.

Вибір каналу — це не «або-або», а маршрутизація за станом клієнта. Сервер знає, чи активна сесія: якщо так, сигнал іде швидким шляхом і не дублюється банером; якщо ні — надходить системне повідомлення з високим пріоритетом.

Так користувач не отримує два повідомлення про одну подію і не пропускає важливе через те, що застосунок згорнуто.

Доповнюють одне одного вони і за змістом. Системне повідомлення несе мінімум: що спрацювало і на якому інструменті, — цього достатньо, щоб людина відкрила застосунок. Розгорнутий контекст — графік, обсяг, причина спрацювання — віддаємо in-app, де є місце і екран. Такий поділ знижує шум: короткий сигнал не перевантажений, а повна картина чекає всередині.

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

Це страхує від втрати сигналу в момент, коли телефон був offline, і закриває головний ризик торгового бота: пропущене спрацювання.

Технічні сумніви та відповіді інженерів

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

Як поводяться сповіщення при слабкому зв'язку та обривах мережі?

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

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

Чому система економії заряду «вбиває» сповіщення і як це обходиться?

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

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

Що відбувається, якщо користувач увійшов з кількох пристроїв?

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

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

Наскільки безпечна передача торгових даних у сповіщеннях?

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

Це закриває основний ризик: перехоплене сповіщення не дає доступу до рахунку і не розкриває позиції.

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

Обговоримо ваше завдання і повернемося з планом

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

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

Що корисно додати до опису завдання:

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

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

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

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

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

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714