Campanhas de origem — captura de UTM no pagamento

TLDR: capturar os parâmetros UTM no frontend, salvá-los no pagamento e mostrar no admin quais campanhas estão trazendo venda para cada checkout.

Contexto

Não há como saber de onde os checkouts estão sendo promovidos. Os parâmetros UTM chegam na URL do checkout mas se perdem — nada é persistido.

Objetivos

  • No admin de um checkout, o administrador visualiza quais campanhas chegaram àquele checkout, a partir da informação salva nos pagamentos.
  • Quando o pagamento é criado no frontend, os campos de UTM são enviados e salvos no pagamento.

Fora de escopo

— (não registrado na spec original)

Mudanças

Modelo Payment

Adicionar os campos:

Campo Nome Descrição
utm_source UTM Source Referencia o utm_source
utm_medium UTM Medium Referencia o utm_medium
utm_campaign UTM Campaign Referencia o utm_campaign
utm_term UTM Term Referencia o utm_term
utm_content UTM Content Referencia o utm_content
utm_id UTM ID Referencia o utm_id

Controller e API

Na criação do pagamento no checkout, app/controllers/api/v1/checkout_controller.rb deve receber os params de UTM e salvá-los no pagamento, do mesmo modo como já são salvos os dados do Vision.

ActiveAdmin

  • Em Payments, listar todos os campos de UTM.
  • Na listagem de Payments, filtros com todos os source já utilizados.
  • Na tela interna do checkout, uma view com gráfico mostrando quais campanhas venderam.

Roadmap

  • [x] Criar os campos de UTM em Payment
  • [x] Modificar o checkout controller e o service para salvar os campos
  • [x] Criar UtmParam para guardar os valores únicos, evitando consulta pesada em payments
  • [x] Salvar UtmParam depois que um pagamento for criado
  • [x] Criar filtros em Payment
  • [x] Mostrar os campos no show de Payment
  • [x] Mostrar os campos no show de Checkout, com gráfico ou tabela

Como verificar

— (não registrado na spec original)

Sugestão a partir do estado atual do código: abrir um checkout com parâmetros UTM na URL, concluir uma compra e conferir os campos gravados no Payment e o registro correspondente em UtmParam.

Documentação

Implementação: app/models/utm_param.rb, app/controllers/api/v1/checkout_controller.rb, app/admin/payments.rb, app/admin/checkouts.rb.