Shopify no imprime. El admin puede mostrarte un pedido y tu navegador puede enviar esa página a una impresora, pero nada en Shopify empuja por sí solo un ticket a una máquina en tu cocina o tu almacén. La app oficial Order Printer es un motor de plantillas con un botón Imprimir: sigue necesitando a una persona.
Respuesta corta: un pedido se convierte en ticket impreso cuando algo escucha el webhook orders/create u orders/paid de Shopify y lo reenvía a una impresora accesible desde internet. Puedes llegar ahí con un conector listo para usar, con Shopify Flow, o con quince líneas de código propio.
Los tres enfoques
| Enfoque | Puesta en marcha | Requiere código | Maquetación | Ideal para |
|---|---|---|---|---|
| Conector | Minutos | No | Basada en plantilla | Comerciantes, agencias que entregan rápido |
| Shopify Flow | ~30 min | No | Limitada al payload construido | Tiendas que ya usan Flow, reglas condicionales |
| Tu propio webhook | Una hora | Sí | Total | Lógica propia, enrutado multi-sede |
Ninguno exige un ordenador en la tienda, siempre que la impresora mantenga su propia conexión a internet: una impresora en la nube con 4G/Wi-Fi/Ethernet, o una impresora USB existente detrás de un adaptador Raspberry Pi.
1. La vía del conector
El camino más rápido es el conector de Shopify: autorizas la app en tu tienda, eliges qué impresora recibe qué pedidos y ajustas la plantilla del ticket. Los pedidos se imprimen al pagarse. Las instrucciones detalladas están en la documentación de integración con Shopify.
Es la respuesta adecuada para la mayoría de comercios. Su límite es la maquetación: obtienes un buen ticket por defecto y controles de plantilla, no lógica arbitraria.
2. Shopify Flow
Si tu tienda ya usa Flow, puedes disparar la impresión sin salir de él:
- Disparador: Order created (o Order paid: ver abajo).
- Condición opcional: imprimir solo pedidos por encima de un importe, de una sede o con un producto concreto.
- Acción: Send HTTP request al endpoint de impresión, con el texto construido a partir de las variables de Flow.
Flow merece la pena cuando la decisión de imprimir es condicional. No la merece si simplemente quieres imprimir todos los pedidos: el conector lo hace con menos que mantener.
3. Tu propio webhook
// POST /webhooks/shopify/orders-paid
export default async function handler(req, res) {
const order = req.body;
const lineas = [
`PEDIDO ${order.name}`,
new Date(order.created_at).toLocaleString('es-ES'),
'',
...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: lineas.join('\n'),
origin: `shopify-${order.id}`,
}),
},
);
res.status(200).end();
}
Dos detalles importan más que el resto.
orders/paid, no orders/create. orders/create se dispara antes de capturar el pago. Si imprimes ahí, imprimirás pedidos con autorización fallida y todos los borradores que cree tu equipo.
origin lleva el id del pedido. Shopify reintenta los webhooks, y un reintento tras un timeout significa que el mismo pedido llega dos veces. Pasar un valor estable en origin te da una clave para detectar y descartar el duplicado.
Los fallos que nadie menciona
Tickets duplicados. Shopify da el webhook por fallido si no respondes en cinco segundos. Si imprimes y luego respondes, una llamada lenta se convierte en dos tickets. Responde 200 primero e imprime de forma asíncrona.
Emojis y caracteres especiales. Las impresoras térmicas hablan ESC/POS, no Unicode. Un título de producto con un emoji puede producir basura o, en algunos modelos, tirar la conexión. Limpia o transcribe antes de enviar: es la causa número uno de los avisos de «la impresora ha dejado de funcionar».
Ancho del papel. Un rollo de 80 mm cabe unos 42 caracteres por línea. Los títulos largos se parten de forma que el ticket resulta ilegible en pleno servicio. Trunca deliberadamente.
La impresora sin conexión. Decide de antemano si un trabajo no entregable debe encolarse, reintentarse o alertar. Comprobar el estado de entrega es un añadido de diez minutos que evita toda una familia de incidentes.
Dar formato al ticket
Cabeceras en negrita, logo, código QR al pedido, código de barras, corte automático: todo son etiquetas dentro de printer_msg. Consulta la referencia de maquetación y la impresión de logos.
Por dónde empezar
Si tienes una tienda y quieres los pedidos en papel hoy, instala el conector. Si enrutas pedidos entre sedes o necesitas lógica propia, escribe el webhook: es una tarde, no un proyecto. En ambos casos, crea una cuenta gratuita e imprime un ticket de prueba antes de tocar producción.
FAQ
¿Puede Shopify imprimir pedidos automáticamente sin una app?
Solo si escribes la integración: registra un webhook orders/paid y reenvía el pedido a un endpoint de impresión. Shopify nunca envía a una impresora, y Order Printer sigue exigiendo que alguien pulse Imprimir.
¿Necesito un ordenador en la tienda?
No, siempre que la impresora mantenga su propia conexión a internet. Una impresora en la nube con 4G, Wi-Fi o Ethernet se conecta sola; una impresora USB existente puede hacerlo detrás de un adaptador Raspberry Pi.
¿orders/create u orders/paid?
orders/paid en casi todos los casos. orders/create se dispara antes de capturar el pago, así que también imprime autorizaciones fallidas y borradores creados por el personal.
¿Por qué algunos pedidos se imprimen dos veces?
Shopify reintenta el webhook si tu endpoint no responde en cinco segundos. Responde 200 de inmediato, imprime de forma asíncrona y pasa el id del pedido en origin para detectar duplicados.