Novedad: campañas, automatizaciones y correos del producto en la misma cuenta. Conoce Postal
Iniciar sesión Crear cuenta

De Loops a Postal, con los mismos bloques

Loops y Postal se parecen: contactos, eventos que inician flujos, correos electrónicos transaccionales con plantilla y campañas. Cambia el formato de las llamadas, y los flujos los recreas. Esta guía los compara uno a uno y dice qué no tiene par.

Los dos envíos
API y SMTP
Eventos, flujos y temas
Mismo diseño
El formato de la base
CSV
Workflows y campañas
Recrear

Visión general

Lo que viene incluido y lo que rehaces

Los contactos vienen por archivo CSV. Las llamadas las reescribes, y los flujos los recreas en el editor de Postal. Nada ocurre solo: exportas, conviertes y verificas.

Viene por archivo

Contactos, propiedades y quién se dio de baja (la columna Subscribed de Loops, que en Postal pasa a ser lo inverso).

Lo reescribes

La llamada transaccional, el envío de eventos, la conexión SMTP y los webhooks. El diseño es parecido, el formato no.

Lo recreas

Workflows, campañas y plantillas. Lo que llevas es el contenido y la idea de cada flujo.

Equivalencia

Los mismos conceptos, otros nombres

Loops y Postal tienen casi el mismo diseño: contactos, eventos que inician flujos y correos electrónicos transaccionales con plantilla. Usa esta tabla como diccionario.

En LoopsEn PostalCómo funciona en Postal
Contact (contacto)ContactoCada correo electrónico aparece una vez por equipo. El external_id (alias user_id) es el ID de la persona en tu sistema.
Contact properties: texto, número, booleano y fechaPropiedades: texto, número, sí/no y fechaLos tipos son los mismos. Crea la propiedad antes de usarla, en ambos lados.
Propiedades predeterminadas: Email, First Name, Last Name, User Id, Source, User Group, Notes y SubscribedCorreo, nombre, apellido, ID externo y dado de bajaSource, User Group y Notes pasan a ser propiedades que creas. Subscribed pasa a ser lo inverso: Dado de baja.
Subscribed = falseDado de bajaNo recibe campañas ni correos electrónicos de automatizaciones. Los correos enviados por la API siguen saliendo, como en Loops.
Suppression (rebote y queja)Lista de supresiónDirecciones que no deben recibir correos. Quedan fuera de todos los envíos, incluidos los de la API, y nunca se convierten en contactos.
Mailing lists, públicas o privadasTemas, públicos o privadosAsuntos que el contacto elige recibir o no, en la página de preferencias que se abre desde el enlace de cancelación de suscripción.
Audience filters y saved segmentsSegmentos dinámicosDefinidos por filtros y actualizados solos. Los filtros los rehaces tú.
Events (POST /v1/events/send)Eventos (POST /events)Cada evento puede tener un contacto e inicia las automatizaciones con el disparador de ese nombre.
Workflows (antes llamados loops)AutomatizacionesUn disparador y pasos, en un editor de flujos.
Transactional emails (transactionalId)Plantillas enviadas por POST /emailsLa plantilla guarda el HTML y, si quieres, el remitente y el asunto predeterminado.
CampaignsCampañasEnvío a un segmento y, si quieres, solo a quienes están suscritos a un tema.
Preference CenterPágina de preferenciasSe abre desde el enlace de cancelación de suscripción y lista los temas públicos.
Email blocklist (patrones como *@exemplo.com)Sin equivalenteLa lista de supresión guarda direcciones, no patrones.
1

Verifica el dominio en Postal

En Dominios, Postal muestra pocos registros para que quien se encarga del DNS los copie, y los comprueba sola durante hasta 72 horas. El dominio puede seguir verificado en Loops al mismo tiempo.

