Indicados para notificações, lembretes e comunicação recorrente com clientes em volume moderado.
Para integrações com maior volume de mensagens e automações mais intensas.
Abaixo seguem exemplos reais de como realizar chamadas para o endpoint da API usando cURL e também via Oracle Database (UTL_HTTP).
curl --location 'https://n8n.hlgcloud.com.br/webhook-test/whatsapp-api' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --user 'api-user-demo:SenhaSuperSecreta123' \ --data-urlencode 'telefone=+559999999999' \ --data-urlencode 'mensagem=Olá! Esta é uma mensagem enviada pela API de WhatsApp do HLG Cloud.'
-- Neste exemplo esta foi configurado wallet em /u01/app/oracle/wallet/ -- Necessário liberação de ACL set define off CREATE OR REPLACE PROCEDURE prc_send_whatsapp( p_tel IN VARCHAR2, -- exemplo: +5516992267482 p_msg IN VARCHAR2, -- mensagem com acentos até 2000 caracteres p_user IN VARCHAR2, -- usuário do BasicAuth p_pass IN VARCHAR2 -- senha do BasicAuth ) AS v_req UTL_HTTP.req; v_resp UTL_HTTP.resp; v_url VARCHAR2(4000) := 'https://n8n.hlgcloud.com.br/webhook/whatsapp-api'; v_msg_enc VARCHAR2(32767); v_body VARCHAR2(32767); v_raw RAW(32767); v_result VARCHAR2(32767); v_len PLS_INTEGER; l_resp_open BOOLEAN := FALSE; -- URL-encode em UTF-8 FUNCTION url_encode_form(p_str IN VARCHAR2) RETURN VARCHAR2 IS v_raw RAW(32767); v_len_bytes PLS_INTEGER; v_pos PLS_INTEGER := 1; v_byte_raw RAW(1); v_byte_num PLS_INTEGER; v_hex VARCHAR2(2); v_out VARCHAR2(32767) := ''; BEGIN v_raw := UTL_RAW.cast_to_raw(CONVERT(p_str, 'AL32UTF8')); v_len_bytes := UTL_RAW.length(v_raw); WHILE v_pos <= v_len_bytes LOOP v_byte_raw := UTL_RAW.substr(v_raw, v_pos, 1); v_byte_num := TO_NUMBER(RAWTOHEX(v_byte_raw), 'XX'); IF v_byte_num = 32 THEN v_out := v_out || '+'; ELSIF (v_byte_num BETWEEN 48 AND 57) -- 0-9 OR (v_byte_num BETWEEN 65 AND 90) -- A-Z OR (v_byte_num BETWEEN 97 AND 122) -- a-z OR v_byte_num IN (45,46,95,126) THEN -- - . _ ~ v_out := v_out || CHR(v_byte_num); ELSE v_out := v_out || '%' || RAWTOHEX(v_byte_raw); END IF; v_pos := v_pos + 1; END LOOP; RETURN v_out; END; BEGIN IF p_tel IS NULL THEN RAISE_APPLICATION_ERROR(-20001, 'Telefone não informado.'); END IF; IF p_msg IS NULL THEN v_msg_enc := ''; ELSE v_msg_enc := url_encode_form(p_msg); END IF; v_body := 'telefone=' || p_tel || CHR(38) || 'mensagem=' || v_msg_enc; -- Converte o body para UTF-8 v_raw := UTL_RAW.cast_to_raw(CONVERT(v_body, 'AL32UTF8')); v_len := UTL_RAW.length(v_raw); -- Configura wallet UTL_HTTP.set_wallet('file:/u01/app/oracle/wallet/'); -- Inicia requisição v_req := UTL_HTTP.begin_request(url => v_url, method => 'POST'); UTL_HTTP.set_header(v_req, 'Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); UTL_HTTP.set_header(v_req, 'Content-Length', TO_CHAR(v_len)); -- cria BasicAuth seguro UTL_HTTP.set_header( v_req, 'Authorization', 'Basic ' || UTL_RAW.cast_to_varchar2( UTL_ENCODE.base64_encode( UTL_RAW.cast_to_raw(p_user || ':' || p_pass) ) ) ); UTL_HTTP.set_header(v_req, 'User-Agent', 'Oracle-UTL_HTTP'); -- Envia o corpo UTF-8 UTL_HTTP.write_raw(v_req, v_raw); -- Recebe a resposta v_resp := UTL_HTTP.get_response(v_req); l_resp_open := TRUE; DBMS_OUTPUT.put_line('STATUS: ' || v_resp.status_code); LOOP BEGIN UTL_HTTP.read_text(v_resp, v_result); DBMS_OUTPUT.put_line(v_result); EXCEPTION WHEN UTL_HTTP.end_of_body THEN EXIT; END; END LOOP; UTL_HTTP.end_response(v_resp); l_resp_open := FALSE; EXCEPTION WHEN OTHERS THEN BEGIN IF l_resp_open THEN UTL_HTTP.end_response(v_resp); END IF; EXCEPTION WHEN OTHERS THEN NULL; END; RAISE; END prc_send_whatsapp; / -- Para usar acentos o NLS_LANG deve permitir export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 BEGIN prc_send_whatsapp( p_tel => '+5516992267482', p_msg => 'Olá! Procedimento funcionando com coração.', p_user => 'api-whatsapp', p_pass => 'senhaApi' ); END; /