From 3d588210598ea618c36409baa31c2bde7a608b1f Mon Sep 17 00:00:00 2001 From: Tiago Date: Tue, 29 Sep 2026 15:18:01 -0300 Subject: [PATCH] Send bridge replies with GET callback --- .../integracao/ExternalBridgeHandler.java | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/seconectai/condocontab/integracao/ExternalBridgeHandler.java b/src/main/java/com/seconectai/condocontab/integracao/ExternalBridgeHandler.java index b450df2..9586cc3 100644 --- a/src/main/java/com/seconectai/condocontab/integracao/ExternalBridgeHandler.java +++ b/src/main/java/com/seconectai/condocontab/integracao/ExternalBridgeHandler.java @@ -16,6 +16,7 @@ import javax.crypto.spec.SecretKeySpec; import java.io.IOException; import java.net.InetAddress; import java.net.URI; +import java.net.URLEncoder; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; @@ -164,23 +165,39 @@ public final class ExternalBridgeHandler implements HttpHandler { if(url.isBlank())return false; try{ validarCallbackUrl(url); - Map payload=new LinkedHashMap<>(); - payload.put("mensagem_id",envio.get("id")); - payload.put("resposta_id",respostaId); - payload.put("empresa_id",envio.get("empresa_id")); - payload.put("sistema_externo",envio.get("sistema_externo")); - payload.put("referencia_externa",envio.get("referencia_externa")); - payload.put("telefone",numero); - payload.put("resposta",texto); - String body=Json.write(payload); - HttpRequest.Builder req=HttpRequest.newBuilder(URI.create(url)).timeout(Duration.ofSeconds(15)).header("Content-Type","application/json"); + Map params=new LinkedHashMap<>(); + params.put("mensagem_id", str(envio.get("id"))); + params.put("resposta_id", String.valueOf(respostaId)); + params.put("empresa_id", str(envio.get("empresa_id"))); + params.put("sistema_externo", str(envio.get("sistema_externo"))); + params.put("referencia_externa", str(envio.get("referencia_externa"))); + params.put("telefone", numero); + params.put("resposta", texto); + String target = appendQuery(url, params); + HttpRequest.Builder req=HttpRequest.newBuilder(URI.create(target)).timeout(Duration.ofSeconds(15)).GET(); String secret=str(envio.get("callback_secret")); - if(!secret.isBlank())req.header("X-Seconectai-Signature", hmac(secret, body)); - HttpResponse resp=httpClient.send(req.POST(HttpRequest.BodyPublishers.ofString(body)).build(),HttpResponse.BodyHandlers.ofString()); + if(!secret.isBlank())req.header("X-Seconectai-Signature", hmac(secret, target)); + HttpResponse resp=httpClient.send(req.build(),HttpResponse.BodyHandlers.ofString()); return resp.statusCode()>=200&&resp.statusCode()<300; }catch(Exception e){System.err.println("Falha callback integracao: "+e.getMessage());return false;} } + private String appendQuery(String url, Map params) { + StringBuilder out = new StringBuilder(url); + out.append(url.contains("?") ? "&" : "?"); + boolean first = true; + for (Map.Entry e : params.entrySet()) { + if (!first) out.append('&'); + first = false; + out.append(enc(e.getKey())).append('=').append(enc(e.getValue())); + } + return out.toString(); + } + + private String enc(String value) { + return URLEncoder.encode(value == null ? "" : value, StandardCharsets.UTF_8); + } + private void validarWebhookEvolution(HttpExchange ex) { String recebido = ex.getRequestHeaders().getFirst("X-Webhook-Secret"); if (webhookSecret == null || webhookSecret.isBlank() || recebido == null || !MessageDigest.isEqual(webhookSecret.getBytes(StandardCharsets.UTF_8), recebido.getBytes(StandardCharsets.UTF_8))) {