Los registros de Loops y de Postal, lado a lado
En LoopsEn Postal
SubdominioLa documentación recomienda un subdominio, como mail.suaempresa.com, en lugar del dominio principalTambién recomendado: un subdominio solo para correo
SPF y MXEn el subdominio envelope (por ejemplo, envelope.suaempresa.com)MX y TXT en el subdominio postal
DKIMRegistros de la pantalla Settings, Domain, View records (los nombres no constan en la documentación)TXT en postal._domainkey
DMARCLoops proporciona un registro, y puedes mantener solo uno en el dominio principalOpcional. El mismo _dmarc sirve para los dos
Cómo confirmarBotón Verify Records. La propagación tarda hasta 72 horas, en general hasta 24Sola, hasta por 72 horas, con el estado de cada registro
  • Por los nombres, los registros de Postal no chocan con los de Loops. Copia los valores de la pantalla de tu Loops y comprueba si algún nombre es igual antes de publicar.
  • Postal avisa por el webhook domain.updated cuando el dominio pasa a verified. Consulta Dominios y DNS.
  • Crea una clave de API (empieza con ps_). Para sistemas que solo envían, usa una clave solo de envío, restringida al dominio.
2

Reescribe el envío transaccional

En Loops, la llamada indica solo a quién enviar y qué correo transaccional usar: el remitente, el asunto y el cuerpo quedan en el correo registrado allí. En Postal el diseño es parecido, con la plantilla en lugar del correo transaccional, pero la llamada es otra.

Antes: Loops, POST /v1/transactional
POST https://app.loops.so/api/v1/transactional
Authorization: Bearer <clave de Loops>
Idempotency-Key: pedido-10482-saiu
Content-Type: application/json

{
  "email": "[email protected]",
  "transactionalId": "clomzp89u635xl30px7wrl0ri",
  "dataVariables": { "nome": "Ana", "pedido": "10482" }
}
200{ "success": true }
Después: Postal, POST /emails
POST https://api.postal.so/emails
Authorization: Bearer ps_sua_chave
Idempotency-Key: pedido-10482-saiu
Content-Type: application/json

{
  "from": "Aurora Cosméticos <[email protected]>",
  "to": "[email protected]",
  "template": {
    "id": "pedido-enviado",
    "variables": { "nome": "Ana", "pedido": "10482" }
  }
}
200{ "id": "019a1b2c-4d5e-7f60-8a9b-0c1d2e3f4a5b" }
POST /v1/transactional y POST /emails
En LoopsEn PostalQué cambia
POST /v1/transactionalPOST /emailsLa clave va en Authorization: Bearer en ambos. En Postal empieza con ps_.
email: una direcciónto: texto o lista de hasta 50Una lista en Postal es un único correo electrónico, en el que todos se ven. Para un correo por persona, usa el lote (hasta 100). También puedes enviar user_id en lugar de to, y Postal usa el correo del contacto.
transactionalIdtemplate.id: el ID o el aliasEl correo de Loops debe estar publicado; la plantilla de Postal también. Los envíos usan siempre la última versión publicada. from es obligatorio si la plantilla no tiene un remitente predeterminado.
dataVariables: texto o númerotemplate.variables: texto o númeroLas variables opcionales pueden quedar vacías en Loops. En Postal, una variable sin valor y sin valor predeterminado devuelve 422: declara fallback_value. Las listas y los bloques repetidos no pasan: arma el HTML de la lista en tu sistema.
attachments: filename, contentType, dataattachments: filename, content_type, content (Base64) o path (URL)En Loops, el soporte debe habilitar los adjuntos en la cuenta. En Postal, dependen del plan: hasta 40 MB en total.
addToAudienceSin campoCrea el contacto aparte (POST /contacts o el lote), o envía un evento con el contacto.
Respuesta {"success": true}Respuesta con {"id"}Guarda el id: es el que aparece en los webhooks (data.email_id) y en GET /emails/{id}.
Errores: {success, message}Errores: {statusCode, name, message}Consulta Errores.
Idempotency-Key: hasta 100 caracteres; repetida en 24 horas, devuelve 409Idempotency-Key: de 1 a 256 caracteresEn Postal, repetir la clave con el mismo cuerpo, dentro de 24 horas, devuelve la respuesta de la primera y no envía de nuevo. Solo un cuerpo diferente, o una solicitud todavía en curso, da 409.
Hasta 10 solicitudes por segundo por equipoPor plan: Gratis 5, Profesional 10, Escala 20 y Empresarial 50En el lote, 100 correos electrónicos cuentan como una solicitud. Consulta Límites.
Sin campos para cc, bcc, reply_to, etiquetas ni programacióncc, bcc, reply_to, headers, tags y scheduled_atAñadidos de Postal. La programación llega hasta 30 días y depende del plan.
  • En Loops, quien canceló su suscripción sigue recibiendo los correos transaccionales. En Postal es igual: solo la lista de supresión bloquea un envío por la API.
  • ¿Prefieres un SDK? Los de Postal (Node.js, PHP y Laravel) usan esta misma API. Consulta SDKs y CLI y la referencia de correos.
