Pular para o conteúdo principal

Feedback API

O Almirant expõe uma API REST pública (não MCP) para ingestão de feedback de widgets incorporados em sites ou de integrações servidor a servidor. Essa API é independente do servidor MCP e não exige uma API Key do Almirant.

Autenticação

A Feedback API usa um sistema de autenticação baseado em Public Keys e widget tokens:

  • Public Key (pk_...): identifica a fonte de feedback. Ela é obtida ao criar uma fonte de feedback no Almirant e pode ser exposta no frontend com segurança.
  • Widget Token: token temporário assinado, obtido pelo endpoint bootstrap. Tem duração limitada e é usado para validar as solicitações de ingestão.

Endpoints

GET /feedback/widget/bootstrap

Inicializa o widget de feedback. Retorna a configuração da fonte e um token temporário assinado necessário para enviar feedback.

Parâmetros de consulta:

NomeTipoObrigatórioDescrição
publicKeystringSimPublic Key da fonte de feedback (pk_...)

Exemplo de solicitação:

curl "https://api.almirant.ai/feedback/widget/bootstrap?publicKey=pk_abc123def456"

Resposta bem-sucedida (200):

{
"success": true,
"data": {
"source": {
"publicKey": "pk_abc123def456",
"type": "widget",
"name": "Web App Feedback"
},
"token": "eyJzb3VyY2VJZCI6Ii4uLiJ9.a1b2c3d4e5f6",
"expiresAt": 1708531200,
"config": {
"requireCaptcha": true
}
}
}

Erros:

CódigoDescrição
404Fonte de feedback não encontrada para a publicKey fornecida
403A origem (domínio) da solicitação não está na lista de domínios permitidos

POST /feedback/ingest

Envia um item de feedback. Exige o token obtido pelo endpoint bootstrap.

Cabeçalhos:

Content-Type: application/json

Corpo:

NomeTipoObrigatórioDescrição
publicKeystringSimPublic Key da fonte de feedback
tokenstringSimWidget token obtido de bootstrap
messagestringSimConteúdo do feedback (1 a 5000 caracteres)
categorystringNãoCategoria: bug, feature_request, improvement, question, praise, other
emailstringNãoE-mail do remetente
pageUrlstringNãoURL da página em que o feedback foi enviado
localestringNãoIdioma/locale do usuário
captchaTokenstringNãoToken do hCaptcha (obrigatório se a fonte tiver captcha habilitado)

Exemplo de solicitação:

curl -X POST "https://api.almirant.ai/feedback/ingest" \
-H "Content-Type: application/json" \
-d '{
"publicKey": "pk_abc123def456",
"token": "eyJzb3VyY2VJZCI6Ii4uLiJ9.a1b2c3d4e5f6",
"message": "O formulário de cadastro não valida e-mails corretamente",
"category": "bug",
"email": "[email protected]",
"pageUrl": "https://miapp.com/registro",
"locale": "es"
}'

Resposta bem-sucedida (201):

{
"success": true,
"data": {
"id": "fb-uuid-001",
"status": "new",
"createdAt": "2025-02-15T10:30:00.000Z"
}
}

Erros:

CódigoDescrição
400Token de captcha inválido ou ausente (quando o captcha é obrigatório)
401Widget token inválido ou expirado
403A origem (domínio) da solicitação não é permitida
404Fonte de feedback não encontrada
409Feedback duplicado detectado (mesmo conteúdo enviado recentemente)
429Limite de taxa excedido

Fluxo completo de integração

1. O widget é carregado na página do usuário
|
2. GET /feedback/widget/bootstrap?publicKey=pk_...
|-- Obtém token temporário + configuração
|
3. O usuário escreve o feedback e o envia
|
4. POST /feedback/ingest
|-- publicKey + token + message + metadata
|
5. O feedback aparece no Almirant como um item novo

Proteções

A API inclui as seguintes proteções:

  • Validação de origem: aceita solicitações somente dos domínios configurados na fonte de feedback (suporta curingas como *.midominio.com)
  • Widget tokens assinados: tokens HMAC-SHA256 com expiração temporária
  • Limitação de taxa: limita o número de solicitações por IP e fonte dentro de uma janela temporal
  • Desduplicação: detecta e rejeita feedback duplicado enviado recentemente (com base no hash SHA-256 do conteúdo normalizado)
  • hCaptcha: verificação de captcha opcional por fonte (habilitada por padrão)

Categorias de feedback

CategoriaDescrição
bugRelato de erro ou mau funcionamento
feature_requestSolicitação de nova funcionalidade
improvementSugestão de melhoria em funcionalidade existente
questionPergunta ou solicitação de informação
praiseComentário positivo
otherCategoria padrão quando não especificada

Integração servidor a servidor

Para integrações de backend (sem widget), o fluxo é o mesmo: primeiro chame bootstrap para obter um token e depois envie o feedback para ingest. A diferença é que você deve garantir que o domínio de origem esteja na lista de permitidos da fonte de feedback ou configurar a fonte sem restrições de domínio.

Vincular feedback a ideias

O feedback recebido pode ser vinculado a itens do Idea Hub usando a ferramenta MCP link_feedback_to_idea_item. Isso cria rastreabilidade entre o feedback dos usuários e as decisões de produto.