{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-@l10n/uk/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Вебхуки"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"вебхуки","__idx":0},"children":["Вебхуки"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["MoreLogin може надсилати JSON-подію методом POST на ваш HTTPS-ендпоінт відразу після того, як операція з хмарним телефоном або хмарним браузером досягла підсумкового результату, тому опитувати результат більше не потрібно. На команду зберігається один URL зворотного виклику, і Local API та Open API пишуть в один і той самий запис."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"налаштування-url-зворотного-виклику","__idx":1},"children":["Налаштування URL зворотного виклику"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Обидва контури надають ту саму операцію. Open API:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X POST \"https://api.morelogin.com/webhook/config\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -d '{\n    \"callbackUrl\": \"https://example.com/morelogin/webhook\",\n    \"enabled\": true\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Local API:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X POST \"http://127.0.0.1:40000/api/webhook/config\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"callbackUrl\": \"https://example.com/morelogin/webhook\",\n    \"enabled\": true\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Маршрут Local API обслуговує настільний клієнт, тому потрібен клієнт MoreLogin v2.66.0 або новіший. Ендпоінт Open API від клієнта не залежить."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["teamId"]}," ніколи не читається із запиту. Кожен виклик налаштовує команду із серверного контексту, тому спрямувати події іншої команди на свій ендпоінт не вийде."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["URL має бути HTTPS, довжиною від 1 до 1024 символів, з іменем хоста, без даних користувача, без фрагмента та з коректним портом. Усі адреси, у які він розв'язується, повинні маршрутизуватися в інтернеті: діапазони localhost, приватні, link-local, CGNAT, метаданих хмари, зарезервовані протоколом, документаційні та 6to4 відхиляються з кодом ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/uk/api-reference/getting-started/error-codes"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["41001"]}]},". Та сама перевірка повторюється в момент, коли доставка відкриває з'єднання, тому імʼя хоста, яке згодом розв'яжеться у приватний діапазон, призведе до невдачі цієї доставки, а не до звернення у вашу мережу."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Збереження — це upsert за командою, тому надіслати те саме тіло двічі безпечно."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"вимкнення-доставки","__idx":2},"children":["Вимкнення доставки"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["enabled: false"]}," зберігає URL і припиняє створення нових подій. Уже поставлені в чергу події скасовуються по одній, у той момент, коли кожну з них має бути авторизовано, і лише поки конфігурація все ще вимкнена — тому при швидкому повторному ввімкненні події з черги продовжать доставлятися, а не будуть відкинуті."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"як-виглядає-доставка","__idx":3},"children":["Як виглядає доставка"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Кожна доставка — це ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}," із такими заголовками:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Заголовок"},"children":["Заголовок"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Значення"},"children":["Значення"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Content-Type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["application/json"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["User-Agent"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MoreLogin-Webhook/1.0"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Webhook-Event-Id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Те саме, що ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventId"]}," у тілі"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Webhook-Event-Type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Те саме, що ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventType"]}," у тілі"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Два заголовки ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Webhook-*"]}," навмисно дублюють поля тіла, щоб маршрутизатор або черга могли розподіляти запити за ними без розбору JSON."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"eventId\": \"c7f3a2b10d8e4f6a9c1b2d3e4f5a6b7c\",\n  \"eventType\": \"cloud_phone.power_off\",\n  \"eventTime\": \"1787241600000\",\n  \"data\": {\n    \"teamId\": \"10001\",\n    \"cloudPhoneId\": \"20001\",\n    \"reason\": \"MONEY_SAVING\"\n  },\n  \"result\": {\n    \"success\": true,\n    \"code\": \"0\",\n    \"message\": null\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Поле"},"children":["Поле"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Опис"},"children":["Опис"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Унікальний ID події. Повтори та внутрішні відтворення тієї самої події використовують його повторно, тому це ключ ідемпотентності"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventType"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Стабільна назва події з таблиці нижче"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventTime"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Коли настав підсумковий результат, у мілісекундах епохи Unix. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Передається рядком"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data.teamId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Команда, якій належить ресурс. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Передається рядком"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data.cloudPhoneId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Хмарний телефон, до якого стосується подія. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Передається рядком"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data.cloudBrowserId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Профіль хмарного браузера, до якого стосується подія. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Передається рядком"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data.runId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Екземпляр запуску хмарного браузера, до якого стосується подія"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data.reason"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Лише у ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_phone.power_off"]}," та ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_browser.stop"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.success"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Чи завершилася операція успішно"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.code"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0"]}," у разі успіху; інакше стабільний бізнес-код помилки, що не залежить від мови"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.message"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," у разі успіху; інакше пояснення мовою команди з переходом на ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["en-US"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Усі числові ідентифікатори та ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventTime"]}," надходять рядками JSON, як і в решті API — див. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/uk/api-reference/getting-started/response-format"},"children":["Загальний формат відповіді"]},". Розбирайте їх як рядки, а не як числа, інакше втратите точність на 64-бітних ID."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"події","__idx":4},"children":["Події"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"eventType"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventType"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Підсумковий результат, про який повідомляється"},"children":["Підсумковий результат, про який повідомляється"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_phone.power_on"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Увімкнення вдалося або не вдалося"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_phone.power_off"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Вимкнення вдалося. Невдале вимкнення події не створює"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_phone.restart"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Перезапуск удався або не вдався"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_phone.reset"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Скидання вдалося або не вдалося"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_phone.new_machine"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Новий пристрій одним клацанням удався або не вдався"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_browser.start"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Запуск хмарного браузера вдався або не вдався"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_browser.stop"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Кожна спроба зупинки хмарного браузера, успішна чи ні"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Події хмарного телефона містять ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["teamId"]}," та ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloudPhoneId"]},". Події хмарного браузера містять ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["teamId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloudBrowserId"]}," і ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["runId"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Увімкнення, перезапуск, скидання та створення нового пристрою одним клацанням повідомляють ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["success: true"]}," лише після того, як зворотний виклик сервісу був успішним і локальна синхронізація зафіксована. Помилка списання коштів або асинхронна перевірка проксі, яка завершилася невдало та довела до кінця своє очищення, повідомляють про невдале увімкнення і ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["не"]}," створюють додатково подію вимкнення. Відкладені задачі, наприклад встановлення попередньо визначених застосунків або видалення застарілих файлів, результат не змінюють."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Якщо вимкнення перервало завантаження, ця спроба не створює події увімкнення; успішне вимкнення згодом усе одно створить власне ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_phone.power_off"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"причини-зупинки","__idx":5},"children":["Причини зупинки"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_phone.power_off"]}," додає ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data.reason"]},":"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Значення"},"children":["Значення"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Сенс"},"children":["Сенс"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NORMAL"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Звичайне вимкнення"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONEY_SAVING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Режим економії коштів"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OTHER"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Заборгованість, завершення терміну, обслуговування або інша причина"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cloud_browser.stop"]}," додає ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data.reason"]},":"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Значення"},"children":["Значення"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Сенс"},"children":["Сенс"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NORMAL"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Звичайне закриття"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONEY_SAVING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Режим економії коштів"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ENERGY_SAVING"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Режим енергозбереження"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BROWSER_EXITED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Браузер завершився неочікувано"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OTHER"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Будь-яка інша причина"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Внутрішня помилка архівування змінює лише ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result"]}," і ніколи не перезаписує ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reason"]},", зафіксований на початку зупинки."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"доставка-повтори-та-порядок","__idx":6},"children":["Доставка, повтори та порядок"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Будь-який ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2xx"]}," вважається доставкою. Будь-який інший статус, а також тайм-аути з'єднання та читання і мережеві помилки вважаються невдачею. Тайм-аут з'єднання — 5 секунд, тайм-аут читання — 30 секунд."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Невдала доставка повторюється не більше 6 разів: через 10 секунд, 30 секунд, 60 секунд, 3 хвилини, 10 хвилин і 30 хвилин. Це не більше 7 запитів на одну подію. Після невдачі шостого повтору подія перестає повторюватися автоматично."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Події одного хмарного телефона або одного хмарного браузера доставляються в порядку створення, по одній. Різні ресурси доставляються паралельно, тому не покладайтеся на якийсь порядок між ними."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Повтори однієї події завжди використовують ті самі ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventTime"]}," і тіло. У межових мережевих або відновлювальних ситуаціях та сама подія може бути доставлена кілька разів із незмінними значеннями, тому ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["дедуплікуйте за ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventId"]}]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Для зупинок хмарного браузера одна спроба зупинки дає рівно одну подію. Подальший повтор вручну, примусове звільнення вручну або примусове звільнення, ініційоване системою, — це нова операція, яка отримує новий ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventId"]},". Дві спроби ніколи не об'єднуються в одну подію."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Операції хмарного телефона визначаються за ID задачі сервісу, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["traceId"]}," або стабільною бізнес-позначкою часу. Коли жодного з них немає, сервіс генерує UUID і вважає поточний підсумковий зворотний виклик новою операцією, тому ви отримуєте новий ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventId"]},", а дві різні операції не зливаються в одну."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"реалізація-отримувача","__idx":7},"children":["Реалізація отримувача"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Повертайте ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2xx"]}," відразу після того, як зберегли подію, а реальну роботу виконуйте асинхронно. Тіло відповіді ігнорується, а повільний обробник витратить ваші 30 секунд на читання і відправить подію до розкладу повторів, хоча ви її вже отримали."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Дедуплікуйте за ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventId"]},". Вважайте повтор уже обробленим, а не відтворюйте побічні ефекти знову."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Не вважайте корисне навантаження довіреним вводом лише тому, що воно надійшло на ваш ендпоінт. У цьому випуску зворотні виклики не підписуються, тому надіслати запит може будь-хто, хто дізнався ваш URL. Використовуйте URL, який важко вгадати, і перш ніж виконувати щось дороге, підтвердьте стан через API — наприклад ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/uk/api-reference/cloud-phone/open-api"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /cloudphone/info"]}]}," для хмарного телефона або ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /cloudbrowser/page"]}," для запуску хмарного браузера."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.code"]}," використовує ті самі бізнес-коди, що й синхронний API, тому невдачу можна знайти в ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/uk/api-reference/getting-started/error-codes"},"children":["Коди помилок"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.message"]}," — читабельний для людини рядок, формулювання та мова якого можуть змінюватися; розгалужуйтеся за ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.success"]}," і ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.code"]},", але ніколи за ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result.message"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Машинно-читний контракт кожної події, включно зі схемами та прикладами по подіях, публікується разом зі специфікацією спільних ресурсів: ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/uk/api-reference/shared-resources/open-api"},"children":["Shared Resources Open API"]},"."]}]},"headings":[{"value":"Вебхуки","id":"вебхуки","depth":1},{"value":"Налаштування URL зворотного виклику","id":"налаштування-url-зворотного-виклику","depth":2},{"value":"Вимкнення доставки","id":"вимкнення-доставки","depth":3},{"value":"Як виглядає доставка","id":"як-виглядає-доставка","depth":2},{"value":"Події","id":"події","depth":2},{"value":"Причини зупинки","id":"причини-зупинки","depth":3},{"value":"Доставка, повтори та порядок","id":"доставка-повтори-та-порядок","depth":2},{"value":"Реалізація отримувача","id":"реалізація-отримувача","depth":2}],"frontmatter":{"seo":{"title":"Вебхуки"}},"lastModified":"2026-09-10T13:09:25.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/uk/api-reference/getting-started/webhooks","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}