Pular para o conteúdo
MarcommAI
Desenvolvedores

Conecte seus sistemas ao Marcomm AI

Leia resumos de notícias, notícias críticas e aprovações pendentes a partir dos seus próprios sistemas e aprove ou rejeite nas suas ferramentas de aprovação. A API está disponível no plano Team ou superior, após uma análise rápida.

Primeiros passos

  1. 1
    Peça acesso

    Descreva seu sistema e escolha os dados de que precisa. Cada pedido passa por análise.

  2. 2
    Crie uma chave

    Depois da aprovação, crie uma chave em Configurações > API. A chave aparece uma única vez, então guarde-a no seu sistema.

  3. 3
    Envie uma requisição

    Envie a chave no cabeçalho Authorization e chame um dos endpoints abaixo.

Exemplo de requisição

curl https://app.marcomm.works/api/v1/news/digest?days=7 \
  -H "Authorization: Bearer mc_live_..."

Autenticação

Envie sua chave como token Bearer em cada requisição. Uma chave pessoal age como a pessoa que a criou, então pode ler e decidir aprovações em nome dela. Uma chave do espaço de trabalho é criada por um administrador e só pode ler. As chaves podem expirar, ser limitadas a endereços IP e ser rotacionadas: depois da rotação, a chave antiga continua funcionando por 24 horas.

Escopos

Cada chave carrega apenas os escopos para os quais seu aplicativo foi aprovado.

news
Resumo de notícias, artigos e veículos.
crisis
Notícias críticas e incidentes de crise.
approvals
Aprovações pendentes e a aprovação ou rejeição delas com uma chave pessoal.
content
Leitura de press releases e posts de blog.

Endpoints

Os caminhos começam com /api/v1. Os endpoints de leitura usam GET e aceitam parâmetros de consulta. A resposta é um JSON no formato {"data": ...}.

MétodoCaminhoEscopoO que faz
GET/api/v1/news/digestnewsVolume de cobertura, sentimento e principais veículos de um período.
GET/api/v1/news/articlesnewsBusca na cobertura de notícias.
GET/api/v1/news/outletsnewsVeículos que cobrem suas empresas.
GET/api/v1/crisis/incidentscrisisIncidentes de crise e artigos críticos.
GET/api/v1/approvalsapprovalsPress releases e posts de blog aguardando o dono da chave, e os que o dono da chave pediu para aprovar.
GET/api/v1/press-releasescontentLista os press releases.
GET/api/v1/press-releases/{id}contentUm press release com o lead e o texto.
GET/api/v1/blog-postscontentLista os posts de blog.
GET/api/v1/blog-posts/{id}contentUm post de blog com o texto.
POST/api/v1/approvals/press-releases/{id}approvalsAprova ou rejeita um press release que aguarda o dono da chave.
POST/api/v1/approvals/blog-posts/{id}approvalsAprova ou rejeita um post de blog que aguarda o dono da chave.

Aprovar e rejeitar

Envie {"decision": "approve"} ou {"decision": "reject", "comment": "..."} para o item. Rejeitar exige um comentário. A decisão segue as mesmas regras do app e do Slack e fica registrada em nome do dono da chave. Quando o texto contém expressões que exigem confirmação, você recebe 409 confirmation_required com os avisos, e pode enviar a requisição de novo com "force": true.

curl -X POST https://app.marcomm.works/api/v1/approvals/press-releases/<id> \
  -H "Authorization: Bearer mc_live_..." \
  -H "Content-Type: application/json" \
  -d '{"decision":"reject","comment":"Please fix the headline."}'

Limites de requisições

Os limites são definidos por espaço de trabalho, por minuto e por dia (UTC). As respostas trazem os cabeçalhos abaixo. Ao passar do limite, você recebe 429 com Retry-After. Para aumentar um limite, peça o aumento em Configurações > API. Nossa equipe analisa o pedido.

