Promoções por IA
Converte um pedido em linguagem natural em um rascunho de promoção e, se pedido, o salva desativado.
O administrador escreve "frete grátis para compras acima de R$ 300" e recebe a promoção estruturada: tipo de benefício, valor, escopo de produtos, validade. A VI usa os nomes reais de produtos e categorias da loja; se o pedido citar um produto ambíguo, a resposta traz uma lista de opções (pending_choice) em vez de adivinhar. A promoção nunca nasce ativa: ela é criada desativada e só passa a valer quando o administrador a ativa na tela de promoções.
Gera o rascunho. A chamada pode levar vários segundos, então use um timeout folgado.
/api/v1/admin/intelligence/promotions/generateAdminGerar um rascunho de promoção
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador (veja Tokens).Content-Typestringobrigatórioapplication/json.Corpo da requisição
briefstringobrigatórioO pedido, em linguagem natural.
auto_savebooleanpadrão: falsetrue grava a promoção (desativada) além de devolver o rascunho. Ignorado quando há pending_choice.scopeobjectEscolhas já feitas, para uma segunda chamada depois de
pending_choice. Todas as chaves são opcionais:scope.product_idsarrayIds de produto (strings UUID) a que a promoção se aplica.
scope.exclude_product_idsarrayIds de produto (strings UUID) deixados de fora.
scope.category_idsarrayIds de categoria (strings UUID) a que a promoção se aplica.
scope.product_or_groupsarrayLista de listas de ids de produto (strings UUID), uma lista para cada produto citado no pedido.
scope.resolved_queriesarrayNomes de produto do pedido que você já resolveu, para não serem perguntados de novo.
Exemplo de requisição
Resposta
200Rascunho
200Produto ambíguo
Campos da resposta
draft.namestringNome da promoção (gerado se omitido).
draft.descriptionstringJustificativa em texto livre. Pode faltar.
draft.discount_typestringpercentagefixedfree_shippingbuy_x_get_yfree_productsfree_productorder_discountproduct_discountcategory_discountto_percentageto_fixedgive_usergroupassign_usergroupgive_coupongive_cashbackTipo do benefício principal.
draft.discount_valueintegerValor do benefício principal: centavos em
fixed; pontos-base em percentage (1000 = 10%); 1 a 100 em buy_x_get_y; 0 em free_shipping.draft.max_discountintegerTeto do desconto percentual, em centavos. Opcional.
draft.benefitsarrayTodos os benefícios (uma promoção pode dar vários). Cada um:
type, value, mais campos do tipo (buy_quantity, get_quantity, product_ids, category_ids...).draft.applies_toobjectAlcance:
product_ids, category_ids, exclude_product_ids, user_group_ids, vendor_ids e min_cart_total (centavos).draft.codestringCódigo de cupom. Sem ele, a promoção é aplicada automaticamente.
draft.valid_fromstringRFC 3339. Opcional.
draft.valid_untilstringRFC 3339. Opcional.
draft.usage_limitintegerLimite global de usos. Omitido = ilimitado.
draft.per_user_limitintegerLimite por cliente. Omitido = ilimitado.
draft.statusstringSempre
draft na resposta, mesmo com auto_save.draft.promotion_iduuidSó com
auto_save bem-sucedido: id da promoção criada. Pode haver promotion_ids quando o rascunho virou várias promoções.pending_choiceobjectPresente quando um produto citado é ambíguo:
query e options (id, label, hint). Escolha uma e chame de novo com scope.product_ids.Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} ou {"error":"invalid or expired token"} |
| 403 | O administrador não tem nenhum dos privilégios exigidos. | {"error":"insufficient privileges","privilege_required_any":["manage_promotions","intelligence_use_chat"]} |
| 400 | brief vazio ou corpo ilegível. | {"error":"brief is required"} |
| 403 | Criação de promoção por IA desligada. | {"error":"AI promotion creation is disabled for this tenant"} |
| 422 | A IA não conseguiu montar uma promoção válida com esse pedido. | {"error":"ai_response_invalid","detail":"...","hint":"the AI couldn't produce a valid promotion from that brief ..."} |
| 503 | Nenhum provedor de IA configurado. | {"error":"AI provider is not configured"} |