3. Описание MCP-сервера › 3.6 Витрина › shop_run

Запускает модуль агента на витрине магазина через точку входа agent.php и возвращает ответ модуля.

Право

Не требуется; создать и изменить модуль — «Прямой доступ → Разработка → Изменение данных» (AGENT_ENGINE_DEV_WRITE).

Параметры

Параметр Тип Что это
mod строка имя модуля без .php, начинается с agent_: agent_price_audit
[params] объект значения для модуля по именам

Значения уходят так же, как поля формы. Строка, число или да/нет приходит модулю строкой: 5, true; null — пустой строкой. Список таких значений приходит массивом, пустой список не уходит вовсе. Объект и список в списке — отказ. Все значения приходят одним сериализованным аргументом: в манифесте объявлено post: serial, значения лежат в $mVars['post'].

Модуль

Модуль создают engine_php_add и пишут engine_php_save с ajax_load: 1 — это флаг точки входа. Например, модуль units/agent_hello.php с param_info post: serial:

<?php
function AGENT_HELLO($mVars)
{
    $name = $mVars['post']['name'] ?? 'world';
    $text = 'Hello, '.$name;

    return $text;
}
?>

Вызов {"mod": "agent_hello", "params": {"name": "Melbis"}} ответит Hello, Melbis. Как устроены модуль, его манифест и параметры — «Модульный скрипт».

Ответ

{"mod": "agent_hello", "status": 200, "bytes": 13, "time": 47,
 "file": "D:\\Melbis\\shop.example.com\\mcp\\melbis\\runs\\agent_hello.txt", "cut": false}

Затем текстом — ответ модуля, до 8000 байт.

Поле Что это
mod модуль
status код ответа HTTP — при успехе 200
bytes размер ответа модуля
time сколько шёл запрос, мс
file где сохранён весь ответ; каждый запуск модуля файл перезаписывает
cut ответ длиннее 8000 байт: в тексте его начало, целиком — в file

Отказы

Если витрина ответила не кодом 200, модуль не выполнился или упал. Отказ показывает mod, status и начало ответа витрины, называет файл, где лежит весь ответ, и журнал витрины core/log/melbis/front.log — туда движок пишет сообщение, файл и строку падения. Журнал читает engine_static_load.

Начало ответа витрины Когда Что делать
NO_MODULE: there is no units/<модуль>.php модуля нет сверить имя по карте, создать модуль engine_php_add
NO_ENTRY_POINT: set entry_point = 1 for unit <модуль> модуль не точка входа сохранить его с ajax_load: 1
ACCESS_DENIED ключ сессии не подошёл: сервер магазина перезапускался или ключ старше суток открыть сессию заново
другой ответ с кодом 404 в корне сайта нет agent.php обновить магазин

Отказы до запроса к витрине:

Ответ Когда
mod is required… не указан модуль
The entry point runs the modules of the agent only… имя модуля не начинается с agent_
The field [<имя>] of params takes a value or a list of values… в params объект или список в списке
This store gave out no key for the entry point… session_connect не получил ключа: ключ хранится в APCu, а на сервере с APCu что-то не так

Общие отказы — «Ответы и отказы».