Criar uma tarefa de impressão USB
POST https://www.expedy.fr/api/v2/devices/{device_uid}/usb/{usb_port}/print
Envia uma tarefa de impressão para uma impressora ligada a uma das portas USB do seu dispositivo Expedy.
URL base: https://www.expedy.fr/api/v2
Autenticação
Este endpoint requer um cabeçalho Authorization contendo o seu SID e o seu TOKEN, separados por um único caractere de dois-pontos.
Authorization: <SID>:<TOKEN>
Authorization: 9F3K7Q2WZ1ABCDEF:b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6
⚠️ Isto não é um token Bearer. Não adicione um prefixo
BearerouBasic— envie o valor brutoSID:TOKEN.
Ambos os valores estão disponíveis na consola Expedy, na secção API. Todos os pedidos devem ser feitos através de HTTPS (TLS).
Parâmetros de caminho
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
device_uid |
string |
Sim | UID do dispositivo, visível na consola em Machines (ex.: OOBBZ100PI). |
usb_port |
string |
Sim | A porta USB onde a impressora está ligada: 1, 2, 3 ou 4, de acordo com as portas mostradas na consola. Use /usb/scan/read para ver o que está ligado em cada uma. |
Uma porta só aceita tarefas depois de uma impressora ter sido detetada e configurada nela. Se a porta estiver livre, ou se a impressora nela nunca tiver sido configurada, a tarefa é rejeitada.
Corpo do pedido
Content-Type: application/json
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
usb_msg |
string |
Sim | O conteúdo a imprimir, construído com as etiquetas de layout do talão (<C>, <BOLD>, <IMG>, <QR>, <CUT/>, …). Texto simples, códigos QR, imagens ou o URL de um PDF. |
notification_url |
string |
Não | Um URL que o serviço de impressão chama assim que entrega a tarefa à impressora. Use-o para fechar o ciclo no seu próprio sistema em vez de assumir que o talão saiu. |
origin |
string |
Não | Uma etiqueta livre para identificar a origem da tarefa (um URI, um nome de aplicação, um departamento…). Útil para filtrar e depurar nos seus registos. |
printer_han |
string |
Não | A escrita com que compor o talão: cn chinês, kr coreano, jp japonês. Omita-o para as escritas latinas. Consulte Caracteres asiáticos. |
Exemplo de pedido:
{
"usb_msg": "<C><BOLD>ORDER #1234</BOLD></C>\n<C>Table 7</C>\n--------------------------------\n1 x Burger\n2 x Fries\n<CUT/>",
"notification_url": "https://www.example.com/print-callback",
"origin": "pos-kitchen-01"
}
Exemplo cURL:
curl -X POST "https://www.expedy.fr/api/v2/devices/OOBBZ100PI/usb/1/print" \
-H "Authorization: <SID>:<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"usb_msg":"<C><BOLD>Hello</BOLD></C><CUT/>","origin":"my-app"}'
Caracteres asiáticos
O chinês, o japonês e o coreano exigem printer_han, definido com a escrita que vai imprimir.
| Valor | Escrita |
|---|---|
cn |
chinês |
kr |
coreano |
jp |
japonês |
1 continua a ser aceite como sinónimo de cn.
Por predefinição, o talão é composto em modo de byte único: cada caractere é mapeado através de uma das code pages da impressora. Nenhuma code page de byte único contém hanzi, kana ou hangul, pelo que sem este parâmetro cada um desses caracteres é substituído por um ? antes mesmo de a tarefa chegar ao dispositivo.
{
"usb_msg": "<C><BOLD>주문 #1234</BOLD></C>\n<CUT/>",
"printer_han": "kr"
}
O valor tem de corresponder à escrita. Cada um seleciona uma codificação diferente e não se sobrepõem: coreano enviado como cn sai como ?, exatamente como se o parâmetro tivesse sido omitido.
A impressora tem de possuir o tipo de letra correspondente. O printer_han comuta o fluxo para o modo multibyte; os glifos vêm da ROM de tipos de letra da impressora. Um modelo vendido sem esse tipo de letra não imprimirá os caracteres mesmo com o valor certo, e uma impressora destinada ao mercado chinês inclui hanzi, o que não significa que inclua hangul ou kana. Teste a escrita de que precisa no modelo exato que vai instalar e contacte o suporte se o resultado não for legível.
O texto latino não precisa dele. Omita printer_han nas línguas europeias: os caracteres acentuados são tratados no modo predefinido.
Envie o seu conteúdo em UTF-8 em todos os modos. A API armazena e devolve exatamente o que recebe, pelo que o histórico de impressão na consola mostra o texto tal como chegou — a forma mais rápida de distinguir um problema de dados de um problema de impressora.
Resposta 200 OK
A tarefa foi aceite e colocada em fila.
ℹ️ Um
200confirma apenas a receção do lado do servidor — não que o talão foi fisicamente impresso. A entrega é assíncrona: o dispositivo recebe a tarefa na sua próxima ligação. A impressora pode estar offline, sem papel, desligada ou inacessível nesse momento. Indique umnotification_urlse precisar de saber o que aconteceu realmente.
| Parâmetro | Tipo | Descrição |
|---|---|---|
request_uid |
string |
Identificador único da tarefa de impressão aceite (ex.: 1X5ERXL94BYVWHP92DK3MCASUGJ). |
last_ping |
integer |
Marca temporal Unix do último contacto do dispositivo com o servidor. Um valor antigo significa que o dispositivo não estava online quando enviou a tarefa. |
Exemplo de resposta:
{
"last_ping": 1641509604,
"request_uid": "1X5ERXL94BYVWHP92DK3MCASUGJ"
}
Vale a pena ler last_ping em cada chamada: é o sinal mais barato de que um dispositivo se calou.
Erros
| Estado | Significado |
|---|---|
403 |
Credenciais ausentes ou inválidas (SID / TOKEN), ou o dispositivo não pertence a esta conta. |
404 |
device_uid desconhecido, ou nenhuma impressora configurada nessa usb_port. |
405 |
Método HTTP incorreto — este endpoint só aceita POST. |
422 |
usb_msg vazio ou malformado. |
500 |
A tarefa não pôde ser entregue ao dispositivo. Tente novamente e, se persistir, contacte o suporte. |
Boas práticas
- Idempotência. Cada pedido aceite produz uma impressão. O endpoint não elimina duplicados: se repetir o pedido após um erro de rede, proteja-se contra a dupla impressão do seu lado.
- Mantenha
usb_msgdentro da largura do papel. 32 caracteres por linha a 58 mm, 48 a 80 mm. Consulte a referência de layout. - Teste com e sem imagens. Alguns modelos de impressora rejeitam certos tipos de imagem e podem fazer falhar toda a tarefa — valide antes de entrar em produção.
Endpoints relacionados
GET https://www.expedy.fr/api/v2/devices/{device_uid}/usb/scan/read
Devolve o que está atualmente ligado a cada porta USB, com o fabricante e o modelo detetados. Use-o para descobrir em que porta imprimir e para confirmar que uma impressora continua onde espera.
/usb/conf devolve a configuração guardada de cada porta: largura do papel, modo de impressão, modo gráfico.
SDK e exemplos
Prefere um cliente pronto a usar? Use o SDK oficial de Node.js: