简体中文 English 繁體中文 日本語 Русский
本文为静态镜像,内容以交互版为准 在交互式文档中心打开 →

Стандартизированный протокол возврата адаптера ErisPulse

1. Описание

Почему существует этот стандарт?

Для обеспечения единообразия и совместимости с OneBot12 возвращаемых интерфейсов отправки на разных платформах, адаптер ErisPulse использует стандартную структуру возвращаемых данных OneBot12 для формата ответа API.

Однако протокол ErisPulse имеет некоторые специфические определения:

2. Базовая структура ответа

Все ответы на действия должны содержать следующие базовые поля:

Имя поля Тип данных Обязательно Описание
status string Да Статус выполнения, должен быть "ok" или "failed"
retcode int64 Да Код возврата, следует правилам кодов возврата OneBot12
data any Да Данные ответа, содержит результат запроса при успешном выполнении, и null при ошибке
message_id string Да Идентификатор сообщения, используется для идентификации сообщения, если нет, пустая строка
message string Да Сообщение об ошибке, пустая строка при успешном выполнении
{platform_name}_raw any Нет Исходные данные ответа

Необязательные поля:

Имя поля Тип данных Обязательно Описание
echo string Нет Возвращается в том же виде, если в запросе присутствовал поле echo

3. Полный список полей

3.1 Общие поля

Пример успешного ответа

{
    "status": "ok",
    "retcode": 0,
    "data": {
        "message_id": "1234",
        "time": 1632847927.599013
    },
    "message_id": "1234",
    "message": "",
    "echo": "1234",
    "telegram_raw": {...}
}

Пример неудачного ответа

{
    "status": "failed",
    "retcode": 10003,
    "data": null,
    "message_id": "",
    "message": "Отсутствует обязательный параметр: user_id",
    "echo": "1234",
    "telegram_raw": {...}
}

3.2 Спецификация кодов возврата

0 Успешно (OK)

1xxxx Ошибки запроса (Request Error)

Код ошибки Название ошибки Описание
10001 Bad Request Недопустимый запрос действия
10002 Unsupported Action Неподдерживаемый запрос действия
10003 Bad Param Недопустимый параметр запроса действия
10004 Unsupported Param Неподдерживаемый параметр запроса действия
10005 Unsupported Segment Неподдерживаемый тип сегмента сообщения
10006 Bad Segment Data Недопустимый параметр сегмента сообщения
10007 Unsupported Segment Data Неподдерживаемый параметр сегмента сообщения
10101 Who Am I Не указан аккаунт бота
10102 Unknown Self Неизвестный аккаунт бота

2xxxx Ошибки обработчика действия (Handler Error)

Код ошибки Название ошибки Описание
20001 Bad Handler Ошибка реализации обработчика действия
20002 Internal Handler Error Исключение, выброшенное во время выполнения обработчика действия

3xxxx Ошибки выполнения действия (Execution Error)

Диапазон кодов ошибки Тип ошибки Описание
31xxx Database Error Ошибка базы данных
32xxx Filesystem Error Ошибка файловой системы
33xxx Network Error Ошибка сети
34xxx Platform Error Ошибка платформы бота
35xxx Logic Error Ошибка логики действия
36xxx I Am Tired Реализация решила бастовать

Зарезервированные диапазоны ошибок

4. Требования к реализации

  1. Все ответы должны содержать поля status, retcode, data и message
  2. Если в запросе присутствует непустое поле echo, ответ должен содержать поле echo с тем же значением
  3. Коды возврата должны строго соответствовать спецификации OneBot12
  4. Сообщения об ошибках (message) должны быть понятны человеку

5. Расширения спецификации

ErisPulse вносит следующие расширения в стандартный структурный ответ OneBot12:

5.1 Обязательное поле message_id

В стандарте OneBot12 поле message_id находится внутри объекта data и не является обязательным. ErisPulse выделяет его на уровень верхнего уровня как обязательное поле:

5.2 Поле {platform}_raw с исходными ответами

В ответе должно содержаться поле {platform}_raw, в котором хранится полная копия исходных данных ответа платформы:

{
    "status": "ok",
    "retcode": 0,
    "data": {"message_id": "1234", "time": 1632847927},
    "message_id": "1234",
    "message": "",
    "telegram_raw": {
        "ok": true,
        "result": {"message_id": 1234, "date": 1632847927, ...}
    }
}

Требования:

5.3 Расширенные коды возврата фреймворка (34xxx, пользовательские младшие три цифры в сегменте платформы)

OneBot12 позволяет реализациям использовать пользовательские младшие три цифры в диапазоне 3xxxx. Сегмент 34xxx означает Platform Error (ошибка платформы бота, например, ограничения платформы, вызвавшие сбой). Внутри 34xxx используются низшие три цифры по уровню ответственности:

Сегмент младших трех цифр Ответственность Назначение
340xx Реализация адаптера Семейство запросов (Запрос не найден / Уже обработан / Не поддерживается / Отказано в доступе, см. request-action-spec §7)
341xx–345xx Реализация адаптера Ошибки платформы, связанные с правами, риск-контролем, ограничениями аккаунта и т.д. (реализуйте пользовательские младшие три цифры, исходные ошибки поместите в {platform}_raw)
346xx Фреймворк ErisPulse (зарезервирован) Ошибки, возникающие внутри фреймворка, адаптеры/модули не должны использовать эти коды
347xx–349xx Реализация адаптера Другие ошибки выполнения платформы

Фреймворк ErisPulse в настоящее время использует коды 346xx:

Код ошибки Название ошибки Описание
34600 SDK Failure Общая ошибка фреймворка (значение по умолчанию, возвращаемое make_error())
34601 Action Denied Выходное действие заблокировано с помощью scope.actions, вызов не инициирован, возвращается этот ответ

Разграничение ответственности: 34601 — это блокировка фреймворком до вызова (модуль не имеет права на действие); 34004 / 34xxx — это ошибки платформы после отправки действия (например, у бота нет прав, он заблокирован). При проверке проблем с правами модуль должен проверять оба типа: сначала 34601 (действие заблокировано scope), затем 34xxx (платформа ограничивает).

Структура ответа соответствует стандартному неудачному ответу §2:

{
    "status": "failed",
    "retcode": 34601,
    "data": null,
    "message_id": "",
    "message": "action 'send' denied by scope.actions"
}

5.5 Проверочный список реализации адаптера

6. Примечания