Документация Продуктовые операции Cloud

Лояльность, поддержка и продуктовые операции Cloud

Mockarty Cloud разделяет клиентские и операторские действия по разным контурам авторизации. Клиентские методы всегда используют вошедший аккаунт и явно указанное Пространство. Операторским методам нужен токен с узким scope: operator:support:read, operator:support:write или operator:analytics:read. Не используйте wildcard-токены для автоматизации.

Клиентская лояльность

Получите историю списаний текущего аккаунта или примените одну опубликованную акцию:

page, err := client.CloudCustomer().ListLoyaltyRedemptions(ctx, spaceID, "", 25)
redemption, err := client.CloudCustomer().RedeemLoyalty(ctx, spaceID, "WELCOME", "RU", "redeem-welcome-01")
page = client.cloud_customer.list_loyalty_redemptions(space_id, limit=25)
redemption = client.cloud_customer.redeem_loyalty(space_id, "WELCOME", "RU", "redeem-welcome-01")
Map<String, Object> page = client.cloudCustomer().listLoyaltyRedemptions(spaceId, "", 25);
Map<String, Object> redemption = client.cloudCustomer().redeemLoyalty(spaceId, "WELCOME", "RU", "redeem-welcome-01");
mockarty-cli cloud-customer loyalty-list --space "$SPACE_ID" --limit 25
mockarty-cli cloud-customer loyalty-redeem --space "$SPACE_ID" --code WELCOME --region RU --idempotency-key redeem-welcome-01

Сохраняйте idempotency key неизменным только для точного повтора той же операции.

Клиентская поддержка

Откройте и продолжите приватное обращение в явно указанном Пространстве:

opened, err := client.CloudCustomer().OpenSupportCase(ctx, spaceID, mockarty.CloudSupportOpenRequest{
    Subject: "Runner недоступен", Category: "runtime", Priority: "normal",
    Message: "Проблема повторяется после переподключения.", IdempotencyKey: "support-open-01",
})
opened = client.cloud_customer.open_support_case(
    space_id, "Runner недоступен", "runtime", "normal",
    "Проблема повторяется после переподключения.", "support-open-01",
)
Map<String, Object> opened = client.cloudCustomer().openSupportCase(
    spaceId, "Runner недоступен", "runtime", "normal",
    "Проблема повторяется после переподключения.", "support-open-01");
mockarty-cli cloud-customer support-open --space "$SPACE_ID" --subject 'Runner недоступен' --category runtime --priority normal --message 'Проблема повторяется после переподключения.' --idempotency-key support-open-01
mockarty-cli cloud-customer support-reply "$CASE_ID" --space "$SPACE_ID" --message 'Дополнительные диагностические данные.' --idempotency-key support-reply-01

Ответы клиента всегда видны клиенту. Клиент не может создавать внутренние заметки или читать чужое обращение.

Обжалование риск-решения

Вошедший клиент может прочитать или отправить обжалование по риск-кейсу своего аккаунта. Сохраняйте idempotency key только при точном повторе той же причины:

appeal, err := client.CloudCustomer().GetRiskAppeal(ctx, caseID)
submitted, err := client.CloudCustomer().SubmitRiskAppeal(ctx, caseID,
    "Решение требует повторной проверки", "appeal-review-01")
appeal = client.cloud_customer.get_risk_appeal(case_id)
submitted = client.cloud_customer.submit_risk_appeal(
    case_id, "Решение требует повторной проверки", "appeal-review-01"
)
Map<String, Object> appeal = client.cloudCustomer().getRiskAppeal(caseId);
Map<String, Object> submitted = client.cloudCustomer().submitRiskAppeal(
    caseId, "Решение требует повторной проверки", "appeal-review-01");
mockarty-cli cloud-customer appeal-get "$CASE_ID"
mockarty-cli cloud-customer appeal-submit "$CASE_ID" --reason 'Решение требует повторной проверки' --idempotency-key appeal-review-01

Обжалование запрашивает ручную проверку и само по себе не отменяет текущее риск-решение.

Операторская поддержка и аналитика

Используйте токен только с нужным scope:

cases, err := client.CloudOperations().ListSupportCases(ctx, "open", "", 50)
overview, err := client.CloudOperations().ProductAnalytics(ctx, 30)
cases = client.cloud_operations.list_support_cases(status="open", limit=50)
overview = client.cloud_operations.product_analytics(days=30)
Map<String, Object> cases = client.cloudOperations().listSupportCases("open", "", 50);
Map<String, Object> overview = client.cloudOperations().productAnalytics(30);
mockarty-cli cloud-operations support-list --status open --limit 50
mockarty-cli cloud-operations support-assign "$CASE_ID" --assignee "$USER_ID" --generation 7
mockarty-cli cloud-operations support-transition "$CASE_ID" --status resolved --generation 8
mockarty-cli cloud-operations analytics --days 30

Назначение и смена состояния требуют текущего поколения обращения. При конфликте прочитайте обращение заново и не повторяйте устаревшую команду. Продуктовая аналитика содержит агрегаты с учётом согласий, а не исходные события клиентов.

Обзор группирует дневные счётчики по имени события:

Событие Что считает Измерения
account.created новые аккаунты —
checkout.completed оплаченные, неудавшиеся и брошенные оплаты plan_code, currency, result
subscription.canceled планы, отменённые владельцем plan_code, immediate
subscription.reactivated отменённые планы, возобновлённые до конца периода plan_code
refund.completed возвраты, дошедшие до клиента (полные и частичные) plan_code, full
credit.issued компенсации, выданные финансовыми операторами, по причинам reason_code
subscription.expired завершившиеся планы: истёк пробный период, льготный период закончился без оплаты, отмена вступила в силу plan_code, from_status
runtime.completed операции рантайма и корзина их длительности —
desktop.connected подключившиеся десктопные установки —
support.case_opened открытые обращения в поддержку —

Встроенный MCP-сервер намеренно не зеркалирует эти Cloud-маршруты: он не может доказать principal Cloud-кабинета или оператора. Поддерживаемые поверхности автоматизации — Swagger, три SDK, CLI и интеграционные тесты.

С операторскими решениями, которые двигают деньги, иначе: закрытие зависшего платежа, повтор продления, выдача и отзыв промо-баланса. Они намеренно не добавлены в клиентские CLI, SDK и MCP: каждое такое решение оператор принимает один раз по конкретному случаю, а не повторяет скриптом.

Чтобы выдать промокод на месяц Team, откройте кабинет Cloud → Оператор → Лояльность. Выберите «Пакет Team: 5 мест на 1 месяц», затем опубликованную месячную цену Team на пять мест. Форма показывает базовую цену и регион; итоговую цену с налогом Cloud закрепляет при создании акции и показывает в результате. Укажите даты акции, лимит активаций и срок использования полученного пакета в днях. Этот срок не должен превышать окно акции; при активации ближе к её концу на покупку останется меньше времени, потому что пакет не может действовать дольше акции. Создайте черновик и активируйте его. Произвольную сумму пакета оператор ввести не может. Передайте код клиенту безопасным способом: он активирует его в личном Пространстве и выберет полученный пакет Team в разделе Оплата. Путь клиента описан в руководстве по промокодам.