3

Si envías por SMTP, el correo pasa a ser el de verdad

Por SMTP, Loops no recibe un correo común: el cuerpo del mensaje es un JSON con el transactionalId, la dirección del destinatario y los datos del modelo (en el ejemplo de Laravel de la documentación, la dirección de Mail::to() no se usa en la entrega). El SMTP de Postal entrega el mensaje tal como llega, con asunto, HTML y los destinatarios del propio correo.

El cuerpo que Loops espera por SMTP
{
  "transactionalId": "clomzp89u635xl30px7wrl0ri",
  "email": "[email protected]",
  "dataVariables": { "loginUrl": "https://exemplo.com.br/entrar?code=482913" }
}
.env de Laravel
- MAIL_HOST=smtp.loops.so- MAIL_PORT=587- MAIL_USERNAME=loops- MAIL_PASSWORD=<chave de API do Loops>- MAIL_ENCRYPTION=tls+ MAIL_SCHEME=smtps+ MAIL_HOST=smtp.postal.so+ MAIL_PORT=465+ MAIL_USERNAME=postal+ MAIL_PASSWORD=ps_sua_chave
Configuración de SMTP en ambos lados
SMTP de LoopsSMTP de Postal
Servidor y puertosmtp.loops.so, puerto 587smtp.postal.so, puerto 465 (TLS directo, recomendado) o 587 (STARTTLS). Si la red lo bloquea, 2465 o 2587
Usuario y contraseñaloops y una clave de API de Loopspostal y una clave de API (ps_…). Basta una clave solo de envío
Cuerpo del mensajeEl JSON de arriba, con el transactionalIdEl correo de verdad, en HTML y texto
DestinatarioEl campo email del JSONLos destinatarios del sobre, hasta 50 por mensaje
ModeloEl correo transaccional elegido por el transactionalIdEl SMTP de Postal no tiene plantillas: envía el HTML listo, o usa la API
  • En Laravel, esto significa cambiar la vista de texto que armaba el JSON por una vista con el HTML del correo, y pasar el asunto en el Envelope. La dirección de Mail::to() pasa a valer.
  • En Postal, la autenticación (AUTH PLAIN o AUTH LOGIN) viene siempre después del TLS. El SMTP no tiene etiquetas ni programación.
  • Los envíos por SMTP siguen las mismas reglas de la API (dominio verificado, cuotas y supresión) y aparecen en Correos y Registros. Consulta la guía de SMTP.
4

Cambia el envío de eventos y la creación de contactos

Los eventos cumplen el mismo papel en ambos: cuentan a la plataforma lo que pasó en tu producto e inician los flujos. En Postal, un solo POST /events también registra o actualiza a la persona antes de iniciar las automatizaciones.

Antes: Loops, POST /v1/events/send
POST https://app.loops.so/api/v1/events/send
Authorization: Bearer <clave de Loops>
Idempotency-Key: pedido-10482-pago
Content-Type: application/json

