A integração permite que eventos de conversão do checkout sejam enviados automaticamente para o Wetracked.io, com suporte para identificação de funis do Funnelish.
Este guia explica como a integração funciona na prática para que o lojista configure corretamente e o suporte consiga orientar sem confusões.
Muitos lojistas acreditam que ao conectar o Melhor Envio, o preço do frete vai aparecer automaticamente para o cliente final. Isso não acontece.
- O que ela NÃO FAZ: Ela não calcula o valor do frete em tempo real no checkout (não consulta CEP e peso para dar o preço na hora).
- O que ela FAZ: Ela automatiza a criação da etiqueta de envio e o código de rastreio após a venda ser paga.
Para escolher a melhor solução de tradução automática de orderbumps (1M caracteres/mês, ~2.000 orderbumps), comparo bibliotecas (translate npm) e APIs pagas (Azure, Google, AWS, DeepL, Yandex). Estimativas baseadas em documentações oficiais de 2025, assumindo 500 caracteres/orderbump.
Abaixo, listo custos, qualidade e como validar para sua apresentação.
Objetivo: Selecionar uma API de autocomplete de endereços, com foco inicial em Europa e EUA (expansível), alta precisão (~100%), suporte a filtro por país/região e retorno de componentes estruturados (rua, cidade, estado, CEP). Volume estimado: 50.000 requests/mês (~10.000 checkouts, 5 requests/usuário).
APIs Analisadas: Google Places API, Mapbox Address Autofill, TomTom Search API.
- Descrição: API líder em geocodificação, com autocomplete por país/região e retorno de rua, cidade, estado, CEP, coordenadas. Usa "sessões" para otimizar cobranças.
- Cobertura: Global (200+ países), excelente em EUA/Europa. Alta precisão (>95% em áreas urbanas e rurais).
- Integração: REST API, SDK JS (fácil com Next.js via fetch/axios).
| Suporte ao aplicativo Meus Cupons | |
| Se você tiver dúvidas ou encontrar algum problema, envie um e-mail para [email protected]. |
| import { Component, OnInit } from '@angular/core'; | |
| import { trackFacebookPixelEvent, trackGoogleAdsConversion } from '@/utils'; | |
| @Component({ | |
| selector: 'app-root', | |
| templateUrl: './app.component.html', | |
| styleUrls: ['./app.component.css'] | |
| }) | |
| export class AppComponent implements OnInit { |
| image |
| const checkImageSize = (imageRealWidth, imageRealHeight, minImageSize) => { | |
| return imageRealWidth <= minImageSize || | |
| imageRealHeight <= minImageSize || | |
| imageRealWidth < imageWidth || | |
| imageRealHeight < imageHeight | |
| } | |
| if (checkImageSize(imageRealWidth, imageRealHeight, minImageSize)) { | |
| this.setState({ imageHideZoomIcon: true }) |
| import ComingSoon from './ComingSoon.vue'; | |
| /* CUSTOMER */ | |
| import Customer from './customer/Customer.vue'; | |
| import CustomerList from './customer/CustomerList.vue'; | |
| export const views = { | |
| ComingSoon, | |
| /* CUSTOMER */ | |
| Customer, | |
| CustomerList, |
| import Vue from 'vue'; | |
| import Router from 'vue-router'; | |
| import Main from './views/Main.vue'; | |
| Vue.use(Router); | |
| export default new Router({ | |
| mode: 'history', | |
| routes: [ | |
| { |