SDR com inteligencia artificial. Gerencie leads, envie mensagens via WhatsApp e RCS, configure webhooks e qualifique prospects via API.
Todas as requisições devem incluir o header Authorization com um token Bearer obtido no painel do SDRBOT.ai.
https://sdrbot.ai/api/v1
Authorization: Bearer SEU_TOKEN_AQUI
| Codigo HTTP | Descrição |
|---|---|
200 |
Sucesso |
201 |
Recurso criado com sucesso |
400 |
Requisicao inválida (parâmetros faltando ou incorretos) |
401 |
Nao autorizado (token invalido ou ausente) |
403 |
Proibido (sem permissao para o recurso) |
404 |
Recurso nao encontrado |
422 |
Entidade nao processavel (validacao falhou) |
429 |
Rate limit excedido |
500 |
Erro interno do servidor |
{
"error": true,
"message": "Descrição do erro",
"errors": {
"campo": ["Mensagem de validacao"]
}
}
| Limite | Valor |
|---|---|
| Requisicoes por minuto | 60 |
| Requisicoes por dia | 10.000 |
Quando o rate limit e excedido, a API retorna 429 Too Many Requests com o header Retry-After indicando quantos segundos aguardar.
Retorna a lista paginada de leads.
| Parâmetro | Tipo | Descrição |
|---|---|---|
page |
int | Numero da pagina (default: 1) |
per_page |
int | Itens por pagina (default: 20, max: 100) |
status |
string | Filtrar por status: novo, qualificado, descartado, convertido |
search |
string | Busca por nome, email ou telefone |
curl -X GET "https://sdrbot.ai/api/v1/leads?page=1&per_page=20&status=qualificado" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Accept: application/json"
import requests
url = "https://sdrbot.ai/api/v1/leads"
headers = {
"Authorization": "Bearer SEU_TOKEN_AQUI",
"Accept": "application/json"
}
params = {
"page": 1,
"per_page": 20,
"status": "qualificado"
}
response = requests.get(url, headers=headers, params=params)
data = response.json()
print(data)
const response = await fetch('https://sdrbot.ai/api/v1/leads?page=1&per_page=20&status=qualificado', {
method: 'GET',
headers: {
'Authorization': 'Bearer SEU_TOKEN_AQUI',
'Accept': 'application/json'
}
});
const data = await response.json();
console.log(data);
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://sdrbot.ai/api/v1/leads?page=1&per_page=20&status=qualificado');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_TOKEN_AQUI',
'Accept: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_AQUI");
client.DefaultRequestHeaders.Add("Accept", "application/json");
var response = await client.GetAsync("https://sdrbot.ai/api/v1/leads?page=1&per_page=20&status=qualificado");
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
{
"data": [
{
"id": 1234,
"name": "Joao Silva",
"email": "joao@empresa.com",
"phone": "5551999999999",
"company": "Empresa LTDA",
"status": "qualificado",
"score": 85,
"tags": ["hot-lead", "saas"],
"custom_fields": {
"cargo": "Diretor de TI",
"origem": "site"
},
"created_at": "2026-01-10T14:30:00Z",
"updated_at": "2026-01-15T09:20:00Z"
}
],
"meta": {
"current_page": 1,
"per_page": 20,
"total": 150,
"last_page": 8
}
}
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name |
string | Sim | Nome do lead |
email |
string | Nao | Email do lead |
phone |
string | Sim | Telefone com código do pais (ex: 5551999999999) |
company |
string | Nao | Nome da empresa |
status |
string | Nao | Status inicial: novo (default), qualificado, descartado, convertido |
tags |
array | Nao | Lista de tags |
custom_fields |
object | Nao | Campos personalizados (chave-valor) |
curl -X POST "https://sdrbot.ai/api/v1/leads" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"name": "Maria Santos",
"email": "maria@empresa.com",
"phone": "5551888888888",
"company": "Tech Solutions",
"status": "novo",
"tags": ["inbound", "trial"],
"custom_fields": {
"cargo": "CEO",
"origem": "landing-page",
"segmento": "tecnologia"
}
}'
import requests
url = "https://sdrbot.ai/api/v1/leads"
headers = {
"Authorization": "Bearer SEU_TOKEN_AQUI",
"Content-Type": "application/json",
"Accept": "application/json"
}
payload = {
"name": "Maria Santos",
"email": "maria@empresa.com",
"phone": "5551888888888",
"company": "Tech Solutions",
"status": "novo",
"tags": ["inbound", "trial"],
"custom_fields": {
"cargo": "CEO",
"origem": "landing-page",
"segmento": "tecnologia"
}
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const response = await fetch('https://sdrbot.ai/api/v1/leads', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_TOKEN_AQUI',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
name: 'Maria Santos',
email: 'maria@empresa.com',
phone: '5551888888888',
company: 'Tech Solutions',
status: 'novo',
tags: ['inbound', 'trial'],
custom_fields: {
cargo: 'CEO',
origem: 'landing-page',
segmento: 'tecnologia'
}
})
});
const data = await response.json();
console.log(data);
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://sdrbot.ai/api/v1/leads');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_TOKEN_AQUI',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'name' => 'Maria Santos',
'email' => 'maria@empresa.com',
'phone' => '5551888888888',
'company' => 'Tech Solutions',
'status' => 'novo',
'tags' => ['inbound', 'trial'],
'custom_fields' => [
'cargo' => 'CEO',
'origem' => 'landing-page',
'segmento' => 'tecnologia'
]
]));
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_AQUI");
client.DefaultRequestHeaders.Add("Accept", "application/json");
var payload = new {
name = "Maria Santos",
email = "maria@empresa.com",
phone = "5551888888888",
company = "Tech Solutions",
status = "novo",
tags = new[] { "inbound", "trial" },
custom_fields = new {
cargo = "CEO",
origem = "landing-page",
segmento = "tecnologia"
}
};
var json = System.Text.Json.JsonSerializer.Serialize(payload);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://sdrbot.ai/api/v1/leads", content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
{
"data": {
"id": 1235,
"name": "Maria Santos",
"email": "maria@empresa.com",
"phone": "5551888888888",
"company": "Tech Solutions",
"status": "novo",
"score": 0,
"tags": ["inbound", "trial"],
"custom_fields": {
"cargo": "CEO",
"origem": "landing-page",
"segmento": "tecnologia"
},
"created_at": "2026-03-26T10:00:00Z",
"updated_at": "2026-03-26T10:00:00Z"
}
}
Retorna os dados de um lead especifico pelo seu ID.
curl -X GET "https://sdrbot.ai/api/v1/leads/1234" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Accept: application/json"
import requests
url = "https://sdrbot.ai/api/v1/leads/1234"
headers = {
"Authorization": "Bearer SEU_TOKEN_AQUI",
"Accept": "application/json"
}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
const response = await fetch('https://sdrbot.ai/api/v1/leads/1234', {
method: 'GET',
headers: {
'Authorization': 'Bearer SEU_TOKEN_AQUI',
'Accept': 'application/json'
}
});
const data = await response.json();
console.log(data);
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://sdrbot.ai/api/v1/leads/1234');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_TOKEN_AQUI',
'Accept: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_AQUI");
client.DefaultRequestHeaders.Add("Accept", "application/json");
var response = await client.GetAsync("https://sdrbot.ai/api/v1/leads/1234");
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
{
"data": {
"id": 1234,
"name": "Joao Silva",
"email": "joao@empresa.com",
"phone": "5551999999999",
"company": "Empresa LTDA",
"status": "qualificado",
"score": 85,
"tags": ["hot-lead", "saas"],
"custom_fields": {
"cargo": "Diretor de TI",
"origem": "site"
},
"created_at": "2026-01-10T14:30:00Z",
"updated_at": "2026-01-15T09:20:00Z"
}
}
Mesmos parâmetros do POST, todos opcionais. Apenas os campos enviados serao atualizados.
curl -X PUT "https://sdrbot.ai/api/v1/leads/1234" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"status": "qualificado",
"tags": ["hot-lead", "saas", "enterprise"],
"custom_fields": {
"cargo": "CTO",
"orcamento": "50000"
}
}'
import requests
url = "https://sdrbot.ai/api/v1/leads/1234"
headers = {
"Authorization": "Bearer SEU_TOKEN_AQUI",
"Content-Type": "application/json",
"Accept": "application/json"
}
payload = {
"status": "qualificado",
"tags": ["hot-lead", "saas", "enterprise"],
"custom_fields": {
"cargo": "CTO",
"orcamento": "50000"
}
}
response = requests.put(url, json=payload, headers=headers)
print(response.json())
const response = await fetch('https://sdrbot.ai/api/v1/leads/1234', {
method: 'PUT',
headers: {
'Authorization': 'Bearer SEU_TOKEN_AQUI',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
status: 'qualificado',
tags: ['hot-lead', 'saas', 'enterprise'],
custom_fields: {
cargo: 'CTO',
orcamento: '50000'
}
})
});
const data = await response.json();
console.log(data);
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://sdrbot.ai/api/v1/leads/1234');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_TOKEN_AQUI',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'status' => 'qualificado',
'tags' => ['hot-lead', 'saas', 'enterprise'],
'custom_fields' => [
'cargo' => 'CTO',
'orcamento' => '50000'
]
]));
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response, true));
?>
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_AQUI");
client.DefaultRequestHeaders.Add("Accept", "application/json");
var payload = new {
status = "qualificado",
tags = new[] { "hot-lead", "saas", "enterprise" },
custom_fields = new {
cargo = "CTO",
orcamento = "50000"
}
};
var json = System.Text.Json.JsonSerializer.Serialize(payload);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
var response = await client.PutAsync("https://sdrbot.ai/api/v1/leads/1234", content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
{
"data": {
"id": 1234,
"name": "Joao Silva",
"email": "joao@empresa.com",
"phone": "5551999999999",
"company": "Empresa LTDA",
"status": "qualificado",
"score": 85,
"tags": ["hot-lead", "saas", "enterprise"],
"custom_fields": {
"cargo": "CTO",
"origem": "site",
"orcamento": "50000"
},
"created_at": "2026-01-10T14:30:00Z",
"updated_at": "2026-03-26T10:15:00Z"
}
}
curl -X DELETE "https://sdrbot.ai/api/v1/leads/1234" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Accept: application/json"
import requests
url = "https://sdrbot.ai/api/v1/leads/1234"
headers = {
"Authorization": "Bearer SEU_TOKEN_AQUI",
"Accept": "application/json"
}
response = requests.delete(url, headers=headers)
print(response.status_code) # 204
const response = await fetch('https://sdrbot.ai/api/v1/leads/1234', {
method: 'DELETE',
headers: {
'Authorization': 'Bearer SEU_TOKEN_AQUI',
'Accept': 'application/json'
}
});
console.log(response.status); // 204
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://sdrbot.ai/api/v1/leads/1234');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_TOKEN_AQUI',
'Accept: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode; // 204
?>
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer SEU_TOKEN_AQUI");
client.DefaultRequestHeaders.Add("Accept", "application/json");
var response = await client.DeleteAsync("https://sdrbot.ai/api/v1/leads/1234");
Console.WriteLine(response.StatusCode); // NoContent (204)
Retorna status 204 sem corpo na resposta.
Envia mensagens via WhatsApp Business API. Suporta texto livre, templates pre-aprovados e imagens.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
to |
string | Sim | Numero do destinatario com código do pais (ex: 5551999999999) |
type |
string | Sim | Tipo da mensagem: text, template, image |
text |
string | Condicional | Texto da mensagem (obrigatório quando type=text) |
template_name |
string | Condicional | Nome do template (obrigatório quando type=template) |
template_params |
array | Nao | Parâmetros do template, em ordem |
template_language |
string | Nao | Idioma do template (default: pt_BR) |
image_url |
string | Condicional | URL da imagem (obrigatório quando type=image) |
caption |
string | Nao | Legenda da imagem |
lead_id |
int | Nao | ID do lead associado |
curl -X POST "https://sdrbot.ai/api/v1/messages/whatsapp" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"to": "5551999999999",
"type": "text",
"text": "Ola Joao! Tudo bem? Gostaria de agendar uma demonstracao do nosso produto.",
"lead_id": 1234
}'
curl -X POST "https://sdrbot.ai/api/v1/messages/whatsapp" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"to": "5551999999999",
"type": "template",
"template_name": "boas_vindas",
"template_params": ["Joao", "SDRBOT.ai"],
"template_language": "pt_BR",
"lead_id": 1234
}'
curl -X POST "https://sdrbot.ai/api/v1/messages/whatsapp" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"to": "5551999999999",
"type": "image",
"image_url": "https://seusite.com.br/img/proposta-comercial.png",
"caption": "Confira nossa proposta comercial personalizada!",
"lead_id": 1234
}'
{
"data": {
"id": "msg_abc123def456",
"to": "5551999999999",
"type": "text",
"status": "sent",
"lead_id": 1234,
"created_at": "2026-03-26T10:30:00Z"
}
}
Lista os templates aprovados disponiveis para envio de mensagens WhatsApp.
| Parâmetro | Tipo | Descrição |
|---|---|---|
page |
int | Numero da pagina (default: 1) |
per_page |
int | Itens por pagina (default: 20) |
status |
string | Filtrar por status: approved, pending, rejected |
curl -X GET "https://sdrbot.ai/api/v1/templates?status=approved" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Accept: application/json"
{
"data": [
{
"id": 10,
"name": "boas_vindas",
"language": "pt_BR",
"status": "approved",
"category": "MARKETING",
"body": "Ola 1! Bem-vindo ao 2. Estamos felizes em te-lo conosco.",
"params_count": 2,
"created_at": "2026-01-05T08:00:00Z"
},
{
"id": 11,
"name": "agendamento_demo",
"language": "pt_BR",
"status": "approved",
"category": "UTILITY",
"body": "Ola 1, sua demonstracao esta confirmada para 2 as 3. Ate la!",
"params_count": 3,
"created_at": "2026-01-10T10:00:00Z"
}
],
"meta": {
"current_page": 1,
"per_page": 20,
"total": 2,
"last_page": 1
}
}
Envia mensagens via RCS (Rich Communication Services). Suporta texto, cards, carousels, mensagens com resposta e localizacao.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
to |
string | Sim | Numero do destinatario com código do pais |
type |
string | Sim | Tipo: text, card, carousel, replyable_text, location |
lead_id |
int | Nao | ID do lead associado |
curl -X POST "https://sdrbot.ai/api/v1/messages/rcs" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"to": "5551999999999",
"type": "text",
"text": "Ola! Obrigado pelo seu interesse. Como posso ajudar?"
}'
curl -X POST "https://sdrbot.ai/api/v1/messages/rcs" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"to": "5551999999999",
"type": "card",
"card": {
"title": "Plano Empresarial",
"description": "Ideal para empresas com mais de 50 colaboradores. Inclui suporte prioritario e integração completa.",
"image_url": "https://seusite.com.br/img/plano-empresarial.jpg",
"buttons": [
{
"type": "url",
"text": "Ver detalhes",
"url": "https://seusite.com.br/planos/empresarial"
},
{
"type": "reply",
"text": "Quero contratar",
"payload": "contratar_empresarial"
}
]
},
"lead_id": 1234
}'
curl -X POST "https://sdrbot.ai/api/v1/messages/rcs" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"to": "5551999999999",
"type": "carousel",
"carousel": {
"cards": [
{
"title": "Plano Starter",
"description": "Para pequenas empresas. Ate 10 usuarios.",
"image_url": "https://seusite.com.br/img/plano-starter.jpg",
"buttons": [
{ "type": "reply", "text": "Saber mais", "payload": "info_starter" }
]
},
{
"title": "Plano Business",
"description": "Para empresas em crescimento. Ate 50 usuarios.",
"image_url": "https://seusite.com.br/img/plano-business.jpg",
"buttons": [
{ "type": "reply", "text": "Saber mais", "payload": "info_business" }
]
},
{
"title": "Plano Enterprise",
"description": "Para grandes empresas. Usuarios ilimitados.",
"image_url": "https://seusite.com.br/img/plano-enterprise.jpg",
"buttons": [
{ "type": "reply", "text": "Saber mais", "payload": "info_enterprise" }
]
}
]
},
"lead_id": 1234
}'
curl -X POST "https://sdrbot.ai/api/v1/messages/rcs" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"to": "5551999999999",
"type": "replyable_text",
"text": "Qual horario funciona melhor para uma demonstracao?",
"replies": [
{ "text": "Manha (9h-12h)", "payload": "horario_manha" },
{ "text": "Tarde (14h-17h)", "payload": "horario_tarde" },
{ "text": "Noite (18h-20h)", "payload": "horario_noite" }
],
"lead_id": 1234
}'
curl -X POST "https://sdrbot.ai/api/v1/messages/rcs" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"to": "5551999999999",
"type": "location",
"location": {
"latitude": -30.0346,
"longitude": -51.2177,
"label": "IAGENTE - Escritorio Porto Alegre",
"address": "Porto Alegre, RS, Brasil"
},
"lead_id": 1234
}'
{
"data": {
"id": "rcs_xyz789abc123",
"to": "5551999999999",
"type": "card",
"status": "sent",
"lead_id": 1234,
"created_at": "2026-03-26T11:00:00Z"
}
}
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
url |
string | Sim | URL de callback (HTTPS) |
events |
array | Sim | Lista de eventos para escutar |
secret |
string | Nao | Chave secreta para verificacao de assinatura |
active |
boolean | Nao | Ativar/desativar webhook (default: true) |
curl -X POST "https://sdrbot.ai/api/v1/webhooks" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"url": "https://seusite.com.br/webhooks/sdrbot",
"events": ["lead.created", "lead.updated", "message.sent", "message.delivered", "message.read"],
"secret": "sua_chave_secreta_aqui",
"active": true
}'
curl -X GET "https://sdrbot.ai/api/v1/webhooks" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Accept: application/json"
Mesmos parâmetros do POST, todos opcionais.
curl -X PUT "https://sdrbot.ai/api/v1/webhooks/5" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"events": ["lead.created", "lead.updated", "lead.deleted", "message.sent", "message.delivered", "message.read", "message.failed"],
"active": true
}'
curl -X DELETE "https://sdrbot.ai/api/v1/webhooks/5" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Accept: application/json"
| Evento | Descrição |
|---|---|
lead.created |
Novo lead criado |
lead.updated |
Lead atualizado |
lead.deleted |
Lead excluido |
lead.qualified |
Lead qualificado pela IA |
lead.converted |
Lead convertido em cliente |
message.sent |
Mensagem enviada |
message.delivered |
Mensagem entregue |
message.read |
Mensagem lida |
message.failed |
Falha no envio da mensagem |
message.received |
Mensagem recebida do lead |
POST https://seusite.com.br/webhooks/sdrbot
Headers:
Content-Type: application/json
X-SDRBOT-Signature: sha256=abc123def456...
X-SDRBOT-Event: lead.qualified
X-SDRBOT-Delivery: evt_789xyz
Body:
{
"event": "lead.qualified",
"timestamp": "2026-03-26T10:30:00Z",
"data": {
"id": 1234,
"name": "Joao Silva",
"email": "joao@empresa.com",
"phone": "5551999999999",
"company": "Empresa LTDA",
"status": "qualificado",
"score": 85,
"tags": ["hot-lead", "saas"],
"qualification_reason": "Lead demonstrou alto interesse, respondeu em menos de 5 minutos e solicitou demonstracao."
}
}
Se voce configurou um secret no webhook, cada requisição incluira o header X-SDRBOT-Signature com uma assinatura HMAC-SHA256 do corpo da requisição. Verifique a assinatura para garantir que a requisição e autentica.
<?php
$secret = 'sua_chave_secreta_aqui';
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_SDRBOT_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
echo json_encode(['error' => 'Assinatura invalida']);
exit;
}
// Assinatura válida - processar o webhook
$data = json_decode($payload, true);
$event = $_SERVER['HTTP_X_SDRBOT_EVENT'] ?? '';
switch ($event) {
case 'lead.created':
// Processar novo lead
break;
case 'lead.qualified':
// Processar lead qualificado
break;
case 'message.received':
// Processar mensagem recebida
break;
}
http_response_code(200);
echo json_encode(['ok' => true]);
?>
import hmac
import hashlib
import json
from flask import Flask, request, jsonify
app = Flask(__name__)
SECRET = 'sua_chave_secreta_aqui'
@app.route('/webhooks/sdrbot', methods=['POST'])
def handle_webhook():
payload = request.get_data()
signature = request.headers.get('X-SDRBOT-Signature', '')
expected = 'sha256=' + hmac.new(
SECRET.encode(),
payload,
hashlib.sha256
).hexdigest()
if not hmac.compare_digest(expected, signature):
return jsonify({'error': 'Assinatura invalida'}), 401
data = json.loads(payload)
event = request.headers.get('X-SDRBOT-Event', '')
if event == 'lead.created':
# Processar novo lead
pass
elif event == 'lead.qualified':
# Processar lead qualificado
pass
elif event == 'message.received':
# Processar mensagem recebida
pass
return jsonify({'ok': True}), 200
const crypto = require('crypto');
const express = require('express');
const app = express();
const SECRET = 'sua_chave_secreta_aqui';
app.post('/webhooks/sdrbot', express.raw({ type: 'application/json' }), (req, res) => {
const payload = req.body;
const signature = req.headers['x-sdrbot-signature'] || '';
const expected = 'sha256=' + crypto
.createHmac('sha256', SECRET)
.update(payload)
.digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature))) {
return res.status(401).json({ error: 'Assinatura invalida' });
}
const data = JSON.parse(payload);
const event = req.headers['x-sdrbot-event'] || '';
switch (event) {
case 'lead.created':
// Processar novo lead
break;
case 'lead.qualified':
// Processar lead qualificado
break;
case 'message.received':
// Processar mensagem recebida
break;
}
res.json({ ok: true });
});
using System.Security.Cryptography;
using System.Text;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("webhooks/sdrbot")]
public class SdrbotWebhookController : ControllerBase
{
private const string Secret = "sua_chave_secreta_aqui";
[HttpPost]
public IActionResult HandleWebhook()
{
using var reader = new StreamReader(Request.Body);
var payload = reader.ReadToEndAsync().Result;
var signature = Request.Headers["X-SDRBOT-Signature"].ToString();
using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(Secret));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(payload));
var expected = "sha256=" + BitConverter.ToString(hash).Replace("-", "").ToLower();
if (!CryptographicOperations.FixedTimeEquals(
Encoding.UTF8.GetBytes(expected),
Encoding.UTF8.GetBytes(signature)))
{
return Unauthorized(new { error = "Assinatura invalida" });
}
var eventType = Request.Headers["X-SDRBOT-Event"].ToString();
switch (eventType)
{
case "lead.created":
// Processar novo lead
break;
case "lead.qualified":
// Processar lead qualificado
break;
case "message.received":
// Processar mensagem recebida
break;
}
return Ok(new { ok = true });
}
}
Precisa de ajuda? Entre em contato com nosso suporte tecnico pelo WhatsApp ou acesse a Central de Ajuda.