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/<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;