O Shopify não imprime. O admin pode mostrar-lhe um pedido e o navegador pode enviar essa página para uma impressora, mas nada no Shopify empurra sozinho um talão para uma máquina na sua cozinha ou armazém. A aplicação oficial Order Printer é um motor de templates com um botão Imprimir: continua a precisar de uma pessoa.
Resposta curta: um pedido torna-se um talão impresso quando algo escuta o webhook orders/create ou orders/paid do Shopify e o reencaminha para uma impressora acessível a partir da internet. Chega-se lá com um conector pronto a usar, com o Shopify Flow, ou com quinze linhas de código próprio.
As três abordagens
| Abordagem | Configuração | Precisa de código | Paginação | Adequado a |
|---|---|---|---|---|
| Conector | Minutos | Não | Baseada em template | Comerciantes, agências com prazos curtos |
| Shopify Flow | ~30 min | Não | Limitada ao payload construído | Lojas que já usam Flow, regras condicionais |
| Webhook próprio | Uma hora | Sim | Total | Lógica específica, encaminhamento multi-local |
Nenhuma exige um computador na loja, desde que a impressora mantenha a sua própria ligação à internet: uma impressora na nuvem com 4G/Wi-Fi/Ethernet, ou uma impressora USB existente atrás de um adaptador Raspberry Pi.
1. A via do conector
O caminho mais rápido é o conector Shopify: autoriza a aplicação na loja, escolhe que impressora recebe que pedidos e ajusta o template do talão. Os pedidos imprimem-se ao serem pagos. As instruções detalhadas estão na documentação de integração Shopify.
É a resposta certa para a maioria dos comerciantes. O seu limite é a paginação: obtém um bom talão por omissão e controlos de template, não lógica arbitrária.
2. Shopify Flow
Se a sua loja já usa Flow, pode desencadear a impressão sem sair dele:
- Gatilho: Order created (ou Order paid: ver abaixo).
- Condição opcional: imprimir apenas pedidos acima de um valor, de um local, ou com um produto específico.
- Ação: Send HTTP request para o endpoint de impressão, com o texto construído a partir das variáveis do Flow.
O Flow compensa quando a decisão de imprimir é condicional. Não compensa quando quer simplesmente imprimir todos os pedidos: o conector faz isso com menos para manter.
3. O seu próprio webhook
// POST /webhooks/shopify/orders-paid
export default async function handler(req, res) {
const order = req.body;
const linhas = [
`PEDIDO ${order.name}`,
new Date(order.created_at).toLocaleString('pt-PT'),
'',
...order.line_items.map(i => `${i.quantity}x ${i.title}`),
'',
`TOTAL: ${order.total_price} ${order.currency}`,
];
await fetch(
`https://www.expedy.fr/api/v2/printers/${process.env.PRINTER_UID}/print`,
{
method: 'POST',
headers: {
Authorization: `${process.env.API_SID}:${process.env.API_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
printer_msg: linhas.join('\n'),
origin: `shopify-${order.id}`,
}),
},
);
res.status(200).end();
}
Dois detalhes contam mais do que o resto.
orders/paid, não orders/create. O orders/create dispara antes da captura do pagamento. Imprimindo aí, imprimirá também as autorizações falhadas e todos os rascunhos criados pela equipa.
origin leva o id do pedido. O Shopify repete os webhooks, e uma repetição após um timeout significa que o mesmo pedido chega duas vezes. Passar um valor estável em origin dá-lhe uma chave para detetar e descartar o duplicado.
As falhas que ninguém menciona
Talões duplicados. O Shopify considera um webhook falhado se não responder em cinco segundos. Se imprimir e depois responder, uma chamada lenta transforma-se em dois talões. Responda 200 primeiro e imprima de forma assíncrona.
Emojis e caracteres especiais. As impressoras térmicas falam ESC/POS, não Unicode. Um título de produto com um emoji pode produzir lixo ou, em alguns modelos, derrubar a ligação. Limpe ou translitere antes de enviar: é de longe a principal causa dos relatos de «a impressora deixou de funcionar».
Largura do papel. Um rolo de 80 mm cabe cerca de 42 caracteres por linha. Os títulos longos quebram de forma a tornar o talão difícil de ler no meio do serviço. Trunque deliberadamente.
A impressora offline. Decida antecipadamente se um trabalho não entregável deve ser colocado em fila, repetido ou gerar um alerta. Verificar o estado de entrega é um acrescento de dez minutos que evita toda uma família de incidentes.
Formatar o talão
Cabeçalhos a negrito, logótipo, código QR para o pedido, código de barras, corte automático: tudo é marcação dentro de printer_msg. Veja a referência de paginação e a impressão de logótipo.
Por onde começar
Se gere uma loja e quer os pedidos em papel hoje, instale o conector. Se encaminha pedidos entre locais ou precisa de lógica própria, escreva o webhook: é uma tarde, não um projeto. Em qualquer dos casos, crie uma conta gratuita e imprima um talão de teste antes de tocar na produção.
FAQ
O Shopify pode imprimir pedidos automaticamente sem uma aplicação?
Apenas se escrever a integração: registe um webhook orders/paid e reencaminhe o pedido para um endpoint de impressão. O Shopify nunca empurra para uma impressora, e o Order Printer continua a exigir que alguém carregue em Imprimir.
É preciso um computador na loja?
Não, desde que a impressora mantenha a sua própria ligação à internet. Uma impressora na nuvem em 4G, Wi-Fi ou Ethernet liga-se sozinha; uma impressora USB existente pode fazê-lo atrás de um adaptador Raspberry Pi.
orders/create ou orders/paid?
orders/paid em quase todos os casos. O orders/create dispara antes da captura do pagamento, pelo que imprime também as autorizações falhadas e os rascunhos criados pela equipa.
Porque é que alguns pedidos se imprimem duas vezes?
O Shopify repete o webhook se o seu endpoint não responder em cinco segundos. Responda 200 de imediato, imprima de forma assíncrona e passe o id do pedido no campo origin para detetar duplicados.