{
  "email": "[email protected]",
  "eventName": "pedido_pago",
  "eventProperties": { "total": 289.9 },
  "plano": "pro"
}
200{ "success": true }
Después: Postal, POST /events
POST https://api.postal.so/events
Authorization: Bearer ps_sua_chave
Idempotency-Key: pedido-10482-pago
Content-Type: application/json

{
  "name": "pedido_pago",
  "contact": { "email": "[email protected]" },
  "properties": { "total": 289.9 },
  "contact_properties": { "plano": "pro" }
}
Eventos y contactos por la API
En LoopsEn PostalQué cambia
eventNamenameHasta 100 caracteres: letras, números, ., _, : y -.
email o userIdcontact: correo, ID o external_id:<id>, o un objetoPostal busca el contacto por el ID, después por el external_id y después por el correo. Un correo nuevo crea el contacto.
eventPropertiespropertiesHasta 16 KB. Quedan disponibles en los filtros y en las condiciones de las automatizaciones, y como variables en los correos ({{event.plano}}).
Propiedades del contacto sueltas en la raíz del cuerpocontact_propertiesLa propiedad debe existir, en ambos lados.
mailingLists: {id: true} o falseSin campoEl evento de Postal no toca los temas. Usa PATCH /contacts/{id}/topics o el paso de actualizar contacto de una automatización.
POST /v1/contacts/create (409 si ya existe)POST /contacts (422 si ya está registrado)Los campos cambian a first_name, last_name, external_id y properties.
PUT /v1/contacts/update: crea si no existePOST /contacts/batch: crea o actualiza, hasta 10.000 por llamadaBusca el contacto por el ID, por el external_id y por el correo. Para un solo contacto ya existente, PATCH /contacts/{id}.
subscribedunsubscribedLo inverso: subscribed: false pasa a ser unsubscribed: true.
  • Un evento sin contact queda registrado, pero no inicia automatizaciones. Con un correo nuevo, Postal crea el contacto, avisa al webhook contact.created e inicia las automatizaciones de contacto creado.
  • Una dirección de la lista de supresión nunca se convierte en contacto: la respuesta es 422 email_suppressed.
  • Los SDK de Node.js y PHP (events.send) y la CLI (postal events send) envían eventos. Consulta la referencia de eventos.
5

Recrea los workflows y las campañas

Los flujos no pasan solos. La buena noticia es que los bloques son casi los mismos, así que la conversión es de nombres: abre cada workflow de Loops y arma el equivalente en Automatizaciones.

Evento signUpEsperar 3 díasCondición: pagó = noEnviar correo
Disparadores y nodos
En LoopsEn PostalObservación
Disparador Contact addedcontact.createdLos contactos de una importación de CSV solo disparan cuando la importación lo pide (trigger_automations). En Loops también hay que pedirlo.
Disparador Contact updatedcontact.property_changedCon la propiedad y, si quieres, el valor de antes (from) y el de después (to).
Disparador Contact added to listtopic.subscribed o segment.addedDepende de si la lista pasó a ser un tema o un segmento.
Disparador Event receivedeventCon hasta 10 filtros sobre las propiedades del evento.
Nodo EmailPaso send_emailEnvía una plantilla publicada. Con detect_replies, Postal detecta las respuestas.
Nodo TimerPaso waitEspera de minutos a semanas, o hasta un día y una hora, con zona horaria.
Nodo Audience filterPaso conditionLa condición tiene dos caminos, Sí y No. Deja el No vacío para terminar la ejecución de quien no pasa el filtro.
Nodo BranchPaso conditionPostal lo divide en Sí y No; para más caminos, encadena condiciones.
Nodo ExperimentPaso experimentPrueba A/B entre 2 y 4 variantes, en los planes que la incluyen.
Sin equivalente en Loopswait_for, update_contact y webhookPasos que la página de workflows de Loops no lista: esperar a que el contacto abra, haga clic o responda, cambiar el contacto y avisar a tu sistema.
  • Cada contacto entra una vez de forma predeterminada (reentry: "once"). Para que entre con cada disparador, usa every_time.
  • Las campañas y los segmentos guardados (saved segments) también se rehacen: las campañas en Campañas y los segmentos como segmentos dinámicos. Las campañas ya enviadas no se importan.
  • Las importaciones no inician automatizaciones, a menos que actives esa opción. Revisa quién entraría antes de activarla. Consulta Automatizaciones.
