Escreva a integração como se o outro lado nunca falhasse. ERP, gateway, SEFAZ, CRM: quando um deles cai, o skail espera, tenta de novo e continua do ponto exato — sozinho.
Toda integração com sistema de terceiro é um ponto onde seu processo pode parar — quase sempre por algo fora do seu alcance.
Timeout, erro 500, rate limit, manutenção sem aviso. Não é uma questão de se vai acontecer — é de quando. E cada chamada é um ponto onde seu processo pode parar no meio.
Try/catch por toda parte, tabela de pendências, fila de reprocessamento, cron pra tentar de novo. A regra de negócio some no meio do código de recuperação.
Um webhook perdido, um update que não chegou — e cada sistema fica com uma verdade diferente. Reconciliar depois, na mão, é caro e ninguém confia no resultado.
Chame o outro sistema como se ele nunca falhasse. A falha, a espera e a repetição viram problema da plataforma — não do seu código.
Chamada falhou? O skail repete automaticamente, com intervalos crescentes, até passar. Sem try/catch, sem fila, sem cron.
O que já sincronizou não sincroniza de novo, mesmo com retry no meio do caminho. Sem cobrança duplicada, sem estoque furado.
O outro sistema caiu? O skail espera — por minutos ou horas, sem gastar CPU — e continua de onde parou quando ele voltar.
SEFAZ, ERP, CRM e gateway numa sequência só. Se qualquer um cair, o skail espera e continua do ponto exato — sem fila, sem tabela de pendências, sem cron.
[SkailFunction] public async SkailTask SincronizarPedidoAsync(Pedido pedido) { // cada chamada externa já vem com retry automático var nfe = await _sefaz.EmitirNFe(pedido); if (!nfe.Autorizada) return; await _erp.RegistrarFaturamento(pedido, nfe); await _crm.RegistrarVenda(pedido); // gateway fora do ar? o skail espera e retoma daqui await _gateway.ConfirmarRepasse(pedido); }
@skailFunction() async sincronizarPedido(pedido: Pedido): Promise<void> { // cada chamada externa já vem com retry automático const nfe = await this.sefaz.emitirNFe(pedido); if (!nfe.autorizada) return; await this.erp.registrarFaturamento(pedido, nfe); await this.crm.registrarVenda(pedido); // gateway fora do ar? o skail espera e retoma daqui await this.gateway.confirmarRepasse(pedido); }
Veja, ao vivo, como manter seus processos críticos rodando mesmo quando APIs, bancos ou serviços externos falham.