Subscribe, o
sondeo, Pull) y elimina cada acuse con Ack. Ambas leen la misma cola.
Es la alternativa a mantener un endpoint de webhook: nada que exponer a
internet, nada contra lo que la pasarela tenga que reintentar, y los acuses se conservan hasta que los
tenga.
Qué acuses llegan al feed
Un acuse se encola para su login cuando se cumplen todas estas condiciones:- el mensaje lo envió su login HTTP, por gRPC o por REST;
- pidió acuses (
dlr: trueen gRPC,"dlr": "yes"en REST) y este acuse es uno de los que pidió (dlr_level:1progreso,2el resultado,3ambos); - no lleva
dlr_url.
dlr_url tiene sus acuses enviados a esa URL y nunca al
feed. Los mensajes enviados por SMPP nunca aparecen en él: reciben sus acuses en el bind.
Los envíos REST también pueden usar el feed. En una plataforma con gRPC y el feed activados, REST
acepta
"dlr": "yes" sin dlr_url, y esos acuses llegan aquí. Donde gRPC está desactivado, esa
petición REST se sigue rechazando con 400, porque los acuses no tendrían adónde ir. Consulte
POST /secure/send.UNKNOWN en el feed, como lo haría un webhook.
El mensaje Receipt
El cuerpo JSON del webhook, un campo por clave, más dos campos de entrega al final:
Los campos opcionales están ausentes, no vacíos, cuando no hay nada que decir. Todo lo que la
guía de acuses de entrega dice sobre
level, stat y err
se aplica sin cambios.
La entrega es al menos una vez
1
Un acuse sale de la cola solo cuando usted le hace Ack
O cuando la retención lo elimina: consulte Límites y retención.
2
Un acuse entregado queda reservado para usted durante 120 segundos
Si no se ha confirmado para entonces, se entrega de nuevo (al
Subscribe o Pull de su login que
lo pida a continuación) con delivery_count incrementado en uno.3
Un stream que termina devuelve sus acuses de inmediato
Cuando un stream
Subscribe termina (usted cancela, la conexión se corta, la pasarela se reinicia),
los acuses que había entregado y usted no había confirmado se liberan inmediatamente, no tras el
lease.Ack
already_gone no es un error. Un Ack repetido tras un timeout es seguro, que es justo cuando lo
repetirá. Más de 1000 tokens en una llamada es INVALID_ARGUMENT.
Un token funciona en cualquier nodo de la pasarela y a través de reinicios, pero solo para el login al
que se entregó. Agrupe sus confirmaciones: un Ack de 500 tokens es mucho más barato que 500 de uno.
Pull: sondeo
max acuses (como mucho 1000), del más antiguo al más reciente.
- Si no hay ninguno esperando y
wait_secondses mayor que 0, espera hasta ese tiempo (20 segundos como máximo) y vuelve en cuanto llega uno. Eso es un long poll, y es como se evita un bucle activo. - Con
wait_seconds: 0vuelve de inmediato, posiblemente vacío.
Pull conviene a un proceso por lotes, a un worker que despierta con un temporizador, o a un lenguaje
de cuyo soporte de streaming prefiera no depender.
Subscribe: streaming
window limita cuántos acuses entregados pero sin confirmar retiene el stream. Al llegar a la ventana,
el stream se pausa hasta que usted haga Ack, en cualquier canal. Sin establecer, o por encima del
máximo de la pasarela (1000 por defecto), se usa el máximo.
Varios lectores comparten la cola
Varios streamsSubscribe (y Pull) de un mismo login comparten la cola: cada acuse va exactamente
a uno de ellos a la vez. Úselo para repartir el procesamiento de acuses entre varios workers. Para dar
feeds separados a aplicaciones separadas, deles logins HTTP separados.
Orden
Mejor esfuerzo, por llegada. No hay garantía de orden entre nodos de la pasarela, y un acuse reentregado llega después de otros más nuevos. Un resultado puede llegar antes que un acuse de progreso del mismo mensaje. Ordene porlevel (2 es definitivo) y por done_date, nunca por llegada. Una vez que tiene un
acuse level: 2 para un mensaje, ignore cualquier level: 1 que llegue después.
Límites y retención
Su proveedor puede cambiar cada uno de ellos.
Relacionado
Ejemplos
Bucles de Subscribe, Pull y Ack en Python, Java y Go.
El webhook de acuses de entrega
Los mismos campos, enviados por POST a su URL.