6

Recrea los correos y las variables

Postal no convierte correos de otra plataforma. Pega el HTML en el editor o envíalo por POST /templates. Lo que cambia es la forma de escribir las variables.

Crear la plantilla en Postal
POST https://api.postal.so/templates
Authorization: Bearer ps_sua_chave
Content-Type: application/json

{
  "name": "Código de acceso",
  "alias": "codigo-de-acesso",
  "subject": "Tu código de acceso",
  "html": "<p>Para entrar, <a href=\"{{{loginUrl}}}\">haz clic aquí</a>.</p>",
  "variables": [{ "key": "loginUrl" }]
}
201Publica con POST /templates/{id}/publish
Variables de los correos
En LoopsEn PostalObservación
{DATA_VARIABLE:loginUrl}{{{loginUrl}}}El valor viene en template.variables. En el HTML, los valores se escapan.
Propiedades del contacto en los correos de campaña y de flujo{{{FIRST_NAME}}}, {{{EMAIL}}} o {{{contact.chave}}}Solo en campañas y automatizaciones. La propiedad debe existir.
Datos de un evento{{event.chave}}En los correos de las automatizaciones iniciadas por un evento.
Bloques repetidos (arrays), hasta 100 elementosSin equivalenteCada variable de Postal es texto o número. Arma el HTML de la lista en tu sistema.
{unsubscribe_link} (correos en MJML){{{POSTAL_UNSUBSCRIBE_URL}}}Sin la variable, Postal añade un pie de cancelación de suscripción en las campañas.
Correo escrito en MJMLHTMLCompila el MJML a HTML antes de pegarlo.
  • Los nombres de las variables admiten letras, números y _, hasta 50 caracteres. Declara en variables las que tienen valor predeterminado.
  • La plantilla guarda también el remitente y el asunto predeterminado (from, subject), que valen cuando el envío no manda los suyos.
  • Consulta la referencia de plantillas; el plan define cuántas plantillas tiene el equipo.
7

Recrea el webhook

La verificación de la firma es la misma en ambos: las documentaciones describen los encabezados webhook-id, webhook-timestamp y webhook-signature y un HMAC-SHA256, en Base64, de id.timestamp.corpo, con el secreto whsec_…. Tu código de verificación debería seguir sirviendo, solo con el secreto del nuevo endpoint. Lo que cambia son los nombres y el cuerpo de los eventos.

