# Обработка ошибок API

При разработке чат-бота на платформе Metabot, а также при интеграции с чат-ботом из внешних систем, советуем придерживаться описанных ниже рекомендаций.

Использование конструкций try..catch не поддерживается платформой на данный момент. Вы, конечно, можете так оборачивать код, но это ни к чему не приведет. Платформа сама, на системном уровне, обеспечивает безопасное выполнение кода и обработку исключительных ситуаций. Мы позаботились об этом: "под капотом" все безопасно, обернуто try..catch. Не нужно беспокоится, что код упадет по непонятным вам причинам.

Ошибки в чат-боте будут только там, где они должны возникать (например, ошибка в коде, синтаксисе, в обработке данных). Для всех случаев платформа Metabot вернет вызывающей стороне 500 ошибку.

При разработке прикладной бизнес-логики вы можете сами возвращать нужную ошибку, когда вам будет необходимо. Например, когда нужно сообщить о проблемах с валидацией или не валидности запроса. В этом случае платформа вернет 200 ответ, а в теле JSON ответа нам нужно добавить информацию об ошибке. Если не уверены, как лучше сформировать тело ответа, можете воспользоваться нашим рекомендованным стандартом, которые приведен ниже.

##### Все возможные коды ответа сервера

<table id="bkmrk-%D0%9A%D0%BE%D0%B4-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D0%B0-http-%D0%9F%D1%80%D0%B8%D1%87" style="border-collapse: collapse; width: 100%; height: 322.87px; border-style: solid;"><thead><tr style="background-color: #c2e0f4; height: 79.9537px;"><td style="width: 10.6302%; height: 79.9537px; border-style: solid;">Код ответа HTTP

</td><td style="width: 71.3309%; height: 79.9537px; border-style: solid;">Причина

</td><td style="width: 18.037%; height: 79.9537px; border-style: solid;">Возможны ли доп. поле в тела ответа

</td></tr></thead><tbody><tr style="height: 35.1389px;"><td style="width: 10.6302%; height: 35.1389px; border-style: solid;">200

</td><td style="width: 71.3309%; height: 35.1389px; border-style: solid;">Все хорошо. В теле запроса возможны дополнительные ответы.

</td><td style="width: 18.037%; height: 35.1389px; border-style: solid;">Да

</td></tr><tr style="height: 35.1389px;"><td style="width: 10.6302%; height: 35.1389px; border-style: solid;">401

</td><td style="width: 71.3309%; height: 35.1389px; border-style: solid;">Отсутствуют данные для авторизации или не верный токен авторизации.

</td><td style="width: 18.037%; height: 35.1389px; border-style: solid;">Нет

</td></tr><tr style="height: 57.5463px;"><td style="width: 10.6302%; height: 57.5463px; border-style: solid;">403

</td><td style="width: 71.3309%; height: 57.5463px; border-style: solid;">Нет прав для выполнения запроса. Например, у пользователя API, для которого выдан токен, нет прав доступа к чат-боту.

</td><td style="width: 18.037%; height: 57.5463px; border-style: solid;">Нет

</td></tr><tr style="height: 79.9537px;"><td style="width: 10.6302%; height: 79.9537px; border-style: solid;">404

</td><td style="width: 71.3309%; height: 79.9537px; border-style: solid;">Неправильный URL запроса. Возникает, когда точки интеграции нет или URL совсем не верный. Если URL верный, то значит кастомный внутренний эндпоинт не найден по алиасу.

</td><td style="width: 18.037%; height: 79.9537px; border-style: solid;">Нет

</td></tr><tr style="height: 35.1389px;"><td style="width: 10.6302%; height: 35.1389px; border-style: solid;">500

</td><td style="width: 71.3309%; height: 35.1389px; border-style: solid;">Внутренняя ошибка. Например, ошибка в JavaScript коде чат-бота.

</td><td style="width: 18.037%; height: 35.1389px; border-style: solid;">Нет

</td></tr></tbody></table>

##### Тело ответа для 200 ответа

В случае успеха, чат-бот возвращает код ответа **200 OK**, а в теле запроса, содержится информация об успешном выполнении, например:

```JSON
{ 
  "success": true
}
```

<div class="code-block  css-iwznuw" id="bkmrk-%D0%95%D1%81%D0%BB%D0%B8-%D0%B5%D1%81%D1%82%D1%8C-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%2C-%D1%82%D0%BE"><div><div role="presentation"><div>Если есть ошибка, то также возвращается **200 ОК** и дополнительно возвращается текст ошибки в поле **message**, например:</div></div></div></div><div id="bkmrk--0">  
</div>```JSON
{ 
  "success": false,
  "message": "Сообщение об ошибке"
}
```

<div id="bkmrk--1"></div>В случае, если необходимо возвращать код ошибки, будет добавлен код ошибки, например:

```JavaScript
{ 
  "success": false,
  "errorCode": 422,
  "message": "Ошибка валидации"
}
```