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-Keye 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-8ou 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/<id>.
curl
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
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
$chave = getenv('WAPP_API_KEY');
// JSON_UNESCAPED_UNICODE mantém o acento legível no corpo enviado.
$corpo = json_encode([
'instancia' => '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.
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<Integer>('id');
finally
Json.Free;
end;
finally
Fluxo.Free;
end;
finally
Http.Free;
end;
end;