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 Loops | En Postal | Cómo funciona en Postal |
|---|---|---|
| Contact (contacto) | Contacto | Cada 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 fecha | Propiedades: texto, número, sí/no y fecha | Los 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 Subscribed | Correo, nombre, apellido, ID externo y dado de baja | Source, User Group y Notes pasan a ser propiedades que creas. Subscribed pasa a ser lo inverso: Dado de baja. |
| Subscribed = false | Dado de baja | No 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ón | Direcciones 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 privadas | Temas, públicos o privados | Asuntos 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 segments | Segmentos dinámicos | Definidos 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) | Automatizaciones | Un disparador y pasos, en un editor de flujos. |
Transactional emails (transactionalId) | Plantillas enviadas por POST /emails | La plantilla guarda el HTML y, si quieres, el remitente y el asunto predeterminado. |
| Campaigns | Campañas | Envío a un segmento y, si quieres, solo a quienes están suscritos a un tema. |
| Preference Center | Página de preferencias | Se abre desde el enlace de cancelación de suscripción y lista los temas públicos. |
Email blocklist (patrones como *@exemplo.com) | Sin equivalente | La lista de supresión guarda direcciones, no patrones. |
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.
| En Loops | En Postal | |
|---|---|---|
| Subdominio | La documentación recomienda un subdominio, como mail.suaempresa.com, en lugar del dominio principal | También recomendado: un subdominio solo para correo |
| SPF y MX | En el subdominio envelope (por ejemplo, envelope.suaempresa.com) | MX y TXT en el subdominio postal |
| DKIM | Registros de la pantalla Settings, Domain, View records (los nombres no constan en la documentación) | TXT en postal._domainkey |
| DMARC | Loops proporciona un registro, y puedes mantener solo uno en el dominio principal | Opcional. El mismo _dmarc sirve para los dos |
| Cómo confirmar | Botón Verify Records. La propagación tarda hasta 72 horas, en general hasta 24 | Sola, 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.updatedcuando el dominio pasa averified. 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.
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.
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" }
}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" }
}
}| En Loops | En Postal | Qué cambia |
|---|---|---|
POST /v1/transactional | POST /emails | La clave va en Authorization: Bearer en ambos. En Postal empieza con ps_. |
email: una dirección | to: texto o lista de hasta 50 | Una 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. |
transactionalId | template.id: el ID o el alias | El 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úmero | template.variables: texto o número | Las 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, data | attachments: 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. |
addToAudience | Sin campo | Crea 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 409 | Idempotency-Key: de 1 a 256 caracteres | En 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 equipo | Por plan: Gratis 5, Profesional 10, Escala 20 y Empresarial 50 | En el lote, 100 correos electrónicos cuentan como una solicitud. Consulta Límites. |
Sin campos para cc, bcc, reply_to, etiquetas ni programación | cc, bcc, reply_to, headers, tags y scheduled_at | Añ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.
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.
{
"transactionalId": "clomzp89u635xl30px7wrl0ri",
"email": "[email protected]",
"dataVariables": { "loginUrl": "https://exemplo.com.br/entrar?code=482913" }
}- 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| SMTP de Loops | SMTP de Postal | |
|---|---|---|
| Servidor y puerto | smtp.loops.so, puerto 587 | smtp.postal.so, puerto 465 (TLS directo, recomendado) o 587 (STARTTLS). Si la red lo bloquea, 2465 o 2587 |
| Usuario y contraseña | loops y una clave de API de Loops | postal y una clave de API (ps_…). Basta una clave solo de envío |
| Cuerpo del mensaje | El JSON de arriba, con el transactionalId | El correo de verdad, en HTML y texto |
| Destinatario | El campo email del JSON | Los destinatarios del sobre, hasta 50 por mensaje |
| Modelo | El correo transaccional elegido por el transactionalId | El 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 deMail::to()pasa a valer. - En Postal, la autenticación (
AUTH PLAINoAUTH 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.
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.
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"
}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" }
}| En Loops | En Postal | Qué cambia |
|---|---|---|
eventName | name | Hasta 100 caracteres: letras, números, ., _, : y -. |
email o userId | contact: correo, ID o external_id:<id>, o un objeto | Postal busca el contacto por el ID, después por el external_id y después por el correo. Un correo nuevo crea el contacto. |
eventProperties | properties | Hasta 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 cuerpo | contact_properties | La propiedad debe existir, en ambos lados. |
mailingLists: {id: true} o false | Sin campo | El 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 existe | POST /contacts/batch: crea o actualiza, hasta 10.000 por llamada | Busca el contacto por el ID, por el external_id y por el correo. Para un solo contacto ya existente, PATCH /contacts/{id}. |
subscribed | unsubscribed | Lo inverso: subscribed: false pasa a ser unsubscribed: true. |
- Un evento sin
contactqueda registrado, pero no inicia automatizaciones. Con un correo nuevo, Postal crea el contacto, avisa al webhookcontact.createde 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.
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.
| En Loops | En Postal | Observación |
|---|---|---|
| Disparador Contact added | contact.created | Los 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 updated | contact.property_changed | Con la propiedad y, si quieres, el valor de antes (from) y el de después (to). |
| Disparador Contact added to list | topic.subscribed o segment.added | Depende de si la lista pasó a ser un tema o un segmento. |
| Disparador Event received | event | Con hasta 10 filtros sobre las propiedades del evento. |
| Nodo Email | Paso send_email | Envía una plantilla publicada. Con detect_replies, Postal detecta las respuestas. |
| Nodo Timer | Paso wait | Espera de minutos a semanas, o hasta un día y una hora, con zona horaria. |
| Nodo Audience filter | Paso condition | La 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 Branch | Paso condition | Postal lo divide en Sí y No; para más caminos, encadena condiciones. |
| Nodo Experiment | Paso experiment | Prueba A/B entre 2 y 4 variantes, en los planes que la incluyen. |
| Sin equivalente en Loops | wait_for, update_contact y webhook | Pasos 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, usaevery_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.
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.
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" }]
}| En Loops | En Postal | Observació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 elementos | Sin equivalente | Cada 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 MJML | HTML | Compila el MJML a HTML antes de pegarlo. |
- Los nombres de las variables admiten letras, números y
_, hasta 50 caracteres. Declara envariableslas 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.
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.
| Evento de Loops | Evento de Postal | Observación |
|---|---|---|
email.delivered | email.delivered | |
email.softBounced | email.bounced | data.bounce.type es Transient. |
email.hardBounced | email.bounced | data.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.spamReported | email.complained | La dirección entra en la lista de supresión. |
email.opened, email.clicked | email.opened, email.clicked | Solo con el rastreo activado en el dominio. En Loops, no existen para correos transaccionales. |
email.unsubscribed, email.resubscribed | contact.updated | La baja de un contacto de marketing genera contact.updated. |
contact.created, contact.deleted | contact.created, contact.deleted | Vienen con el contacto y el origen del cambio (source). |
contact.unsubscribed | contact.updated | Con unsubscribed verdadero en el contacto. |
contact.mailingList.subscribed, .unsubscribed | Sin evento propio documentado | Los temas de Postal no tienen un evento con ese nombre. |
campaign.email.sent, loop.email.sent, transactional.email.sent | email.sent | Aproximado: uno por correo. Si salió de una campaña, data.broadcast_id indica cuál. |
testing.testEvent | Evento de prueba del panel | Envía uno antes de cambiar el tráfico. |
| En Loops | En Postal | Observación |
|---|---|---|
| Un endpoint por cuenta | Varios endpoints, según el plan | Cada 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-Signature | Los 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 segundos | Hasta 8 intentos en cerca de 27 horas, respuesta 2xx en hasta 15 segundos | Todos 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ías | Desactiva el endpoint tras fallos seguidos (disabled_reason: "failing") | Revisa el estado del webhook en los primeros días. |
| Historial de 30 días | Historial de 30 días | Panel y GET /webhooks/{id}/events. |
- Crea el endpoint en Webhooks (panel o
POST /webhooks), elige los eventos y guarda elsigning_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.
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.
Subscribed igual a verdadero.
Impórtalos como contactos.
Subscribed igual a falso. En Loops, un hard bounce también da de baja.
Impórtalos como dados de baja. Antes, separa los suprimidos.
Quien tuvo un hard bounce o se quejó: Loops bloquea el envío.
Ponlos en la lista de supresión.
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
simdonde Subscribed sea falso ynãodonde sea verdadero. O descarga dos archivos, filtrando por Subscribed, e importa el de los dados de baja consimen 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 conPOST /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-28funcionan. - 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.
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.
| En Loops | Qué 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 dataVariables | Arma el HTML de la lista en tu sistema. |
addToAudience en el envío | Crea el contacto aparte o envía un evento con el contacto. |
| Adjuntos habilitados por el soporte | Dependen del plan: hasta 40 MB en total. |
| Correos en MJML | Compila a HTML. |
| Un solo endpoint de webhook | En 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
idde 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 /eventsy 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.
Sigue por aquí
Automatizaciones
Mensajes que salen solos, en el momento justo.
Más informaciónAudiencia y segmentos
Contactos, etiquetas, temas y propiedades organizados.
Más informaciónWebhooks y eventos
Cada evento de correo electrónico en tu servidor, con firma y reintentos.
Más informaciónOtras guías de migración