Scripts da loja
Scripts JavaScript que personalizam o comportamento da loja em pontos definidos, com teste a seco, versões e reversão.
Scripts permitem personalizar o comportamento da loja sem pedir uma alteração na plataforma. Você escreve uma função curta em JavaScript, escolhe em que momento ela deve rodar (o ponto de extensão) e ativa. Exemplos: esconder o frete expresso em carrinhos pequenos, bloquear o checkout sob uma regra própria, filtrar formas de pagamento, reagir a um pedido pago.
Como funciona
O ciclo de vida típico:
- Escrever e testarUse Testar a seco com dados de exemplo até o resultado ficar certo.
- CriarCrie o script inativo, com o ponto de extensão correto.
- AtivarLigue quando estiver pronto.
- EvoluirAltere o código; se algo der errado, reverta.
Pontos de extensão disponíveis:
| Ponto | Quando roda |
|---|---|
on_checkout_validate | Valida o carrinho antes do checkout. |
on_price_calculate | Cálculo de preço personalizado (declarado, mas ainda sem execução na plataforma). |
on_shipping_filter | Filtra ou altera as opções de frete. |
on_payment_filter | Filtra as formas de pagamento. |
on_order_status_change | Reage a mudanças de status de pedido. |
on_vendor_commission | Calcula a comissão de um seller. |
on_product_display | Altera os dados de um produto na exibição. |
on_custom_validation | Validação personalizada de qualquer entidade. |
on_search_boost | Impulsiona resultados da busca. |
on_event_trigger | Reage a eventos da plataforma (order.created, product.updated...). |
Conceitos principais
Como o script recebe e devolve dados
O script recebe os dados do momento na variável global input e devolve o resultado na variável global result (ou, se não houver, no valor da última expressão). O formato de input e do resultado esperado depende do ponto de extensão. Exemplo para on_shipping_filter: var result = input.rates.filter(function (r) { return r.type !== "express" || input.cart.total >= 5000; });
Sandbox
O código roda isolado: sem rede, sem arquivos, sem require, fetch, setTimeout ou eval. Passou de 100 ms ou 10 MB, a execução é interrompida.
Eventos
Um script on_event_trigger informa em event_types quais eventos o disparam: order.created, order.statusChanged, order.paid, order.cancelled, product.created, product.updated, product.deleted, customer.registered, customer.updated, cart.abandoned, review.created, vendor.registered, vendor.approved.
Endpoints
| Método | Caminho | Para que serve | Página |
|---|---|---|---|
| GET | /api/v1/admin/scripts | Lista os scripts, do mais novo ao mais antigo | Gerenciar scripts |
| GET | /api/v1/admin/scripts/{id} | Consulta um script | Gerenciar scripts |
| POST | /api/v1/admin/scripts | Cria um script | Gerenciar scripts |
| PUT | /api/v1/admin/scripts/{id} | Altera nome, descrição, código ou estado de um script | Gerenciar scripts |
| DELETE | /api/v1/admin/scripts/{id} | Exclui um script | Gerenciar scripts |
| POST | /api/v1/admin/scripts/dry-run | Executa um código com dados de teste, sem salvar | Testar e ligar |
| PUT | /api/v1/admin/scripts/{id}/toggle | Liga ou desliga um script | Testar e ligar |
| GET | /api/v1/admin/scripts/{id}/versions | Lista as versões anteriores (até 5), da mais nova à mais antiga | Versões e reversão |
| POST | /api/v1/admin/scripts/{id}/rollback/{versionId} | Restaura o código de uma versão anterior | Versões e reversão |
Erros comuns
- Esperar que
POST /admin/scriptsative o script: semis_active: trueele nasce desligado. - Checar só o status HTTP do teste a seco: erro no código volta
200comsuccess: false. - Tentar trocar o
extension_pointcomPUT: o campo é ignorado; crie outro script. - Usar
durationcomo milissegundos: vem em nanossegundos. - Esperar que
on_price_calculatealtere preços: o ponto está declarado, mas nenhum fluxo da plataforma o executa hoje. - Esperar 404 em ids inexistentes: várias rotas respondem 500 com a mensagem no campo
detail.