Saltar al contenido principal
A partir de la pasarela 0.15.9, FireFlo también acepta mensajes por gRPC. Es el POST /secure/send de la API REST con un transporte binario: el mismo login, los mismos campos, la misma tarificación y el mismo cargo, la misma aprobación de sender ID y de plantilla, la misma comprobación de enrutamiento, la misma regla de reintento con client_ref y el mismo límite de tasa por cuenta. Una vez aceptado, un mensaje enviado por gRPC es indistinguible de uno enviado por REST. Añade una cosa que REST no tiene: un feed de acuses. Pida acuses sin indicar un webhook y le esperan en una cola duradera que usted lee por la misma conexión, sin necesidad de mantener un endpoint propio.
gRPC está desactivado salvo que su proveedor lo active. Una pasarela que no se ha configurado para ello responde a cada llamada UNAVAILABLE con el código de error GRPC_DISABLED. Si ve eso, la API existe pero no está habilitada en la plataforma a la que llama: pida a su proveedor la dirección gRPC.

Cuándo elegirla

Una petición son unas pocas decenas de bytes de protobuf en lugar de un cuerpo JSON, y SendStream envía muchos mensajes en un solo stream sin esperar cada respuesta. Ninguna de las dos cosas cambia lo que se le permite enviar ni a qué velocidad: REST y gRPC comparten el límite de mensajes por segundo de su cuenta, así que pasar tráfico de uno a otro no le da más. SMPP sigue siendo la tercera vía de entrada, y es independiente de ambas: consulte Binding.

Tres servicios

Conectarse

Su proveedor le da un host y un puerto. En una pasarela sin nada delante, el puerto suele ser 8090; detrás del proxy TLS de un proveedor, a menudo es 443. gRPC necesita HTTP/2 en todo el recorrido. Si las llamadas fallan en el nivel de transporte antes de que la pasarela responda, algo entre usted y ella está hablando HTTP/1.1.
Mantenga el keepalive de su cliente en 30 segundos o más. La pasarela acepta un ping del cliente como mucho cada 20 segundos; un cliente que hace ping con más frecuencia es desconectado por el transporte (GOAWAY con too_many_pings). La mayoría de las bibliotecas no envían pings de keepalive salvo que se les indique, lo cual está bien.

El contrato

El contrato es un único archivo, fireflo.proto, paquete protobuf fireflo.v1. Se reproduce completo en El archivo proto. Está congelado desde la 0.15.9 igual que lo está la API REST: los números de campo nunca se reutilizan ni se renumeran, nada se elimina, y las novedades llegan como nuevos campos opcionales, nuevos mensajes y nuevos métodos. Un cliente generado a partir del archivo de la 0.15.9 sigue funcionando con cada pasarela posterior; simplemente no ve lo que se añadió después.

Obtener el proto

Cualquiera de estas vías le da el mismo archivo:
  • Desde la propia pasarela. La reflexión del servidor está activada por defecto, así que una herramienta que la hable no necesita ningún archivo:
    Puede que su proveedor haya desactivado la reflexión; en ese caso use una de las otras dos.
  • Desde este sitio: El archivo proto, para copiarlo o descargarlo.
  • Desde su proveedor, como fireflo.proto.
Genere un cliente con las herramientas habituales de su lenguaje: protoc con el plugin de gRPC, buf generate, python -m grpc_tools.protoc, o el plugin de protobuf para Gradle o Maven. El archivo define go_package (fireflo/v1;fireflov1) y csharp_namespace (FireFlo.V1); en Java las clases generadas están en el paquete fireflo.v1. Solo importa google/protobuf/timestamp.proto, que incluye toda distribución de protobuf.

Límites que se aplican a cada llamada

Su proveedor puede cambiar cada uno de ellos; las cifras anteriores son los valores por defecto.

Adónde ir después

Autenticación y sesiones

Inicie sesión una vez, lleve el token y vuelva a iniciar sesión ante SESSION_EXPIRED.

Enviar mensajes

Send y SendStream, cada campo junto a su nombre REST.

Errores y códigos de estado

Estado REST, código gRPC, código de error y qué hacer.

Acuses de entrega por gRPC

Subscribe, Pull y Ack, al menos una vez.

Ejemplos

grpcurl, Python, Java y Go.

El archivo proto

El contrato completo.