Saltar para o conteúdo principal
Todos os exemplos abaixo usam só o fireflo.proto e a biblioteca gRPC padrão da sua linguagem. Troque sms.example.com:8090 pelo endereço que seu provedor te passar, e mantenha a senha fora do seu código — os exemplos a leem de SMS_PASSWORD.
Os exemplos conectam sem TLS (-plaintext, um canal inseguro), como você faria com um gateway numa rede privada. Se seu provedor te passar um endereço TLS — muitas vezes na porta 443 — use um canal seguro; cada seção mostra a mudança de uma linha.

grpcurl

Com a server reflection, o grpcurl não precisa de arquivo proto. Se seu provedor desligou a reflection, adicione -proto fireflo.proto a cada comando.
Com TLS, tire o -plaintext. Uma recusa imprime o código e a mensagem gRPC; adicione -v para ver os trailers, incluindo o detalhe do erro.

Python (grpcio)

Gere os stubs uma vez:

Login, o wrapper de re-login e Send

SendStream

Recibos: Pull, ou Subscribe

Um Subscribe que termina com SESSION_EXPIRED ou UNAVAILABLE é reaberto depois de um Login novo; o que você não tinha confirmado é entregue de novo.

Java (grpc-java)

Gere com o plugin protobuf do Gradle ou do Maven e o plugin protoc-gen-grpc-java; as classes ficam no pacote fireflo.v1. Você precisa de grpc-netty-shaded (ou outro transporte), grpc-protobuf e grpc-stub.

Login, o wrapper de re-login e Send

Numa StatusRuntimeException vinda de sendOne, leia errorDetail(e): em OUTCOME_UNKNOWN repita só com o mesmo clientRef; quando d.hasRetryAfterSeconds(), espere esse tempo e repita; caso contrário, corrija a requisição.

SendStream

onNext roda nas threads do próprio gRPC, então os resultados são lidos enquanto você escreve. Para um lote muito grande, verifique isReady() num ClientCallStreamObserver (ou use ClientResponseObserver) antes de cada escrita, para que seu processo não acumule em buffer o que o gateway ainda não está lendo.

Recibos com Pull

Go (grpc-go)

Gere com protoc --go_out=. --go-grpc_out=. fireflo.proto (plugins protoc-gen-go e protoc-gen-go-grpc). O nome do pacote é fireflov1; o caminho de import depende do seu módulo e das configurações de --go_opt.

Login, o wrapper de re-login e Send

Campos opcionais do proto são ponteiros em Go: defina-os com proto.String, proto.Bool e proto.Int32, e leia-os com os métodos Get… gerados.

Recibos com Subscribe

Relacionados

Erros e códigos de status

O que cada recusa significa, e quais repetir.

O arquivo proto

O contrato a partir do qual estes exemplos são gerados.