Make: catro módulos HTTP e ningunha app
Non hai app oficial de Cairos en Make, e para o que hai que facer tampouco fai falta. Co módulo HTTP e unha conexión por clave móntase o percorrido enteiro dun pedido a unha factura emitida.
A API está en marcha. Isto é o que hai hoxe e o que non
Funciona. As rutas desta documentación están despregadas e respondendo en https://erp.cairos.es/api/v1/. Os exemplos destas páxinas pódense copiar e executar. A especificación completa está en openapi.json, que é o que importan Make e n8n.
As claves créalas ti, desde Desenvolvedores na túa conta de Cairos. Comeza cunha cai_test_: traballa contra os teus datos de verdade pero non rexistra en VeriFactu nin envía correos, así que podes montar a túa integración sen enlixar unha serie de facturación.
E o que aínda NON hai, dito sen adornos: ningún conector oficial. Nin app de Shopify, nin plugin de WooCommerce, nin módulo publicado en Make ou n8n. Coa API e a súa especificación pódense construír —para iso están as guías desta sección— pero construílos é traballo, e ese traballo non está feito.
Se montas algo con isto, escríbenos a hola@cairos.es. Interésanos especialmente o que che falte do contrato: é o que decide que se amplía primeiro.
Non hai app oficial de Cairos en Make
Non está publicada e non hai data. O que hai é a API —coa súa lista de eventos, o seu OpenAPI e os seus webhooks— e esta páxina, que che di exactamente que enganchar e con que código. Dentro de Cairos hai ademais receitas xa montadas e un fluxo de n8n descargable, en API e integracións → Comezar.
Se a túa tenda é de PrestaShop, este é o teu camiño
Cairos conecta só con Shopify, WooCommerce e Odoo. Con PrestaShop aínda non, e está a medias a propósito: o tipo de IVE de cada liña non vén na liña —hai que resolvelo contra outros dous recursos da súa API—, os cupóns son un recurso aparte que se aplica ao pedido e non ás liñas, e cada tenda chámalle dun xeito distinto ao estado que significa «vendido», porque eses estados edítaos o comerciante. Facturar tres de cada catro pedidos e inventar o IVE do cuarto é peor ca dicir que non: o «non» vese o primeiro día e o IVE mal posto vese no 303.
Mentres tanto, os seus pedidos entran perfectamente por aquí: PrestaShop sabe avisar a un enderezo cando entra un pedido, e o que hai debaixo é exactamente o mesmo percorrido que conta esta páxina.
O módulo que se usa
O de sempre cando non hai app: HTTP. E dentro de HTTP, o que fai a petición con autenticación por clave, que existe xustamente para non deixar a clave escrita á vista no escenario.
A diferenza entre usar ese módulo e o HTTP xenérico non é cosmética. Co xenérico, a cabeceira Authorization coa túa clave dentro queda escrita no escenario, e calquera do teu equipo que o abra ve a clave e lévaa. Coa conexión por clave, a clave vive no chaveiro de Make e o escenario só a referencia.
| Campo da conexión | Que poñer |
|---|---|
| Nome da clave (cabeceira) | Authorization |
| Valor | Bearer cai_live_TU_CLAVE — coa palabra Bearer e o espazo |
| Onde vai | Na cabeceira, non na consulta |
O fallo máis repetido montando isto é poñer só a clave, sen Bearer diante. Sae un 401 no_autenticado e parece que a clave está mal cando o que falta é unha palabra.
Un escenario completo: dun pedido a unha factura
Catro módulos. O primeiro cambia segundo de onde veña o pedido; os outros tres son sempre os mesmos.
| # | Módulo | Que fai |
|---|---|---|
| 1 | Disparador | Un webhook personalizado ao que apunta a túa tenda, ou o módulo de vixilancia da app que uses. Aquí entra o pedido. |
| 2 | HTTP · petición con clave | POST a /contactos. Corpo JSON con nome, NIF e correo do pedido. |
| 3 | HTTP · petición con clave | POST a /facturas coas liñas e o id do contacto do paso 2. |
| 4 | HTTP · petición con clave | POST a /facturas/{id}/emitir, co id do paso 3. |
O corpo do paso 3, tal cal se pega no campo de contido do módulo, substituíndo o que está entre chaves polo que traia o teu disparador:
{
"contacto_id": "el id que devolvió el paso 2",
"serie": "WEB",
"fecha_emision": "la fecha del pedido, en AAAA-MM-DD",
"lineas": [
{
"descripcion": "el nombre del artículo",
"cantidad": 1,
"precio": 180.00,
"tipo_iva": 21
}
]
}Copia eses nomes tal cal. Os catro que se escriben mal sempre son fecha_emision (non «fecha»), descripcion (non «concepto»), tipo_iva (non «iva») e, no paso 2, tipo con valor customer (non «cliente»). A API non ignora un campo que non coñece: devolve 422 nomeándoo, así que se un módulo se pon vermello con ese código, o primeiro é mirar error.detalles.campos.
E en cabeceiras de cada módulo, dúas, ademais da que pon a conexión:
Content-Type: application/json
Idempotency-Key: make-1042A chave de idempotencia, que en Make importa máis ca en ningún sitio
Make reintenta escenarios, e ese é todo o problema
Un escenario que falla a metade pódese volver executar, enteiro, desde a cola de incompletos. Se o módulo que fallou era o cuarto, os tres primeiros execútanse outra vez, e o segundo crea outro contacto e o terceiro outra factura. Coa cabeceira posta, a segunda execución devolve a mesma factura e non pasa nada.
A chave ten que saír do identificador do pedido do disparador, non dunha función de aleatorio nin da data actual: se cambia entre a execución e a repetición, non serve de nada. E unha distinta por operación: make-1042 para crear a factura e make-1042-emitir para emitila.
Por que isto importa tanto e que pasa cando falta, en idempotencia.
Control de erros
Sen control de erros, un módulo que devolve 422 detén o escenario e mándao á cola. Con el, pódese decidir que facer, e a decisión non é a mesma para todos os códigos:
| O que devolve Cairos | Que poñer no xestor de erros |
|---|---|
429 ou 500 | Reintentar. Son os dous únicos que ten sentido repetir, e coa chave posta repetir é gratis. |
422 datos_invalidos | Ignorar e avisar a unha canle. O dato vén mal do outro sistema e repetir dará o mesmo erro. error.detalles di que campo. |
401 ou 403 | Parar e avisar. É a conexión ou o scope: reintentar só consome operacións. |
Os sete códigos, con cales se reintentan, están en erros e límites.
E un consello que aforra operacións do teu plan: non montes un escenario que consulte Cairos cada cinco minutos por se hai algo novo. Subscríbete a un webhook e que o escenario arranque cando pase algo. É máis barato, máis rápido e non gasta o límite da API.
Se isto che vai custar máis dunha tarde, mira n8n
Non é unha recomendación en contra de Make: é que n8n ten un nodo de código onde comprobar a sinatura dun webhook, e en Make iso é máis incómodo. Se só vas chamar a Cairos, Make vai perfectamente; se ademais vas recibir sucesos asinados, o outro vaiche dar menos guerra.
Preguntas sobre Make
Authorization e o valor Bearer máis a clave. Así queda no chaveiro de Make e non escrita no escenario, onde a vería calquera do teu equipo.Bearer e o espazo diante da clave. É o fallo número un montando isto.Idempotency-Key iso significa unha segunda factura; con ela, a segunda execución devolve a primeira factura e non duplica nada.POST /webhooks. É moito mellor ca consultar cada poucos minutos, que gasta operacións para se decatar de que non pasou nada.openapi.json?version=3.0: Make aínda non dixire o type: ["string","null"] de OpenAPI 3.1 e ou se atasca ao importar ou che deixa mal tipados os campos que poden vir baleiros. É o mesmo contrato, traducido.Monta o escenario e próbao cunha clave de probas
As rutas e os corpos son os que acepta o servidor hoxe. Crea unha clave cai_test_ e lanza o escenario: non rexistra en VeriFactu nin manda correos.
Módulo HTTP · Conexión por clave · Idempotency-Key do pedido