# wapp-api — exemplos de código Enviar uma mensagem de texto, nas quatro linguagens. A referência completa dos campos está em `docs/api.md`; anexos, em `docs/api-midia.md`. Três coisas valem para todas: - a chave vai no header **`X-API-Key`** e nunca no código — variável de ambiente ou arquivo de configuração fora do versionamento; - o corpo é JSON em **UTF-8**; mande `Content-Type: application/json; charset=utf-8` ou o acento chega corrompido; - o **201 é o enfileiramento, não o envio**. Quem envia é o worker, com intervalo entre mensagens. Acompanhe pelo `GET /api/mensagens/`. ## curl ```bash curl -X POST https://wapp-api.renatopavan.com.br/api/mensagens \ -H "X-API-Key: $WAPP_API_KEY" \ -H 'Content-Type: application/json; charset=utf-8' \ -d '{"instancia":"principal","numero":"(11) 99999-8888", "tipo":"texto","conteudo":"Seu boleto vence amanhã."}' ``` ## Python ```python import os import requests API = 'https://wapp-api.renatopavan.com.br' CABECALHOS = {'X-API-Key': os.environ['WAPP_API_KEY']} resposta = requests.post( f'{API}/api/mensagens', headers=CABECALHOS, json={ 'instancia': 'principal', 'numero': '(11) 99999-8888', 'tipo': 'texto', 'conteudo': 'Seu boleto vence amanhã.', }, timeout=20, ) resposta.raise_for_status() id_mensagem = resposta.json()['id'] # Acompanhar: na_fila -> enviado -> entregue -> lido situacao = requests.get(f'{API}/api/mensagens/{id_mensagem}', headers=CABECALHOS, timeout=20).json() print(situacao['status']) ``` ## PHP ```php 'principal', 'numero' => '(11) 99999-8888', 'tipo' => 'texto', 'conteudo' => 'Seu boleto vence amanhã.', ], JSON_UNESCAPED_UNICODE); $ch = curl_init('https://wapp-api.renatopavan.com.br/api/mensagens'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => $corpo, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 20, CURLOPT_HTTPHEADER => [ 'X-API-Key: ' . $chave, 'Content-Type: application/json; charset=utf-8', ], ]); $resposta = curl_exec($ch); $codigo = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($codigo !== 201) { throw new RuntimeException("wapp-api HTTP $codigo: $resposta"); } $dados = json_decode($resposta, true); echo $dados['id']; ``` ## Delphi (10.4 Sydney ou superior) `THTTPClient` e `System.JSON` são da RTL, sem componente de terceiro. ```pascal uses System.SysUtils, System.Classes, System.JSON, System.Net.HttpClient, System.Net.URLClient; function EnviarTexto(const Instancia, Numero, Texto: string): Integer; var Http: THTTPClient; Corpo: TJSONObject; Fluxo: TStringStream; Resposta: IHTTPResponse; Retorno: string; Json: TJSONObject; begin Http := THTTPClient.Create; try Corpo := TJSONObject.Create; try Corpo.AddPair('instancia', Instancia); Corpo.AddPair('numero', Numero); Corpo.AddPair('tipo', 'texto'); Corpo.AddPair('conteudo', Texto); // TEncoding.UTF8 explícito: sem isso o acento vai corrompido. Fluxo := TStringStream.Create(Corpo.ToJSON, TEncoding.UTF8); finally Corpo.Free; end; try Resposta := Http.Post( 'https://wapp-api.renatopavan.com.br/api/mensagens', Fluxo, nil, [TNameValuePair.Create('X-API-Key', GetEnvironmentVariable('WAPP_API_KEY')), TNameValuePair.Create('Content-Type', 'application/json; charset=utf-8')]); Retorno := Resposta.ContentAsString(TEncoding.UTF8); if Resposta.StatusCode <> 201 then raise Exception.CreateFmt('wapp-api HTTP %d: %s', [Resposta.StatusCode, Retorno]); Json := TJSONObject.ParseJSONValue(Retorno) as TJSONObject; try Result := Json.GetValue('id'); finally Json.Free; end; finally Fluxo.Free; end; finally Http.Free; end; end; ```