Webhook Eventos e avisos de liquidação
Tipos de eventos do comerciante Webhook, identidades de idempotência, campos de aviso de liquidação e exemplos de resultados de fundos.
Esta página segue Agent Java SDK WEBHOOKS.md no commit fa6c7b6. Esta é uma atualização apenas de documentação; nenhum novo artefato SDK contendo métodos auxiliares de aviso foi lançado.
Todos os quatro tipos de eventos usam o retorno de chamada configurado único do comerciante URL (agents.webhook_url). Despacho no corpo event; nenhum aviso separado URL é necessário. Os exemplos mostram a estrutura da carga útil e não devem ser usados para injetar dados em um ambiente de teste.
Eventos e idempotência
O evento de aviso do comerciante é liquidation.warning; o usuário WebSocket data.event permanece LIQUIDATION_WARNING. Mantenha os dois canais distintos.
Notificações históricas do comerciante usadas LIQUIDATION_WARNING. As cargas congeladas mantêm seu corpo original nas novas tentativas, portanto, os receptores devem reconhecer ambos os nomes. Se os registros comerciais existentes usarem um prefixo de chave de aviso em letras maiúsculas, retenha a chave original ou verifique ambas as chaves durante a migração para evitar processar a notificação novamente.
O WebhookVerifier.idempotencyKey atual apenas extrai orderType:orderId:targetStatus para eventos de fundos e retorna uma string vazia para cargas úteis de aviso. Nenhum novo artefato SDK contendo métodos auxiliares de aviso foi lançado com esta atualização de documentação. Continue usando o método verify existente para verificar o corpo do aviso bruto. Após as verificações de assinatura e propriedade, o código comercial do comerciante deve reconhecer ambos os nomes de eventos, validar se notificationId é uma string de número inteiro decimal positivo e construir liquidation.warning:<notificationId>. Nunca use uma chave de desduplicação vazia ou exija que avisos contenham campos de pedidos de fundos.
Persista a desduplicação no escopo do comerciante e environment e confirme-a atomicamente com o processamento de negócios. Notificações FIRST / UPGRADE / REMINDER com valores notificationId diferentes são independentes; não os descarte agrupando-os por usuário, episódio ou eventType. Uma chave vazia significa que uma identidade válida não pôde ser extraída. O SDK retorna apenas uma chave auxiliar; ele não persiste registros nem executa processamento comercial. Registrar a mesma identidade com corpo diferente como conflito; não substitua o corpo processado.
Campos de aviso de liquidação e exemplo
Exemplo de resultado de transferência
Os retornos de chamada de fundos mantêm seus tipos existentes: orderId e agentId são números JSON; amount e platformUserId são strings. Não aplique a convenção de string agentId do aviso para retornos de chamada de fundos. Leia números inteiros grandes sem perda de precisão usando tipos inteiros/decimais. completedAt é UTC RFC3339; ts são segundos Unix.
Exemplo de resultado de reversão
Exemplo de estado morto de pedido de fundos
Estes exemplos mostram apenas o protocolo. Para FAILED, rejectCode, rejectMessage e failReason refletem a rejeição real. O nome do evento por si só não prova que os fundos foram creditados.