Перейти к документации
ДокументацияУстранение ошибок

Устранение неполадок

Найдите, где остановился вызов, прочитайте код ответа и исправьте причину.

На этой странице

Каждый отказ несёт код и фразу о том, что делать дальше. Если нужен человек, в ответе есть ещё и ссылка на страницу, где это исправляется.

В результате инструмента 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_FAILED401Токен неверный или отозван, либо это не токен агента.Создайте токен кнопкой «Новый токен» в блоке «Токены» на странице агента.
SUSPENDED423Приостановлен агент, его рабочее пространство или вся организация.Нажмите «Возобновить агента» на его странице или «Возобновить вызовы» в разделе «Настройки», «Опасная зона».
SOURCE_IP_NOT_ALLOWED403Вызов пришёл с адреса вне списка агента.Измените «Разрешённые IP-адреса (необязательно)» в блоке «Лимиты» на странице агента.
ACCESS_REQUEST_CREATED404У агента нет ключа для этого хоста.Откройте approve_url и добавьте ключ. Агент повторит вызов.
SERVICE_NOT_CONNECTED424В OAuth-подключение ещё не вошли. Ничего не отправлено.Откройте connect_url и войдите. Агент повторит вызов.
APPROVAL_PENDING202Человек ещё не ответил.Ответьте по approve_url. Агент продолжит вызов с call_id.
APPROVAL_DENIED403Человек отказал. Ничего не выполнялось.Агент действует по причине отказа и вызов не повторяет.
APPROVAL_EXPIRED410Никто не ответил вовремя. Ничего не выполнялось.Повторите вызов без call_id, чтобы спросить снова.
APPROVAL_SUPERSEDED409Правило или ключ изменились после появления карточки.Повторите вызов без call_id.
CALL_CONFLICT409Это подтверждение уже использовал другой вызов.Сделайте новый вызов.
CALL_NOT_FOUND404Этот call_id принадлежит другому агенту или не существует.Сделайте новый вызов.
POLICY_DENY403Правило агента для этого класса: «Запрещено».approve_url открывает страницу агента. Измените класс в его списке «Доступ».
PATH_OUT_OF_PREFIX400Путь выходит за пределы подключения.Укажите полный путь из документации сервиса.
BAD_REQUEST400Вызов составлен неверно, reason говорит, что именно.Текст ответа называет исправление. Причины, которые исправляет человек, перечислены ниже.
IDEMPOTENCY_CONFLICT409Один idempotency_key пришёл с разными аргументами.Возьмите новый ключ.
IN_FLIGHT409Такой же вызов уже выполняется.Подождите retry_after_ms и повторите, чтобы получить его результат.
ALREADY_EXECUTED200Повтор получил результат первого вызова. Сервис повторно не вызывался.Чтобы выполнить снова прямо сейчас, повторите с новым idempotency_key.
RATE_LIMITED429Слишком много вызовов за короткое время.Подождите retry_after_ms и повторите.
PLAN_LIMIT200Месячные вызовы тарифа закончились. Вызовы продолжают работать, а результаты MCP несут эту пометку.Откройте «Настройки», «Тариф и оплата».
UPSTREAM_ERRORСтатус сервиса или 424Сервис ответил ошибкой или не ответил вовсе.Прочитайте status и тело ответа. Случай без ответа разобран в следующей таблице.
UPSTREAM_TOO_LARGE424Ответ превысил лимит размера.Сузьте запрос или увеличьте «Самый большой ответ сервиса» в блоке «Лимиты» на странице подключения, до 512 МиБ.
EGRESS_DENIED424Адрес частный (private_range), принадлежит самому Sallyport (self_host) недостижим из сети Sallyport (pin_mismatch) или ключ подключения не сохранён для этого адреса (key_elsewhere). Ничего не отправлено.Для private_range и self_host укажите публичный адрес. Для pin_mismatch отправьте в поддержку call_id. Для key_elsewhere попросите владельца ключа добавить его заново для этого адреса.
OUTCOME_UNKNOWN424Sallyport не знает, успел ли сервис выполнить действие.Проверьте сервис перед любым повтором.
UPGRADE_NOT_SUPPORTED426Апгрейд до протокола, отличного от WebSocket.Отправьте запрос без Upgrade или откройте WebSocket.
WEBSOCKET_REQUIRED426Опрос одобренной сессии WebSocket, а она идёт только по WebSocket.Откройте WebSocket снова с X-Sallyport-Call-Id.
UNAVAILABLE503Sallyport ненадолго недоступен.Повторите через retry_after_ms.
INTERNAL500Ошибка в Sallyport. Она уже записана.Отправьте в поддержку call_id.

Если сервис не ответил

UPSTREAM_ERROR с полем reason значит, что ответ не пришёл. side_effect равно none, если до сервиса ничего не дошло, и unknown, если могло дойти.

Причинаside_effectЧто делать
dnsnoneПовторите через несколько секунд. Если ошибка не уходит, проверьте имя хоста.
connectnoneПроверьте адрес и повторите.
tlsnoneПроверьте адрес. Повтор будет падать так же, пока не сменится сертификат.
authenticationnoneТолько для вызовов SSH. Сервер отклонил ключ или пользователя. Проверьте оба в подключении.
host_keynoneТолько для вызовов SSH. Ключ сервера больше не совпадает с сохранённым. Сверьте его с владельцем сервера, дальше смотрите раздел Команды SSH.
ttfbunknownСервис не начал отвечать вовремя. Проверьте его перед любым повтором.
timeoutunknownСервис не закончил вовремя. Проверьте его перед любым повтором.
readunknownСоединение оборвалось, пока шёл ответ. Проверьте сервис перед любым повтором.

Ошибки запроса, которые исправляет человек

Большинство причин 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. Когда он пройдёт, отзовите старый ключ у провайдера.