Яким типом помилки стає кожен код
PHPТип помилки, який кожен SDK кидає для коду помилки API, як типи пов’язані між собою і які помилки SDK кидають самі.
Кожен SDK кидає для кожного коду помилки API свій тип, і обидва SDK у цьому збігаються: код відповідає тому самому типу в PHP і в Node.js. Ця сторінка називає тип кожного коду й помилки, які SDK кидають без відповіді API.
Як пов’язані типи
Усі помилки SDK мають один кореневий тип:
SlenExceptionу PHP, у просторі іменSlen\Sdk\Exceptions, іSlenErrorу Node.js.catchкореневого типу перехоплює будь-яку помилку, яку кидає SDK.Тип називається однаково в обох мовах:
BudgetExceededExceptionу PHP — цеBudgetExceededErrorу Node.js.Відмови у витраті мають свого батька:
SpendRefusedExceptionу PHP іSpendRefusedErrorу Node.js. Кожна відповідь зі статусом402кидається як цей тип або як тип, який його розширює.Заблокований клієнт,
CustomerBlockedExceptionабоCustomerBlockedError, розширює тип відмови політики,PolicyDeniedExceptionабоPolicyDeniedError.Кожен інший тип розширює кореневий напряму.
Код, для якого SDK не має типу, кидається за своїм статусом: як помилка ключа для
401або403, як відмова у витраті для402, як ліміт запитів для429, як помилка провайдера для5xxі як відхилений запит для будь-якого іншого статусу.
Тип кожного коду
Таблиця не містить кодів консолі й налаштувань: жоден виклик 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 | Людина, яка ввійшла в консоль, не учасник організації, про яку запит, або ще не належить до жодної організації. | Прийміть запрошення до організації або перемкніться на організацію, учасником якої ви є. |
project_access_restricted | 403 | — | Той, хто викликає, бачить лише частину проєктів організації і спробував змінити те, що належить усій організації, або прочитати журнал аудиту. API-ключу доступний лише проєкт, якому він належить. | З API-ключем створюйте потрібне в проєкті ключа — підключення провайдера, у якого scope дорівнює project. Людина просить внести зміну учасника, якому доступні всі проєкти. |
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_has_history | 409 | — | Клієнта не можна видалити, бо з ним уже щось відбувалося — на рахунку є кредити або резерв, або у виписці є запис. Журнал кредитів лише доповнюється, і його записи пояснюють баланс. | Заблокуйте клієнта замість видалення. |
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. |
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, а в запиті його немає або він порожній. | Надішліть власний ключ, який називає одиницю роботи, і надсилайте той самий ключ, коли повторюєте цю роботу. |
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 | Код, який середовище виконання тримає для флоу, що зламався під час виконання з причини, для якої в нього немає вужчого коду. Зараз цим кодом не відповідає жоден запит і ним не закінчується жодне виконання — збій виконання має вужчий код або не має жодного. | Зараз обробляти нічого. Якщо відповідь усе ж принесе цей код, прочитайте трасування виконання, щоб побачити, де воно зупинилося. Виклики моделей до цього місця оплачено, і повтор із новим ключем оплатить їх знову. |
invalid_flow_input | 422 | — | У вході немає того, що потрібно вузлу флоу, — флоу, який викликає модель, вимагає непорожній messages у вході. Виконання закривається як failed, і ключ залишається за ним. | Виправте вхід і надішліть його з новим ключем. На повтор із тим самим ключем відповідає невдале виконання. |
step_limit_exceeded | 500 | FlowRuntimeException PHPFlowRuntimeError Node.js | Виконання не дійшло до кінцевого вузла за те число кроків, яке дозволено одному виконанню. Флоу більший, ніж середовище виконання проходить за один запит. | Скоротіть флоу або розділіть роботу між двома операціями. Потім надішліть запит із новим ключем — на повтор із тим самим ключем відповідає невдале виконання. |
unrouted_port | 500 | FlowRuntimeException PHPFlowRuntimeError Node.js | Вузол вийшов через порт, до якого нічого не підключено, і виконанню не було куди йти. Повідомлення помилки називає вузол і порт. | Підключіть цей порт у конструкторі флоу й опублікуйте нову версію. Потім надішліть запит із новим ключем — на повтор із тим самим ключем відповідає невдале виконання. |
execution_timeout | 504 | TimeoutException PHPTimeoutError Node.js | Виконання флоу вичерпало час, який йому відведено. Виклик моделі, який відповів до цього, оплачено. | Прочитайте трасування виконання, щоб побачити, куди пішов час. Перш ніж повторювати запит, зважте, що повтор із новим ключем знову оплатить те, що вже оплачено. |
execution_parked | — | — | Це не відповідь API. Усередині середовища виконання він позначає виконання, яке зупинилося, щоб чекати, а на запит відповідає саме виконання — те, що чекає, або в черзі. | Обробляти як помилку нічого. Дочекайтеся виконання так само, як будь-якого іншого, що чекає. |
http_request_failed | 502 | FlowRuntimeException PHPFlowRuntimeError Node.js | Виклик, який флоу робить до іншого HTTP API, не вдався або отримав у відповідь помилку, а до порту помилки вузла, який його зробив, нічого не підключено. Це не провайдер моделі. Цей вузол заморожено, якщо сервіс не налаштовано інакше, — уже опублікована з ним версія виконується, а нова версія не може його містити. | Перевірте API, яке викликає флоу, потім надішліть запит із новим ключем — на повтор із тим самим ключем відповідає невдале виконання. Порт помилки замороженого вузла не можна підключити в новій версії — щоб змінити, що флоу робить у разі такої помилки, опублікуйте версію без цього вузла. |
rate_limit_exceeded | 429 | RateLimitException PHPRateLimitError Node.js | API-ключ або людина, яка ввійшла в консоль, надіслали за хвилину більше запитів, ніж дозволяє ліміт. У кількох операцій свій, менший ліміт — наприклад, у перевірки підключення провайдера. Заголовок Retry-After відповіді каже, скільки секунд чекати. Читання статусу виконання теж рахується. | Зачекайте стільки, скільки каже Retry-After, і надішліть запит знову. Для відхиленого запиту нічого не зарезервовано й не витрачено. |
flow_not_found | 404 | — | На код операції не відповідає жоден флоу — до нього не прив’язано флоу, у флоу немає опублікованої версії або флоу в архіві. Нічого не створюється, тому ключ ідемпотентності залишається вільним. Той самий код відповідає на id флоу, який недоступний тому, хто викликає. | Прив’яжіть код операції до флоу й опублікуйте флоу. Повтор із тим самим ключем виконається, коли флоу зможе відповісти. |
operation_not_found | 404 | — | Жодна операція — запис одного виклику моделі з його спробами в провайдерів — не має такого id у проєкті ключа. | Перевірте id. Операція іншого проєкту відповідає так само. |
invalid_credentials | 401, 502 | — | Два випадки. Вхід у консоль, за якого пошта й пароль не збігаються з жодним обліковим записом. Виклик моделі, за якого провайдер відхилив ключ підключення, що обслуговувало виклик, — тоді Slen позначає облікові дані цього підключення як недійсні. | Увійдіть із правильним паролем. Для підключення вкажіть у ньому чинний ключ провайдера в консолі. |
csrf_token_mismatch | 419 | — | Запит сесії консолі прийшов без свого CSRF-токена або із застарілим. Запит з API-ключем цей код ніколи не отримує. | Перезавантажте сторінку консолі й повторіть дію. |
service_unavailable | 503 | ServiceUnavailableException PHPServiceUnavailableError Node.js | Slen не зміг достукатися до своєї бази даних і відповів, нічого не зробивши. Той самий код відповідає на зміну бюджету, яка надто довго чекала викликів, що виконуються на цьому бюджеті; нічого не змінено. | Надішліть запит знову пізніше. Відхилена зміна бюджету каже в Retry-After, коли. |
not_found | 404 | — | Реєстрація та вхід у консоль відповіли так, ніби такої адреси немає. Вони відкриті лише для браузера, у якому відкрили видане посилання доступу. | Відкрийте своє посилання доступу в цьому браузері, потім знову зареєструйтеся або ввійдіть. |
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 | В опублікованій версії флоу є вузол типу, який середовище виконання не вміє виконувати. | Замініть вузол у конструкторі флоу й опублікуйте нову версію. Потім надішліть запит із новим ключем — на повтор із тим самим ключем відповідає невдале виконання. |
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
Помилки, які SDK кидають самі
Деякі помилки приходять без відповіді API або до надсилання запиту.
| Тип | Коли |
|---|---|
ConnectionException, ConnectionError | До Slen не вдалося достукатися, або з’єднання обірвалося, перш ніж відповідь прочитано |
TimeoutException, TimeoutError | Відповідь не прийшла за тайм-аут SDK — timeout і connectTimeout у SlenConfig, timeoutMs у Node.js — або за тайм-аут виклику |
InvalidRequestException, InvalidRequestError | SDK відхиляє виклик до надсилання: порожній ключ ідемпотентності, порожній зовнішній ідентифікатор, сума кредитів, яка не є десятковим рядком, контекст, який називає іншого клієнта, тайм-аут чи кількість повторів виклику поза допустимим. Код — invalid_request |
InvalidResponseException, InvalidResponseError | API відповів 2xx із тілом, яке не можна прочитати; помилка зберігає статус. Для доставки вебхука, підпис якої зійшовся, а тіло — не подія, кидається той самий тип |
WebhookSignatureException, WebhookSignatureError | Підпис доставки вебхука не сходиться — Вебхуки |
Помилка з’єднання й тайм-аут не мають ні коду, ні статусу. Кожна інша помилка цієї таблиці має код: власний код SDK, яким API ніколи не відповідає, — крім invalid_request, яким користується й API.
Власні коди SDK і тип помилки, який для кожного кидає кожен SDK:
| Код | PHP | Node.js |
|---|---|---|
invalid_request | InvalidRequestException | InvalidRequestError |
invalid_response | InvalidResponseException | InvalidResponseError |
webhook_signature_invalid | WebhookSignatureException | WebhookSignatureError |
webhook_payload_invalid | InvalidResponseException | InvalidResponseError |
Після помилки з’єднання або тайм-ауту невідомо, чи зробив Slen роботу. Після нечитабельної відповіді теж невідомо: виклик міг пройти.
Налаштування, з яким SDK не можна зібрати, — порожній ключ, тайм-аут не більший за нуль — це InvalidArgumentException, кинутий там, де збирають SDK. Це помилка в коді, а не помилка SDK, і вона не розширює SlenException.
Що читати далі
Обробка помилок — перехоплюйте помилки за типом і дізнавайтеся за типом, чи коштував запуск грошей.
Коли витрату відхилено — родина відхиленої витрати та дві її форми.
Коди помилок — що означає кожен код і що з ним робити.
Зібрано з openapi b070e1f, sdk contract 6a2e0e0, php 4089db3, node 0fa87be