Глава 6: Протокол Вызова

6.1 Обзор

Invocation Protocol определяет, как потребители навыков удалённо вызывают обнаруженные навыки. Протокол использует асинхронную модель вызова с поддержкой запросов статуса и получения результатов.

6.2 Трёхшаговая Модель Вызова

ШагHTTP-методEndpointОписание
1. Инициировать вызовPOST{invocation_endpoint}Отправить запрос, получить ID выполнения
2. Запросить статусGET{status_url}/{execution_id}Запросить статус выполнения
3. Получить результатGET{result_url}/{execution_id}Получить результат выполнения

6.3 Формат Запроса

{
  "caller": { "id": "ifay-instance-001", "type": "ifay", "credentials": { "api_key": "sk-xxxxx" } },
  "skill_id": "com.example.translate-v1",
  "inputs": { "text": "Hello, world!", "target_language": "zh-CN" },
  "context": { "trace_id": "trace-abc-123", "priority": "normal", "timeout_ms": 30000 }
}

Поля Запроса

ПолеТипОбязательноОписание
callerobjectДаИнформация о вызывающей стороне
caller.idstringДаУникальный идентификатор вызывающей стороны
caller.typestringДаТип вызывающей стороны (ifay/service/user)
skill_idstringДаID целевого навыка
inputsobjectДаВходные параметры
contextobjectНетКонтекст вызова

6.4 Формат Ответа

{
  "execution_id": "exec-789-xyz",
  "status": "completed",
  "skill_id": "com.example.translate-v1",
  "output": { "translated_text": "你好,世界!", "confidence": 0.98 },
  "timestamps": { "created_at": "2025-03-20T14:30:00Z", "completed_at": "2025-03-20T14:30:02Z" }
}

Перечисление Статусов Выполнения

СтатусОписание
acceptedЗапрос получен, ожидает выполнения
runningВыполняется
completedВыполнение успешно завершено
failedВыполнение не удалось
timeoutПревышено время выполнения

6.5 Поток Аутентификации

Перед вызовом потребитель проверяет поле auth в Skill Descriptor и выполняет соответствующий поток аутентификации (API Key, OAuth 2.0 или без аутентификации).

6.6 Таймаут и Повтор

{
  "execution_id": "exec-789-xyz",
  "status": "timeout",
  "error": {
    "code": "EXECUTION_TIMEOUT",
    "message": "Skill execution exceeded the configured timeout of 30000ms",
    "retry": { "suggested_delay_ms": 5000, "max_attempts": 3 }
  }
}

Стратегия повтора: экспоненциальный backoff (начальная задержка × 2^n).