Eventos: qué corresponde a qué
Evento de LoopsEvento de PostalObservación
email.deliveredemail.delivered
email.softBouncedemail.bounceddata.bounce.type es Transient.
email.hardBouncedemail.bounceddata.bounce.type es Permanent, y la dirección entra en la lista de supresión (evento suppression.added). En Loops, el hard bounce también dispara contact.unsubscribed.
email.spamReportedemail.complainedLa dirección entra en la lista de supresión.
email.opened, email.clickedemail.opened, email.clickedSolo con el rastreo activado en el dominio. En Loops, no existen para correos transaccionales.
email.unsubscribed, email.resubscribedcontact.updatedLa baja de un contacto de marketing genera contact.updated.
contact.created, contact.deletedcontact.created, contact.deletedVienen con el contacto y el origen del cambio (source).
contact.unsubscribedcontact.updatedCon unsubscribed verdadero en el contacto.
contact.mailingList.subscribed, .unsubscribedSin evento propio documentadoLos temas de Postal no tienen un evento con ese nombre.
campaign.email.sent, loop.email.sent, transactional.email.sentemail.sentAproximado: uno por correo. Si salió de una campaña, data.broadcast_id indica cuál.
testing.testEventEvento de prueba del panelEnvía uno antes de cambiar el tráfico.
Webhooks: formato, firma e intentos
En LoopsEn PostalObservación
Un endpoint por cuentaVarios endpoints, según el planCada endpoint elige sus eventos, y la URL debe ser HTTPS y pública.
eventName, eventTime (Unix), webhookSchemaVersion y bloques como email y contactIdentity{type, created_at, data}created_at viene en ISO 8601. El correo está en data, con email_id, to, subject y tags.
Encabezados Webhook-Id, Webhook-Timestamp y Webhook-SignatureLos mismos, más los equivalentes svix-*Los nombres de encabezado no distinguen mayúsculas. Rechaza timestamps con más de 5 minutos de diferencia, como en ambos.
Hasta 8 intentos en cerca de 28 horas, respuesta 2xx en hasta 15 segundosHasta 8 intentos en cerca de 27 horas, respuesta 2xx en hasta 15 segundosTodos con el mismo webhook-id: úsalo para descartar duplicados. Reenvío desde el panel o por POST /webhooks/{id}/events/{event_id}/replay.
Desactiva el endpoint si todos los intentos fallan durante 5 díasDesactiva el endpoint tras fallos seguidos (disabled_reason: "failing")Revisa el estado del webhook en los primeros días.
Historial de 30 díasHistorial de 30 díasPanel y GET /webhooks/{id}/events.
  • Crea el endpoint en Webhooks (panel o POST /webhooks), elige los eventos y guarda el signing_secret. Consulta la verificación de la firma.
  • Quita el webhook de Loops solo después de cambiar todo el tráfico: los correos que aún salen por allí siguen generando eventos.
8

Exporta la audiencia de Loops e impórtala en Postal

En la Audiencia de Loops, abre el menú ••• en la esquina del cuadro de filtros y elige Download. Para exportar solo un grupo, aplica los filtros antes. El CSV tiene una columna por propiedad de contacto, las predeterminadas y las tuyas. En Postal, la importación está en Audiencia, Importar CSV.

SuscritosImportar

Subscribed igual a verdadero.

Impórtalos como contactos.

Dados de bajaImportar con “sí”

Subscribed igual a falso. En Loops, un hard bounce también da de baja.

Impórtalos como dados de baja. Antes, separa los suprimidos.

SuprimidosSuprimir

Quien tuvo un hard bounce o se quejó: Loops bloquea el envío.

Ponlos en la lista de supresión.

Bloqueados de forma predeterminadaSin equivalente

Direcciones y dominios que Loops rechaza al entrar (blocklist).

Sin equivalente: recházalos en el origen.

  • Subscribed es lo inverso de Dado de baja. Crea una columna Dado de baja con sim donde Subscribed sea falso y não donde sea verdadero. O descarga dos archivos, filtrando por Subscribed, e importa el de los dados de baja con sim en todas las filas.
  • Suprimidos: la documentación de Loops solo describe la consulta de una dirección por vez (GET /v1/contacts/suppression?email=). Para separar los suprimidos de los dados de baja por elección, consulta cada dirección del archivo de los dados de baja (el límite es de 10 solicitudes por segundo) y pon los suprimidos en la lista de supresión con POST /suppressions/batch/add, 100 por solicitud, antes de importar contactos.
  • Listas: Loops no documenta si el CSV trae la pertenencia a listas. Si no la trae, exporta una lista por archivo. Las listas pasan a ser temas (públicos o privados, como allá): importa cada archivo marcando el tema en Suscribir a los temas. Ese campo suscribe a todos los contactos del archivo.
  • Propiedades: los tipos son los mismos (texto, número, sí/no y fecha). Source, User Group y Notes pasan a ser propiedades que creas antes, porque la importación no crea propiedades nuevas. Las fechas en formato 2026-10-28 funcionan.
  • Límite del plan: en Loops, los dados de baja no cuentan en el plan. En Postal, los contactos dados de baja ocupan un lugar en el límite de contactos (en Gratis son 1.000; en Profesional, 5.000; en Escala, 50.000). Las direcciones en la lista de supresión no ocupan. Consulta Precios.
  • Deja desactivada la opción Disparar automatizaciones. Los contactos que ya existen se actualizan por el correo, las celdas vacías no borran valores, y cada archivo puede tener hasta 20 MB.
  • Antes de enviar, pasa la lista por la Verificación de correos.
