Устранение неполадок
Найдите, где остановился вызов, прочитайте код ответа и исправьте причину.
На этой странице
Каждый отказ несёт код и фразу о том, что делать дальше. Если нужен человек, в ответе есть ещё и ссылка на страницу, где это исправляется.
В результате инструмента MCP код лежит в поле code, рядом с instruction. На /p/ ошибка приходит в полях error.code и error.instruction, а опрос завершённого неудачного вызова несёт error_code. API консоли отвечает полями error.code и error.request_id.
Найдите вызов
- У каждого вызова есть
call_id, он начинается сsp_c_. Откройтеhttps://my.sallyport.cloud/activity?call=<call_id>, чтобы его увидеть. - В вызове видны «Агент», «Подключение», «Версия ключа», «Правило», «Журнал» и «Хронология» событий.
- Пишите в «Настройки», «Поддержка» и прикладывайте
call_id, а для ошибки API консоли ещё иrequest_id.
Посмотрите, что именно отправил агент и что пришло в ответ
Откройте Историю вызовов, выберите вызов и нажмите «Открыть весь запрос и ответ». Вызов виден таким, каким он был, без скрытых частей.
- Запрос: метод, полный адрес, все заголовки и тело. Для SSH это команда, для файлов путь и содержимое, для базы данных запрос и его значения, для почты всё письмо.
- Заголовок, который агент прислал на месте ключа, например свой
PRIVATE-TOKEN, остаётся в списке со своим значением, зачёркнутый, с пометкой «Заменён ключом подключения, не отправлен». Ключ, который подставил Sallyport, не показывается никогда. - Ответ: статус, все заголовки и тело. Длинный ответ загружается целиком до 1 МиБ, а «Скачать весь ответ» сохраняет его полностью.
- Запросы хранятся столько же, сколько история вызовов, по умолчанию 180 дней. Ответы и тела запросов больше 1 МиБ хранятся 30 дней, после этого вызов так и пишет.
У агента нет инструментов нужного сервиса
- Попросите агента вызвать
list_access. Он покажет все сервисы, доступные агенту, и что из них ждёт человека. - Новый ключ получают все активные агенты его рабочего пространства и среды. Агент в тестовой среде не видит ключ рабочей среды.
- Подключение, убранное из списка «Доступ» агента, остаётся убранным. Верните его кнопкой «Добавить подключение».
- Если инструментов больше 40, инструменты удалённых MCP-серверов уходят из списка. Агент находит их через
search_toolsи вызывает черезcall. - К хосту вне списка агент обращается через
http_request. Первый вызов вернёт ссылку, по которой вы добавите ключ.
Коды ответа
| Код | HTTP | Что произошло | Что делать |
|---|---|---|---|
AUTH_FAILED | 401 | Токен неверный или отозван, либо это не токен агента. | Создайте токен кнопкой «Новый токен» в блоке «Токены» на странице агента. |
SUSPENDED | 423 | Приостановлен агент, его рабочее пространство или вся организация. | Нажмите «Возобновить агента» на его странице или «Возобновить вызовы» в разделе «Настройки», «Опасная зона». |
SOURCE_IP_NOT_ALLOWED | 403 | Вызов пришёл с адреса вне списка агента. | Измените «Разрешённые IP-адреса (необязательно)» в блоке «Лимиты» на странице агента. |
ACCESS_REQUEST_CREATED | 404 | У агента нет ключа для этого хоста. | Откройте approve_url и добавьте ключ. Агент повторит вызов. |
SERVICE_NOT_CONNECTED | 424 | В OAuth-подключение ещё не вошли. Ничего не отправлено. | Откройте connect_url и войдите. Агент повторит вызов. |
APPROVAL_PENDING | 202 | Человек ещё не ответил. | Ответьте по approve_url. Агент продолжит вызов с call_id. |
APPROVAL_DENIED | 403 | Человек отказал. Ничего не выполнялось. | Агент действует по причине отказа и вызов не повторяет. |
APPROVAL_EXPIRED | 410 | Никто не ответил вовремя. Ничего не выполнялось. | Повторите вызов без call_id, чтобы спросить снова. |
APPROVAL_SUPERSEDED | 409 | Правило или ключ изменились после появления карточки. | Повторите вызов без call_id. |
CALL_CONFLICT | 409 | Это подтверждение уже использовал другой вызов. | Сделайте новый вызов. |
CALL_NOT_FOUND | 404 | Этот call_id принадлежит другому агенту или не существует. | Сделайте новый вызов. |
POLICY_DENY | 403 | Правило агента для этого класса: «Запрещено». | approve_url открывает страницу агента. Измените класс в его списке «Доступ». |
PATH_OUT_OF_PREFIX | 400 | Путь выходит за пределы подключения. | Укажите полный путь из документации сервиса. |
BAD_REQUEST | 400 | Вызов составлен неверно, reason говорит, что именно. | Текст ответа называет исправление. Причины, которые исправляет человек, перечислены ниже. |
IDEMPOTENCY_CONFLICT | 409 | Один idempotency_key пришёл с разными аргументами. | Возьмите новый ключ. |
IN_FLIGHT | 409 | Такой же вызов уже выполняется. | Подождите retry_after_ms и повторите, чтобы получить его результат. |
ALREADY_EXECUTED | 200 | Повтор получил результат первого вызова. Сервис повторно не вызывался. | Чтобы выполнить снова прямо сейчас, повторите с новым idempotency_key. |
RATE_LIMITED | 429 | Слишком много вызовов за короткое время. | Подождите retry_after_ms и повторите. |
PLAN_LIMIT | 200 | Месячные вызовы тарифа закончились. Вызовы продолжают работать, а результаты MCP несут эту пометку. | Откройте «Настройки», «Тариф и оплата». |
UPSTREAM_ERROR | Статус сервиса или 424 | Сервис ответил ошибкой или не ответил вовсе. | Прочитайте status и тело ответа. Случай без ответа разобран в следующей таблице. |
UPSTREAM_TOO_LARGE | 424 | Ответ превысил лимит размера. | Сузьте запрос или увеличьте «Самый большой ответ сервиса» в блоке «Лимиты» на странице подключения, до 512 МиБ. |
EGRESS_DENIED | 424 | Адрес частный (private_range), принадлежит самому Sallyport (self_host) недостижим из сети Sallyport (pin_mismatch) или ключ подключения не сохранён для этого адреса (key_elsewhere). Ничего не отправлено. | Для private_range и self_host укажите публичный адрес. Для pin_mismatch отправьте в поддержку call_id. Для key_elsewhere попросите владельца ключа добавить его заново для этого адреса. |
OUTCOME_UNKNOWN | 424 | Sallyport не знает, успел ли сервис выполнить действие. | Проверьте сервис перед любым повтором. |
UPGRADE_NOT_SUPPORTED | 426 | Апгрейд до протокола, отличного от WebSocket. | Отправьте запрос без Upgrade или откройте WebSocket. |
WEBSOCKET_REQUIRED | 426 | Опрос одобренной сессии WebSocket, а она идёт только по WebSocket. | Откройте WebSocket снова с X-Sallyport-Call-Id. |
UNAVAILABLE | 503 | Sallyport ненадолго недоступен. | Повторите через retry_after_ms. |
INTERNAL | 500 | Ошибка в Sallyport. Она уже записана. | Отправьте в поддержку call_id. |
Если сервис не ответил
UPSTREAM_ERROR с полем reason значит, что ответ не пришёл. side_effect равно none, если до сервиса ничего не дошло, и unknown, если могло дойти.
| Причина | side_effect | Что делать |
|---|---|---|
dns | none | Повторите через несколько секунд. Если ошибка не уходит, проверьте имя хоста. |
connect | none | Проверьте адрес и повторите. |
tls | none | Проверьте адрес. Повтор будет падать так же, пока не сменится сертификат. |
authentication | none | Только для вызовов SSH. Сервер отклонил ключ или пользователя. Проверьте оба в подключении. |
host_key | none | Только для вызовов SSH. Ключ сервера больше не совпадает с сохранённым. Сверьте его с владельцем сервера, дальше смотрите раздел Команды SSH. |
ttfb | unknown | Сервис не начал отвечать вовремя. Проверьте его перед любым повтором. |
timeout | unknown | Сервис не закончил вовремя. Проверьте его перед любым повтором. |
read | unknown | Соединение оборвалось, пока шёл ответ. Проверьте сервис перед любым повтором. |
Ошибки запроса, которые исправляет человек
Большинство причин BAD_REQUEST исправляет сам агент, текст ответа говорит ему как. Эти требуют человека:
not_httpsсconsole_url: адрес подключения начинается сhttp://. Смените его наhttps://на странице подключения.mcp_binding,database_bindingилиemail_binding: вызов через/p/направлен на MCP-сервер, базу данных или почтовый ящик. Вызывайте их инструменты через MCP-адрес.sftp_operation: файловый вызов не называет одну операцию однозначно; вdetailнаписано, что исправить.missing_host: подключение покрывает все хосты сервиса, поэтому вызов должен назвать один. На/p/укажите хост сразу после ID подключения.
Ошибки API консоли
FORBIDDENназывает нужную роль вdetails.required_role. Для экспорта журнала нужна роль владельца либо администратора или аудитора всей организации без более узкой роли в каком-либо рабочем пространстве.- Ключ API не может ответить на карточку: решение принимает человек.
VALIDATION_FAILEDперечисляет неверные поля вdetails.fields.AUTH_FAILEDзначит, что сессия закончилась или ключ API отозван.
Замените ключ сервиса без перерыва
- Создайте у провайдера новый ключ, пока текущий ещё работает.
- Откройте ключ в разделе Ключи сервисов, нажмите «Заменить ключ сервиса», вставьте новое значение и нажмите «Сохранить новый ключ».
- Сделайте один вызов через Sallyport. Когда он пройдёт, отзовите старый ключ у провайдера.