X-RateLimit-Limit
Requisições permitidas por minuto.
X-RateLimit-Remaining
Requisições restantes no minuto atual.
X-RateLimit-Reset
Horário Unix em que a janela do minuto é reiniciada.
X-RateLimit-Day-Limit
Requisições permitidas por dia.
X-RateLimit-Day-Remaining
Requisições restantes hoje.
Retry-After
Segundos de espera antes de tentar de novo. Somente em 429.

Erros

Os erros retornam JSON no formato {"error": {"code": ..., "message": ...}}.

CódigoStatusSignificado
invalid_key401A chave está ausente, mal formada ou foi revogada.
expired401A chave expirou. Crie ou rotacione uma chave.
ip_denied403A chave está limitada a outros endereços IP.
plan_required403O espaço de trabalho não está no plano Team ou superior.
access_required403O acesso à API não foi aprovado para este espaço de trabalho.
suspended403O acesso à API deste espaço de trabalho está suspenso.
scope_denied403A chave não tem o escopo que este endpoint exige.
personal_key_required403Somente uma chave pessoal pode aprovar ou rejeitar.
denied403O papel do dono da chave não permite isso.
unknown_endpoint404Esse endpoint não existe.
comment_required400É preciso informar um motivo para rejeitar.
confirmation_required409Os avisos precisam de confirmação. Reenvie com force definido como true.
rate_limited429O limite por minuto foi excedido.
daily_limit429O limite diário foi atingido.

Webhooks

Alertas, pedidos de aprovação e o briefing da manhã também podem ser enviados ao seu sistema. Adicione um destino em Configurações > API > Webhooks. Cada requisição é um JSON com os campos event (alert, approval ou briefing), workspace, title, text, url, data e sentAt. Um pedido de aprovação traz data.kind (press_release, blog ou event) e data.id, que você pode usar para ler e decidir pela API.

Cada requisição é assinada. Calcule o HMAC-SHA256 do corpo bruto da requisição com seu segredo de assinatura e compare com o cabeçalho X-Marcomm-Signature, no formato sha256=<hex>. Rejeite as requisições que não coincidirem.

Verificando um webhook em Node.js

import { createHmac, timingSafeEqual } from 'node:crypto';

export function isFromMarcomm(rawBody: string, signature: string, secret: string) {
  const expected = 'sha256=' + createHmac('sha256', secret).update(rawBody).digest('hex');
  const a = Buffer.from(expected);
  const b = Buffer.from(signature);
  return a.length === b.length && timingSafeEqual(a, b);
}

Guias de conexão

Aprove a partir do seu sistema de aprovação

  1. Adicione um destino de webhook genérico e ative os pedidos de aprovação.
  2. Quando um webhook de aprovação chegar, verifique a assinatura e leia data.kind e data.id.
  3. Mostre o pedido no seu sistema de aprovação. Se precisar do texto, leia com GET press-releases/{id} ou blog-posts/{id}.
  4. Envie a decisão com a chave pessoal de quem decide. Eventos e envios de e-mail são decididos no app, pelo link da mensagem.

Leve o resumo de notícias para seu painel

  1. Crie uma chave do espaço de trabalho com os escopos news e crisis.
  2. Chame news/digest em intervalos regulares, por exemplo toda manhã.
  3. Chame crisis/incidents com mais frequência se quiser seus próprios alertas. Acompanhe os cabeçalhos X-RateLimit para ficar dentro dos limites.

Alertas no seu chat

  1. Para Teams e Google Chat, crie a URL de webhook da sala e adicione-a como destino em Configurações > API > Webhooks.
  2. Para JANDI, Dooray! e Chatwork, conecte em Configurações > Integrações.
  3. Escolha quais entre alertas, pedidos de aprovação e briefing da manhã cada destino recebe e envie uma mensagem de teste.

Pronto para conectar?

O proprietário ou administrador do espaço de trabalho faz o pedido em Configurações > API. Você é avisado por e-mail e no app quando a análise terminar.

Abrir configurações da API