Що каже код помилки API
Конверт помилки, звідки береться її код, і кожен код, яким відповідає API, — що він означає і що з ним робити.
4 хв читання
Коли API відхиляє запит або не може його виконати, у його відповіді є код — стале ім’я того, що сталося. Ця сторінка перелічує коди, якими відповідає API, і каже, що означає кожен і що з ним робити. Розгалужуйтеся за кодом, а не за повідомленням.
Конверт помилки
Помилка, про яку API повідомляє сам, приходить в одному конверті. Стаття Огляд описує його поля й ті нечисленні відповіді, які приходять без нього.
{
"error": {
"code": "budget_exceeded",
"message": "Budget 74438200973595137 (monthly) exceeded",
"request_id": "7c2e9a41-3b8d-4f6a-9e15-c04d2b7a8f63"
}
}Код, який несе більше, кладе це в details. Пул, у якого закінчилися підключення, називає там останній збій виклику.
{
"error": {
"code": "pool_exhausted",
"message": "No provider connection could serve the request after 3 attempt(s)",
"details": { "last_error_code": "provider_rate_limit" },
"request_id": "0d3c1b9e-5a47-4f0e-9a36-2f6c8d1e7b42"
}
}Поруч із кожним кодом таблиці нижче друкують HTTP-статус, яким API на нього відповідає, — два для коду з двома значеннями, — і прочерк для коду, яким ніколи не відповідають на запит.
SDK зберігають код
Обидва SDK викидають помилку на відповідь-помилку, і помилка зберігає код API: code у Node.js, errorCode у PHP. Перша таблиця нижче називає тип, який кожен SDK викидає для її кодів. У кодів двох інших таблиць власного типу немає, і правило під кожною з цих таблиць каже, який тип викидає SDK. Стаття Обробка помилок показує, як їх ловити.
Коди, для яких у SDK є тип
Для цих кодів кожен SDK викидає власний тип. Більшість із них приходить від операцій, які викликає SDK: запиту до флоу та його викликів моделі, кредитів клієнта.
| Код | HTTP-статус | Тип помилки в SDK | Що це означає | Що робити |
|---|---|---|---|---|
invalid_api_key | 401 | AuthenticationException PHPAuthenticationError Node.js | У запиті немає API-ключа або є ключ, якого Slen не знає, — скопійований з помилкою, відкликаний або замінений ротацією. | Перевірте значення заголовка Authorization. Відкликаний ключ більше не працює — випустіть новий у консолі. |
insufficient_scope | 403 | AuthenticationException PHPAuthenticationError Node.js | Ключ дійсний, але в нього немає дозволу, якого вимагає операція, — або його не містить роль людини, яка ввійшла в консоль. Повідомлення помилки називає цей дозвіл і в обох випадках каже про API-ключ. | Використайте ключ із цим дозволом або випустіть такий ключ. Давайте ключу лише ті дозволи, які потрібні його сервісу. Людині, яка ввійшла в консоль, потрібна роль, що містить цей дозвіл; її дає власник або адміністратор організації. |
not_authenticated | 401 | AuthenticationException PHPAuthenticationError Node.js | Ніхто не ввійшов. У запиті немає ні API-ключа, ні сесії людини, яка ввійшла в консоль, або сесія закінчилася. | Надішліть API-ключ у заголовку Authorization або знову ввійдіть у консоль. |
not_a_member | 403 | AuthenticationException PHPAuthenticationError Node.js | Людина, яка ввійшла в консоль, не учасник організації, про яку запит, або ще не належить до жодної організації. | Прийміть запрошення до організації або перемкніться на організацію, учасником якої ви є. |
account_suspended | 403 | AuthenticationException PHPAuthenticationError Node.js | Обліковий запис людини, яка входить, призупинено, і вхід відхилено. | Обліковий запис не може ввійти, доки його не відновлять. Напишіть у підтримку, щоб дізнатися причину. |
policy_denied | 403 | PolicyDeniedException PHPPolicyDeniedError Node.js | Політика відхилила запит до того, як було зарезервовано будь-які гроші. Повідомлення помилки називає політику. | Прочитайте в повідомленні, яка політика відхилила запит. Змініть запит — модель, операцію, вартість — або змініть політику в консолі. |
model_not_allowed | 403 | PolicyDeniedException PHPPolicyDeniedError Node.js | Вузол моделі у флоу називає модель, якої немає в каталозі, або модель, яку вимкнено. Виконання закінчується як failed з цим кодом. | Виберіть у вузлі моделі модель зі списку моделей — у ньому активні моделі, що мають чинну ціну, — і опублікуйте нову версію. |
budget_exceeded | 402 | BudgetExceededException PHPBudgetExceededError Node.js | Виклик вивів би бюджет за його ліміт. Те, що бюджет уже тримає й витратив у поточному вікні, разом із холдом, який просить цей виклик, більше за ліміт. | Дочекайтеся наступного вікна бюджету — його resets_at каже коли; бюджет типу total заново не починається. Або підніміть ліміт бюджету. |
operation_limit_exceeded | 402 | OperationLimitExceededException PHPOperationLimitExceededError Node.js | Бюджет на операцію обмежує, скільки може зарезервувати один виклик операції, а холд, який просить цей виклик, вищий за це обмеження. | Просіть менше — менше вихідних токенів, дешевшу модель — або підніміть обмеження. Той самий запит буде відхилено знову, доки одне з них не зміниться. |
concurrency_limit_exceeded | 402 | ConcurrencyLimitException PHPConcurrencyLimitError Node.js | Бюджет типу concurrency — у консолі «Одночасні резерви» — дозволяє тримати відкритими задане число холдів одночасно, і всі вони зайняті викликами, які виконуються. | Надішліть запит знову, коли закінчиться один із викликів, що виконуються, або підніміть ліміт бюджету. Запит до флоу надсилайте знову з новим ключем, бо його відхилене виконання зберігає ключ, який у нього був. Це не ліміт запитів ключа. |
insufficient_credits | 402 | InsufficientCreditsException PHPInsufficientCreditsError Node.js | Рахунок клієнта не може покрити ціну виклику в кредитах, або клієнт не має рахунку цього типу кредитів. Списання або коригування відхиляються так само, коли залишили б баланс нижчим за те, що тримає рахунок. | Поповніть кредити клієнта. Рахунок, у налаштуваннях якого дозволено від’ємний баланс, не відхиляє. |
customer_blocked | 403 | CustomerBlockedException PHPCustomerBlockedError Node.js | Клієнта, для якого зроблено запуск, заблоковано. Новий запуск цього клієнта відхиляється до того, як щось створено. Запуск, який уже триває, відхиляється на наступному холді кредитів, і виконання завершується з цим кодом. | Розблокуйте клієнта, щоб його запуски знову проходили. Поки клієнта заблоковано, його кредити можна поповнювати, списувати й коригувати, а виписку — читати. |
customer_not_found | 404 | CustomerNotFoundException PHPCustomerNotFoundError Node.js | Проєкт не знає клієнта, якого називає запит, — клієнта не додавали, не поповнювали й не налаштовували, або його видалили. Так відхиляється виклик операції з ціною для такого клієнта, а також читання, блокування, списання й видалення. Коригування рахунку, якого немає, відхиляється так само. | Спершу додайте клієнта або поповніть його — поповнення створює клієнта й рахунок. |
overrun_stopped | 402 | OverrunStoppedException PHPOverrunStoppedError Node.js | Оцінка виклику моделі у флоу, зроблена знову після того, як узято холд, і до виклику провайдера, перевищила холд більше, ніж дозволяє допуск перевищення вузла, а політика перевитрати вузла моделі — зупинити. Холд повернуто, провайдера не викликано. Той самий код завершує виконання, коли людина відхилила погодження, яке запросила перевитрата, або ніхто не відповів вчасно. У нового вузла моделі політики перевитрати немає, а політика, яка у вузла є, практично не спрацьовує, бо обидві оцінки рахуються за одним і тим самим запитом з різницею в мить. | Надішліть запит знову з новим ключем — виклик буде оцінено заново, і він візьме власний холд. Щоб таких відмов не було, вимкніть політику перевитрати вузла моделі й опублікуйте нову версію. |
overrun_approval_required | 402 | OverrunApprovalRequiredException PHPOverrunApprovalRequiredError Node.js | Оцінка виклику моделі у флоу, зроблена знову після того, як узято холд, і до виклику провайдера, перевищила холд більше, ніж дозволяє допуск перевищення вузла, а політика перевитрати вузла моделі просить людину схвалити різницю. Виконання чекає на це рішення, тому на запит відповідає виконання, що чекає, а не цей код. У нового вузла моделі політики перевитрати немає, а політика, яка у вузла є, практично не спрацьовує, бо обидві оцінки рахуються за одним і тим самим запитом з різницею в мить. | Ухваліть рішення щодо погодження в консолі. Погодження, яке відхилили або щодо якого ніхто не вирішив вчасно, завершує виконання з кодом overrun_stopped. |
idempotency_conflict | 409 | IdempotencyConflictException PHPIdempotencyConflictError Node.js | Ключ Idempotency-Key уже використав інший запит — той самий ключ з іншим тілом або ключ іншого поповнення, списання чи коригування проєкту. | Надішліть новий запит із новим ключем. На повтор першого запиту з його ключем відповідають як раніше. |
idempotency_in_progress | 409 | IdempotencyConflictException PHPIdempotencyConflictError Node.js | Виклик моделі у флоу зустрів холд, який усе ще стоїть під його власним ключем, і його відхилено, щоб провайдера не було викликано двічі. Виконання закінчується як failed з цим кодом. Звичайний запуск із цим не стикається. | Прочитайте виконання та його трасування. Надсилайте запит знову з новим ключем, лише якщо відповідь усе ще потрібна, — за перший виклик могли заплатити. |
cost_calculation_failed | 422 | InvalidRequestException PHPInvalidRequestError Node.js | Модель активна, але в неї немає чинної ціни, тому Slen не може порахувати, скільки коштуватиме виклик, і виклик відхиляється. | Назвіть модель зі списку моделей — у ньому активні моделі, що мають чинну ціну. |
provider_not_configured | 422 | ProviderException PHPProviderError Node.js | Жодне підключення проєкту не може обслужити провайдера запитаної моделі, тому виклик нікуди надіслати. У флоу той самий код приходить, коли пул, через який вузол моделі спрямовує виклик, видалено або вимкнено. | Додайте підключення до цього провайдера в консолі або увімкніть те, яке є. Увімкніть пул знову або виберіть у вузлі моделі інший пул і опублікуйте нову версію. Потім надішліть запит із новим ключем. |
provider_rate_limit | 429 | ProviderException PHPProviderError Node.js | Провайдер відповів, що його ліміт запитів вичерпано. Пул, який перемикає підключення за ліміту запитів, спершу пробує інше; цей код приходить, коли нічого іншого не пробували. | Надішліть виклик знову пізніше з новим ключем. Додайте підключення до пулу або дозвольте пулу перемикати підключення за ліміту запитів. |
provider_error | 502 | ProviderException PHPProviderError Node.js | Провайдер відхилив виклик або відповів тим, чим Slen не може скористатися, і виклик не завершився. | Перевірте, чого запит просить у моделі, — параметр, якого модель не приймає, провайдер відхиляє. Надішліть виклик знову з новим ключем, коли запит буде правильним. |
provider_timeout | 504 | ProviderException PHPProviderError Node.js | До провайдера не вдалося достукатися — ім’я не розв’язалося або з’єднання не встановилося, — тому виклик не пішов. Попри назву, це не означає, що модель відповідала повільно. | Надішліть виклик знову пізніше з новим ключем. Провайдер, до якого достукалися і який не відповів вчасно, — це operation_uncertain, а не цей код. |
provider_unavailable | 502 | ProviderException PHPProviderError Node.js | Провайдер відповів збоєм на своєму боці. Slen ставить це підключення на паузу, а пул, який перемикає підключення, пробує інше. | Надішліть виклик знову пізніше з новим ключем. Пул із кількома підключеннями переживає збій одного з них. |
pool_exhausted | 503 | ProviderException PHPProviderError Node.js | Жодне підключення пулу не змогло обслужити виклик за те число спроб, яке дозволяє пул. last_error_code у деталях помилки називає останній збій, а заголовок Retry-After каже, скільки чекати, коли це відомо. | Зачекайте стільки, скільки каже Retry-After, і надішліть виклик знову з новим ключем. Якщо пул вичерпується часто, додайте до нього підключення. |
operation_uncertain | 504 | OperationUncertainException PHPOperationUncertainError Node.js | Провайдера було викликано, а його відповідь не повернулася, тому невідомо, чи було виклик зроблено й оплачено. Так само закінчується виклик моделі у флоу, який ішов у фоні, якщо провайдер його прийняв, а запитати провайдера про нього більше не вдалося. Холд не повертається — він тримається, доки не спливе. Виконання, яке так закінчилося, отримує статус uncertain. | Не надсилайте виклик знову з новим ключем — це може бути другий оплачений виклик. Прочитайте операцію або виконання, щоб дізнатися, що сталося. Подія вебхука operation.uncertain теж повідомляє про такий виклик. |
ledger_unavailable | 503 | ServiceUnavailableException PHPServiceUnavailableError Node.js | Реєстр витрат був недоступний, коли виклик попросив свій холд. Виклик не авторизовано — для нього нічого не зарезервовано, і його провайдера не викликано. | Надішліть запит знову пізніше — запит до флоу з новим ключем, бо його невдале виконання зберігає ключ, який у нього був. GET /v1/degraded-status каже, що API пропускає, поки реєстр недоступний. |
flow_runtime_error | — | FlowRuntimeException PHPFlowRuntimeError Node.js | Код, який середовище виконання тримає для флоу, що зламався під час виконання з причини, для якої в нього немає вужчого коду. Зараз цим кодом не відповідає жоден запит і ним не закінчується жодне виконання — збій виконання має вужчий код або не має жодного. | Зараз обробляти нічого. Якщо відповідь усе ж принесе цей код, прочитайте трасування виконання, щоб побачити, де воно зупинилося. Виклики моделей до цього місця оплачено, і повтор із новим ключем оплатить їх знову. |
step_limit_exceeded | 500 | FlowRuntimeException PHPFlowRuntimeError Node.js | Виконання не дійшло до кінцевого вузла за те число кроків, яке дозволено одному виконанню. Флоу більший, ніж середовище виконання проходить за один запит. | Скоротіть флоу або розділіть роботу між двома операціями. Потім надішліть запит із новим ключем — на повтор із тим самим ключем відповідає невдале виконання. |
unrouted_port | 500 | FlowRuntimeException PHPFlowRuntimeError Node.js | Вузол вийшов через порт, до якого нічого не підключено, і виконанню не було куди йти. Повідомлення помилки називає вузол і порт. | Підключіть цей порт у конструкторі флоу й опублікуйте нову версію. Потім надішліть запит із новим ключем — на повтор із тим самим ключем відповідає невдале виконання. |
execution_timeout | 504 | TimeoutException PHPTimeoutError Node.js | Виконання флоу вичерпало час, який йому відведено. Виклик моделі, який відповів до цього, оплачено. | Прочитайте трасування виконання, щоб побачити, куди пішов час. Перш ніж повторювати запит, зважте, що повтор із новим ключем знову оплатить те, що вже оплачено. |
http_request_failed | 502 | FlowRuntimeException PHPFlowRuntimeError Node.js | Виклик, який флоу робить до іншого HTTP API, не вдався або отримав у відповідь помилку, а до порту помилки вузла, який його зробив, нічого не підключено. Це не провайдер моделі. Цей вузол заморожено, якщо сервіс не налаштовано інакше, — уже опублікована з ним версія виконується, а нова версія не може його містити. | Перевірте API, яке викликає флоу, потім надішліть запит із новим ключем — на повтор із тим самим ключем відповідає невдале виконання. Порт помилки замороженого вузла не можна підключити в новій версії — щоб змінити, що флоу робить у разі такої помилки, опублікуйте версію без цього вузла. |
rate_limit_exceeded | 429 | RateLimitException PHPRateLimitError Node.js | API-ключ або людина, яка ввійшла в консоль, надіслали за хвилину більше запитів, ніж дозволяє ліміт. У кількох операцій свій, менший ліміт — наприклад, у перевірки підключення провайдера. Заголовок Retry-After відповіді каже, скільки секунд чекати. Читання статусу виконання теж рахується. | Зачекайте стільки, скільки каже Retry-After, і надішліть запит знову. Для відхиленого запиту нічого не зарезервовано й не витрачено. |
service_unavailable | 503 | ServiceUnavailableException PHPServiceUnavailableError Node.js | Slen не зміг достукатися до своєї бази даних і відповів, нічого не зробивши. Той самий код відповідає на зміну бюджету, яка надто довго чекала викликів, що виконуються на цьому бюджеті; нічого не змінено. | Надішліть запит знову пізніше. Відхилена зміна бюджету каже в Retry-After, коли. |
background_hold_expired | — | TimeoutException PHPTimeoutError Node.js | Це не відповідь API — ним закінчується виконання, запущене в асинхронному режимі. Виклик моделі у флоу виконувався в провайдера у фоні, і його холд було закрито іншим списанням, поки виклик чекав, тому виклик закінчився, не спитавши в провайдера відповідь. Нічого не повернуто, і провайдер усе ще може виставити рахунок за прийнятий виклик. Попри назву, холд, який просто сплив, так виклик не закінчує. | Надсилайте запит знову з новим ключем, лише якщо відповідь усе ще потрібна. Провайдер може виставити рахунок і за перший виклик, тому за відповідь, можливо, доведеться заплатити двічі. |
execution_conflict | 500 | FlowRuntimeException PHPFlowRuntimeError Node.js | Виконання не вдалося відкрити — його запис зіткнувся з іншим, і не за ключем ідемпотентності. Флоу не виконувався. | Надішліть запит знову. Якщо це повториться, напишіть у підтримку й укажіть id запиту. |
unknown_node | 500 | FlowRuntimeException PHPFlowRuntimeError Node.js | Опублікована версія флоу веде до вузла, якого середовище виконання не може знайти, тому виконання зупинилося. | Опублікуйте флоу заново з конструктора флоу, потім надішліть запит із новим ключем — на повтор із тим самим ключем відповідає невдале виконання. Якщо з новим ключем помилка повториться, напишіть у підтримку й укажіть id запиту. |
node_type_not_supported | 500 | FlowRuntimeException PHPFlowRuntimeError Node.js | В опублікованій версії флоу є вузол типу, який середовище виконання не вміє виконувати. | Замініть вузол у конструкторі флоу й опублікуйте нову версію. Потім надішліть запит із новим ключем — на повтор із тим самим ключем відповідає невдале виконання. |
Коди без власного типу
Для цих кодів у SDK немає власного типу. Він викидає тип за статусом відповіді — за правилом під таблицею.
| Код | HTTP-статус | Що це означає | Що робити |
|---|---|---|---|
project_access_restricted | 403 | Той, хто викликає, бачить лише частину проєктів організації і спробував змінити те, що належить усій організації, або прочитати журнал аудиту. API-ключу доступний лише проєкт, якому він належить. | З API-ключем створюйте потрібне в проєкті ключа — підключення провайдера, у якого scope дорівнює project. Людина просить внести зміну учасника, якому доступні всі проєкти. |
customer_has_history | 409 | Клієнта не можна видалити, бо з ним уже щось відбувалося — на рахунку є кредити або резерв, або у виписці є запис. Журнал кредитів лише доповнюється, і його записи пояснюють баланс. | Заблокуйте клієнта замість видалення. |
reservation_not_found | 404 | Це не відповідь жодної операції API. Slen тримає цей код для холду, який не може знайти, поки закриває виклик моделі. | Обробляти нічого. Якщо відповідь усе ж його принесе, напишіть у підтримку й наведіть id запиту. |
reservation_expired | 409 | Це не відповідь жодної операції API. Slen тримає цей код для продовження холду, що сплив; холд, що сплив, усе ще приймає списання свого виклику. | Обробляти нічого. Якщо відповідь усе ж його принесе, напишіть у підтримку й наведіть id запиту. |
invalid_request | 409, 422 | Запит не можна виконати в такому вигляді, і повідомлення помилки каже чому — політика без параметра, потрібного її дії, або з умовою, якої її дія ніколи не зустрічає; вибрані проєкти для учасника, чия роль відкриває всі проєкти; заголовок Idempotency-Key довший за 190 символів. SDK самі викидають помилку з цим кодом для виклику, який відхиляють до надсилання. | Прочитайте повідомлення й змініть запит. |
idempotency_key_required | 400 | Операція вимагає заголовок Idempotency-Key, а в запиті його немає або він порожній. | Надішліть власний ключ, який називає одиницю роботи, і надсилайте той самий ключ, коли повторюєте цю роботу. |
invalid_flow_input | 422 | У вході немає того, що потрібно вузлу флоу, — флоу, який викликає модель, вимагає непорожній messages у вході. Виконання закривається як failed, і ключ залишається за ним. | Виправте вхід і надішліть його з новим ключем. На повтор із тим самим ключем відповідає невдале виконання. |
execution_parked | — | Це не відповідь API. Усередині середовища виконання він позначає виконання, яке зупинилося, щоб чекати, а на запит відповідає саме виконання — те, що чекає, або в черзі. | Обробляти як помилку нічого. Дочекайтеся виконання так само, як будь-якого іншого, що чекає. |
flow_not_found | 404 | На код операції не відповідає жоден флоу — до нього не прив’язано флоу, у флоу немає опублікованої версії або флоу в архіві. Нічого не створюється, тому ключ ідемпотентності залишається вільним. Той самий код відповідає на id флоу, який недоступний тому, хто викликає. | Прив’яжіть код операції до флоу й опублікуйте флоу. Повтор із тим самим ключем виконається, коли флоу зможе відповісти. |
operation_not_found | 404 | Жодна операція — запис одного виклику моделі з його спробами в провайдерів — не має такого id у проєкті ключа. | Перевірте id. Операція іншого проєкту відповідає так само. |
invalid_credentials | 401, 502 | Два випадки. Вхід у консоль, за якого пошта й пароль не збігаються з жодним обліковим записом. Виклик моделі, за якого провайдер відхилив ключ підключення, що обслуговувало виклик, — тоді Slen позначає облікові дані цього підключення як недійсні. | Увійдіть із правильним паролем. Для підключення вкажіть у ньому чинний ключ провайдера в консолі. |
csrf_token_mismatch | 419 | Запит сесії консолі прийшов без свого CSRF-токена або із застарілим. Запит з API-ключем цей код ніколи не отримує. | Перезавантажте сторінку консолі й повторіть дію. |
not_found | 404 | Реєстрація та вхід у консоль відповіли так, ніби такої адреси немає. Вони відкриті лише для браузера, у якому відкрили видане посилання доступу. | Відкрийте своє посилання доступу в цьому браузері, потім знову зареєструйтеся або ввійдіть. |
flow_execution_not_found | 404 | Виконання з таким id немає в проєктах, доступних тому, хто викликає, — його не було взагалі, або воно належить іншому проєкту. | Перевірте id. Це execution_id відповіді, яка розпочала виконання. |
Для коду без власного типу SDK обирає тип помилки за HTTP-статусом відповіді:
401,403AuthenticationExceptionPHP,AuthenticationErrorNode.js402SpendRefusedExceptionPHP,SpendRefusedErrorNode.js429RateLimitExceptionPHP,RateLimitErrorNode.js- 500 і вище
ProviderExceptionPHP,ProviderErrorNode.js - будь-який інший статус
InvalidRequestExceptionPHP,InvalidRequestErrorNode.js
Коди консолі й налаштувань
Ці коди приходять від операцій консолі й налаштувань: входу й сесій, організацій і проєктів, учасників і запрошень, ключів, політик, бюджетів, флоу та їхніх версій, погоджень, сповіщень, вебхуків, підключень і пулів, оновлень консолі в реальному часі, — а invalid_date_range від списків реєстру, холдів і операцій. Жоден метод SDK ці операції не викликає. Правило під таблицею — правило SDK для будь-якого коду без власного типу.
| Код | HTTP-статус | Що це означає | Що робити |
|---|---|---|---|
session_required | 403 | Це може зробити лише людина, яка ввійшла в консоль, — створити організацію, змінити або видалити учасника, надіслати, повторно надіслати чи відкликати запрошення, підключити або змінити канал чи маршрут повідомлень, прочитати й змінити свої повідомлення. API-ключ цього не може. | Зробіть це в консолі, увійшовши як учасник, чия роль це дозволяє. |
member_forbidden | 403 | Роль людини, яка ввійшла, не дозволяє такої зміни цього учасника, або зміна стосується її власної участі. Роль власника дає й забирає лише власник, а змінює чи видаляє учасника лише власник або адміністратор. | Попросіть власника внести зміну. Щоб самому розлучитися з організацією, вийдіть із неї. |
channel_forbidden | 403 | Консоль попросила оновлення в реальному часі щодо проєкту, який тому, хто викликає, читати не можна, — іншого проєкту, ніж той, якому належить ключ, або проєкту, недоступного людині. | Перемкніться на доступний вам проєкт і відкрийте сторінку знову. |
budget_not_found | 404 | Бюджету з таким id немає в проєктах, доступних тому, хто викликає, — його не було взагалі, або він належить іншому проєкту. | Перевірте id. Отримайте список бюджетів, щоб знайти потрібний; архівний бюджет потрапляє до списку, якщо include_archived дорівнює 1. |
invalid_date_range | 422 | Вікно списку реєстру, холдів чи операцій — не таке, яке список читає. Обидва кінці приходять разом або не приходять зовсім, кінець не може бути раніше за початок, вікно — не більше семи днів, і кожен кінець — момент, який список може розібрати. | Надішліть from і to разом, кінець після початку, не далі семи днів одне від одного, — або не надсилайте жодного й читайте останні сім днів. Щоб прочитати довший період, зсувайте вікно. |
flow_invalid | 422 | У графі флоу є помилки, тому він не може стати версією, яка виконується. Їх знайшла публікація в чернетці, або відкат знайшов, що версія, до якої він повернувся б, називає модель чи пул, яких більше немає. Подробиці помилки перелічують кожну проблему з її кодом і вузлом, якого вона стосується. | Виправте кожну помилку списку в конструкторі флоу й опублікуйте знову. Попередження публікацію не зупиняють. Для відкату виберіть іншу версію або опублікуйте чернетку, яка більше не називає зниклого. |
flow_draft_not_found | 404 | У флоу немає чернетки для публікації — його опублікували й відтоді не змінювали. Так само відповідає перевірка флоу, у якого немає ні чернетки, ні опублікованої версії. | Змініть флоу, щоб почати нову чернетку, потім опублікуйте її. Щоб версія, яка виконується зараз, виконувалася й далі, публікувати нічого не потрібно. |
flow_slug_taken | 409 | У тому самому проєкті в ту саму мить створювався інший флоу й зайняв те саме коротке ім’я. Флоу не створено. | Створіть флоу знову. Ім’я, яке в проєкті вже є, отримує число в кінці свого короткого імені. |
approval_not_found | 404 | Запиту на погодження з таким id немає в проєктах, доступних тому, хто викликає, — його не було взагалі, або він належить іншому проєкту. | Перевірте id. Отримайте список запитів на погодження проєкту, щоб знайти потрібний. |
alert_not_found | 404 | Сповіщення з таким id немає в проєктах, доступних тому, хто викликає, — його не було взагалі, або воно належить іншому проєкту. | Перевірте id. Прочитайте стрічку сповіщень, щоб знайти потрібне. |
alert_rule_not_found | 404 | Правила сповіщення з таким id немає в проєктах, доступних тому, хто викликає, — його не було взагалі, його видалили, або воно належить іншому проєкту. | Перевірте id. Правила перелічено на вкладці правил сторінки сповіщень. |
alert_rule_unknown_setting | 422 | Налаштування правила сповіщення називають налаштування, якого в його типу немає. Повідомлення називає налаштування, які тип приймає. | Надсилайте лише налаштування, які повідомлення називає для цього типу. |
api_key_not_found | 404 | API-ключа з таким id немає в проєктах, доступних тому, хто викликає, — його не було взагалі, або він належить іншому проєкту. Для відкликаного ключа ротація неможлива, і запит відповідає так само. | Перевірте id на сторінці ключів консолі. Щоб замінити відкликаний ключ, випустіть новий. |
invite_not_found | 404 | За цим посиланням чи цим id запрошення немає. Посилання могли набрати з помилкою, або запрошення належить іншій організації. | Відкрийте посилання точно в тому вигляді, у якому воно прийшло в листі, або попросіть нове запрошення. |
invite_not_pending | 410 | Запрошення існує, але більше не відкрите — його прийняли, відхилили чи відкликали, або його строк минув. | Попросіть власника чи адміністратора організації запросити вас знову. |
invite_email_mismatch | 403 | Запрошення надіслано на іншу адресу електронної пошти, ніж в облікового запису, який увійшов. | Увійдіть в обліковий запис тієї адреси, на яку надіслано запрошення, або попросіть запрошення на свою адресу. |
email_not_verified | 403 | Обліковий запис ще не підтвердив свою адресу електронної пошти, тому не може прийняти запрошення або підключити Telegram для повідомлень. | Відкрийте посилання підтвердження, надіслане на цю адресу, потім відкрийте запрошення або підключіть Telegram знову. |
invite_forbidden | 403 | Людина, яка ввійшла, не може керувати цим запрошенням. Запрошує лише власник або адміністратор, а запрошення на роль власника надсилає, повторно надсилає й відкликає лише власник. API-ключ запрошеннями не керує. | Попросіть власника — або адміністратора, якщо роль нижча за власника, — надіслати чи змінити запрошення. |
member_not_found | 404 | Учасника з таким id в організації немає — він міг вийти або бути видаленим. | Прочитайте список учасників знову й використайте id, який він дає. |
last_owner | 409 | Зміна залишила б організацію без власника. В організації лишається принаймні один. | Спершу зробіть власником іншого учасника, потім змініть роль цього, видаліть його або вийдіть. |
organization_not_found | 404 | Організації немає, або людина, яка ввійшла, не її учасник. Так само відповідає запит, який називає іншу організацію, ніж у ключа. | Перевірте id і перемкніться на організацію, учасником якої ви є. |
organization_limit_reached | 409 | Людина вже володіє стількома організаціями, скількома може володіти одна людина, — двадцятьма, якщо сервіс не налаштовано інакше. | Зробіть іншого учасника власником організації, яка вам більше не потрібна, і вийдіть із неї, потім створіть нову. |
project_not_found | 404 | Проєкту з таким id в організації немає, або він недоступний тому, хто викликає. | Перевірте id. Отримайте список проєктів організації, щоб знайти доступний вам. |
project_required | 422 | В організації ще немає проєкту, а запиту він потрібен для роботи. | Створіть проєкт в організації, потім повторіть дію. |
policy_not_found | 404 | Політики з таким id немає в проєктах, доступних тому, хто викликає, — її не було взагалі, її видалили, або вона належить іншому проєкту. | Перевірте id. Прочитайте список політик, щоб знайти потрібну. |
provider_connection_not_found | 404 | Підключення провайдера з таким id немає в проєктах, доступних тому, хто викликає, — його не було взагалі, або воно належить іншому проєкту. Пул відмовляється прийняти таке підключення з тим самим кодом. | Перевірте id. Отримайте список підключень, а для пулу виберіть підключення свого проєкту або всієї організації. |
provider_pool_not_found | 404 | Пулу провайдерів з таким id немає в проєктах, доступних тому, хто викликає, — його не було взагалі, або він належить іншому проєкту. | Перевірте id. Отримайте список пулів, щоб знайти потрібний. |
webhook_endpoint_not_found | 404 | Вебхука з таким id в організації немає, або він належить проєкту, недоступному тому, хто викликає. | Перевірте id на сторінці вебхуків консолі. |
webhook_url_not_allowed | 422 | Slen не доставлятиме на цю адресу. Вебхуку потрібна адреса https на порту 443, з іменем хоста, а не IP-адресою, без логіна й пароля, і його хост не може вести в приватну мережу. | Укажіть публічну адресу https свого сервісу. Хост, ім’я якого ще не розв’язується, приймається, бо кожна доставка розв’язує його знову. |
email_already_registered | 409 | Обліковий запис із цією адресою електронної пошти вже є, тому новий не створено. | Увійдіть із цією адресою або скиньте її пароль, якщо забули його. |
invalid_token | 422 | Посилання для підтвердження адреси електронної пошти чи для нового пароля неправильне, уже використане або його строк минув. | Попросіть нове посилання й відкрийте його в тому вигляді, у якому воно прийшло в листі. |
too_many_attempts | 429 | За короткий час не вдалося забагато спроб увійти чи задати новий пароль — для цього облікового запису або з цієї мережевої адреси, тому спроби на якийсь час відхиляються. | Зачекайте час, який називає заголовок Retry-After, потім спробуйте знову з правильним паролем — або задайте новий. |
oauth_failed | 422 | Вхід через Google не вдалося завершити. Спроба тривала надто довго чи не пройшла перевірку, або Google не підтвердив адресу, яку пов’язав би з уже наявним обліковим записом. | Почніть вхід через Google заново. Якщо Google не підтвердив адресу, увійдіть із паролем облікового запису. |
flow_version_not_found | 404 | У флоу немає версії з таким номером. | Отримайте список версій флоу й використайте номер, який він дає. |
flow_version_not_published | 409 | Названа версія — чернетка. Знову виконуватися може лише версія, яку опублікували. | Назвіть опубліковану версію або опублікуйте чернетку. |
no_previous_version | 409 | Відкат без номера версії веде до опублікованої версії одразу під тією, яка виконується, а такої немає — флоу на своїй першій версії, або жодна його версія не виконується. | Назвіть версію, до якої перейти, або опублікуйте нову. |
draft_conflict | 409 | Чернетка вже не та, для якої зроблено запит. Хтось зберіг її в проміжку або опублікував і почав нову — або під час публікації надійшло збереження чи інша публікація, поки вона готувалася. Нічого не записано й нічого не опубліковано. | Прочитайте чернетку знову, застосуйте до неї свою зміну й надішліть запит знову з номерами, які в неї тепер. |
operation_already_bound | 409 | На цей код операції вже відповідає інший флоу проєкту. Флоу відповідає на один код, а код веде до одного флоу; цей флоу зберігає код, який у нього був. | Спершу приберіть код в іншого флоу або виберіть інший код. |
approval_expired | 409 | Запит на погодження більше не можна вирішити. Його строк минув, і тепер він закритий так, ніби ніхто не вирішив, — або його виконання закінчилося й більше не чекає. | Рішення більше ніщо не чекає. Відкрийте виконання, щоб побачити, чим воно закінчилося, і надішліть запит до флоу знову з новим ключем, якщо робота все ще потрібна. |
approval_already_decided | 409 | Запит на погодження більше не очікує — хтось вирішив його першим, або його строк минув. | Прочитайте запит знову, щоб побачити рішення й хто його ухвалив. |
connection_in_use | 409 | Підключення провайдера — останнє ввімкнене підключення пулу, тому його видалення залишило б пулу нічого викликати. | Додайте до пулу інше підключення або ввімкніть одне з його підключень, потім видаліть це. Або спершу видаліть пул. |
pool_in_use | 409 | Флоу все ще викликає моделі через цей пул — його називає версія флоу, яка виконується, або незавершене виконання йде на версії, яка його називає. Пул не видалено. | Опублікуйте версії цих флоу, які називають інший пул, дайте виконанням завершитися, потім видаліть пул. |
pool_connection_exists | 409 | Підключення вже входить до цього пулу. | Натомість змініть умови участі підключення — його пріоритет, вагу, множник вартості чи те, чи ввімкнене воно. |
pool_connection_not_found | 404 | Підключення не входить до цього пулу. | Прочитайте пул, щоб побачити його підключення, або спершу додайте підключення. |
connection_incompatible | 422 | Підключення не може ввійти до цього пулу. Воно іншого провайдера, ніж пул, а пул не приймає підключень інших провайдерів, — або підключення видалено. | Виберіть підключення провайдера пулу або дозвольте пулу приймати підключення інших провайдерів. |
unsupported_pool_strategy | 422 | Виклик моделі пройшов через пул, стратегію якого Slen не виконує. API таку стратегію ніколи не приймає; пул отримав її іншим шляхом. | Задайте пулу стратегію priority, least_utilized або weighted, потім надішліть запит знову з новим ключем — виклик, який зустрів цей код, закінчився. |
already_a_member | 409 | Людина з цією адресою електронної пошти вже учасник організації, тому запрошення не надіслано. | Змініть роль учасника, якщо малося на увазі це. |
invite_already_pending | 409 | Запрошення на цю адресу електронної пошти в організації вже відкрите. | Надішліть відкрите запрошення повторно або відкличте його й запросіть знову. |
invite_limit_reached | 429 | За короткий час пішло забагато листів із запрошеннями — організація надсилає не більше 50 на добу, одна людина не більше 20 на годину, нові запрошення й повторні разом, якщо сервіс не налаштовано інакше, — тому це на якийсь час відхилено. | Зачекайте час, який називає заголовок Retry-After, потім запросіть або надішліть повторно ще раз. Уже надіслані запрошення тим часом лишаються відкритими. |
user_session_not_found | 404 | Активної сесії з таким id у людини, яка ввійшла, немає. Вона могла закінчитися, або з неї вже вийшли. | Прочитайте список своїх сесій знову. Із сесією, якої більше немає, нічого робити не потрібно. |
notification_channel_not_found | 404 | Каналу повідомлень із таким id в організації немає, або він належить проєкту, недоступному тому, хто викликає. Особистий канал іншої людини теж не знаходиться. | Перевірте id у списку каналів команди або в списку своїх каналів. |
notification_route_not_found | 404 | Маршруту повідомлень із таким id в організації немає, або він належить проєкту, недоступному тому, хто викликає. Маршрут також видаляється, коли його останній одержувач покидає організацію, і через деякий час після видалення правила сповіщення, до якого він прив’язаний. | Прочитайте список маршрутів знову. |
notification_subscription_not_found | 404 | Підписки з таким id у людини, яка ввійшла, у цій організації немає. Підписка належить лише своєму учасникові, і підписка іншого учасника не знаходиться. | Прочитайте список своїх підписок знову. |
notification_channel_url_not_allowed | 422 | Slen не надсилатиме повідомлення на цю адресу. Адреса каналу має бути вебхуком того сервісу, до якого належить канал, — адресою Slack на hooks.slack.com у /services/, адресою вебхука Discord або адресою робочого процесу Teams в Azure Logic Apps чи Power Automate, з /workflows/ у шляху. Адреса виведеного з роботи з’єднувача Office 365 відхиляється, як і адреса, яка не https на порту 443, містить логін або пароль, називає IP-адресу або веде в приватну мережу. Група в Telegram адреси не приймає взагалі. Подробиці помилки називають випадок. | Скопіюйте адресу із сервісу знову й вставте її цілою. Для Microsoft Teams створіть робочий процес каналу, а не з’єднувач. |
notification_channel_kind_unavailable | 422 | Ця інсталяція Slen не пропонує Telegram, бо для неї не налаштовано бота Telegram. | Використайте натомість Slack, Microsoft Teams, Discord або пошту чи попросіть того, хто відповідає за інсталяцію, налаштувати бота. |
notification_channel_state_invalid | 409 | Канал не в тому стані, якого потребує ця дія. Чат підтверджується, лише поки він чекає на підтвердження, і лише тим, хто отримав його посилання. Тест іде лише в активний канал. Канал, що чекає на своє посилання, вмикається підтвердженням чату, а не зміною статусу. Обліковий запис має один чат Telegram, тому другий не підключається, поки перший увімкнений або на паузі. | Прочитайте канал знову й дійте за його станом. Підтвердьте чат як той, хто отримав посилання, відновіть канал на паузі перед тестом або відключіть свій Telegram, перш ніж підключати інший. |
notification_link_expired | 410 | Посилання, яке підключає чат Telegram, спливло раніше, ніж його прийняв чат. Посилання діє 15 хвилин, якщо сервіс не налаштовано інакше. | Для групи команди видаліть канал і підключіть групу знову з новим посиланням. Для свого чату підключіть Telegram знову серед своїх повідомлень, і для того самого каналу прийде нове посилання. |
notification_limit_reached | 409 | Організація вже має стільки каналів або маршрутів повідомлень, скільки їй можна, або учасник має стільки підписок у ній, — 20 каналів і 50 маршрутів в організації та 20 підписок в учасника, якщо сервіс не налаштовано інакше. | Видаліть канал, маршрут або підписку, які більше не потрібні, і спробуйте знову. |
notification_event_not_allowed | 422 | Маршрут або підписка називає подію, про яку людям повідомляти не можна, або одержувача, чия роль не читає цю подію в консолі. Спостерігач не бачить погоджень, тому ні маршрут, ні підписка не приносить спостерігачеві погодження. | Називайте серед подій лише сповіщення й погодження та не включайте спостерігача в маршрут, який несе погодження. |
notification_unsubscribe_invalid | 404 | Посилання для відписки від листів-повідомлень зроблене не Slen. Його обрізали або змінили дорогою. | Відкрийте посилання з листа знову, ціле, або вимкніть листи серед своїх повідомлень у консолі. |
Для коду без власного типу SDK обирає тип помилки за HTTP-статусом відповіді:
401,403AuthenticationExceptionPHP,AuthenticationErrorNode.js402SpendRefusedExceptionPHP,SpendRefusedErrorNode.js429RateLimitExceptionPHP,RateLimitErrorNode.js- 500 і вище
ProviderExceptionPHP,ProviderErrorNode.js - будь-який інший статус
InvalidRequestExceptionPHP,InvalidRequestErrorNode.js
Код, із яким закінчується виконання
Виконання, яке не завершилося, зберігає код в error_code, а error_message каже те саме реченням. Читання статусу, очікування й повтор запиту з його ключем читають обидва поля. Більшість цих кодів — коди цієї сторінки: код помилки, якою відповіли на запит. Два види — ні.
Вузол Відхилити запит завершує виконання з кодом і повідомленням, заданими в ньому. Вузол, у якому не задано ні того, ні іншого, завершує його так:
{
"status": "rejected",
"error_code": "rejected_by_flow",
"error_message": "The request was rejected by the flow"
}Середовище виконання закриває виконання, яке більше не може провести, із власним кодом: його обробник зупинився, воно чекало довше, ніж виконанню можна чекати, його стан не вдалося зберегти або прочитати. Що сталося, каже error_message. Виконання, яке чекало надто довго, закінчується так:
{
"status": "failed",
"error_code": "parked_expired",
"error_message": "The execution waited longer than a parked execution may and was closed"
}У виконання, яке закрила помилка без коду в API, немає ні того, ні іншого: error_code і error_message дорівнюють null.
Що читати далі
Огляд — поля конверта й відповіді, які приходять без нього.
Автентифікація — відмови ключу та його дозволам.
Обробка помилок — ловіть помилки в SDK і дізнавайтеся, чи коштував виклик грошей.
Асинхронні запуски й очікування — як прочитати, чим закінчилося виконання.
Виконання — статус і код, з якими закінчилося виконання, через HTTP.
Коли результат невідомий — що робити після
operation_uncertain.
Зібрано з openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d