9

Revisa lo que no tiene equivalente y pasa el tráfico

Cambia un flujo a la vez, con Loops todavía activo. Empieza por las direcciones de prueba y por ti mismo, compara entregas y rebotes en los primeros días y solo entonces pasa el resto.

Dominio verificadoPrueba en [email protected]Un flujo por PostalTodo el tráficoApagar Loops
Lo que cambia de forma, y cómo sortearlo
En LoopsQué hacer en Postal
Blocklist de direcciones y dominios (*@exemplo.com)Sin equivalente. En los formularios, la opción de validar el correo rechaza direcciones desechables y dominios que no reciben correo.
Bloques repetidos en dataVariablesArma el HTML de la lista en tu sistema.
addToAudience en el envíoCrea el contacto aparte o envía un evento con el contacto.
Adjuntos habilitados por el soporteDependen del plan: hasta 40 MB en total.
Correos en MJMLCompila a HTML.
Un solo endpoint de webhookEn Postal puede haber varios, según el plan.

Antes de cambiar la clave

  • El dominio está verificado en Postal y la clave de API está creada (solo envío y restringida al dominio, en los sistemas que solo envían).
  • El envío transaccional se reescribió y se probó con una dirección de prueba, y tu código guarda el id de cada correo.
  • Los correos transaccionales pasaron a ser plantillas publicadas, con las variables en el formato {{{nome}}}.
  • Quien envía por SMTP ahora manda el correo de verdad, y no el JSON de Loops.
  • Los eventos van a POST /events y las automatizaciones con el disparador de evento están activas.
  • El webhook se creó, la firma se comprueba con el secreto nuevo y llegó un evento de prueba.
  • La columna Subscribed se invirtió en Dado de baja, y los suprimidos están en la lista de supresión antes de la importación.
  • La importación se hizo sin disparar automatizaciones, y los flujos se revisaron antes de activarlos.
  • Tu código guarda de qué proveedor salió cada correo electrónico, y los rebotes se revisaron en los primeros días.

Preguntas frecuentes

¿Puedo seguir usando el SDK de Loops?

No para enviar por Postal: Postal no acepta el formato de Loops. Cambia las llamadas por el SDK de Postal (Node.js, PHP y Laravel) o por HTTP, a POST /emails y POST /events.

¿Mis workflows migran solos?

No. Los disparadores y los nodos tienen correspondiente en Postal, pero cada flujo se arma de nuevo en el editor de Automatizaciones. Aprovecha para revisar lo que todavía tiene sentido.

¿Cambia el código que verifica la firma de los webhooks?

En general, solo el secreto. Las dos documentaciones describen los mismos encabezados y el mismo HMAC-SHA256 de id.timestamp.corpo. Prueba con el evento de prueba del panel antes de cambiar el tráfico. Lo que cambia son los nombres y el cuerpo de los eventos.

¿Puedo mantener el dominio en ambos al mismo tiempo?

Sí. Loops usa el subdominio envelope para el SPF y el MX, y Postal usa el subdominio postal y el selector postal en el DKIM. Comprueba en la pantalla de registros de Loops si algún nombre de tu cuenta es igual antes de publicar.

¿Quieres probar Postal?

Crea tu cuenta y empieza con el plan Gratis.