Saltar para o conteúdo
MarcommAI
Programadores

Ligue os 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 breve análise.

Primeiros passos

  1. 1
    Peça acesso

    Descreva o seu sistema e escolha os dados de que precisa. Cada pedido é analisado.

  2. 2
    Crie uma chave

    Depois da aprovação, crie uma chave em Definições > API. A chave é mostrada uma única vez, por isso guarde-a no seu sistema.

  3. 3
    Envie um pedido

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

Exemplo de pedido

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

Autenticação

Envie a sua chave como token Bearer em cada pedido. Uma chave pessoal atua como a pessoa que a criou, pelo que 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 rodadas: depois da rotação, a chave antiga continua a funcionar durante 24 horas.

Âmbitos

Cada chave tem apenas os âmbitos para os quais a sua aplicação foi aprovada.

news
Resumo de notícias, artigos e meios de comunicação.
crisis
Notícias críticas e incidentes de crise.
approvals
Aprovações pendentes e a respetiva aprovação ou rejeição com uma chave pessoal.
content
Leitura de comunicados de imprensa e artigos de blogue.

Endpoints

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

MétodoCaminhoÂmbitoO que faz
GET/api/v1/news/digestnewsVolume de cobertura, sentimento e principais meios de um período.
GET/api/v1/news/articlesnewsPesquisa na cobertura de notícias.
GET/api/v1/news/outletsnewsMeios de comunicação que cobrem as suas empresas.
GET/api/v1/crisis/incidentscrisisIncidentes de crise e artigos críticos.
GET/api/v1/approvalsapprovalsComunicados de imprensa e artigos de blogue à espera do dono da chave, e os que o dono da chave pediu para aprovar.
GET/api/v1/press-releasescontentLista os comunicados de imprensa.
GET/api/v1/press-releases/{id}contentUm comunicado de imprensa com o lead e o texto.
GET/api/v1/blog-postscontentLista os artigos de blogue.
GET/api/v1/blog-posts/{id}contentUm artigo de blogue com o texto.
POST/api/v1/approvals/press-releases/{id}approvalsAprova ou rejeita um comunicado de imprensa que aguarda o dono da chave.
POST/api/v1/approvals/blog-posts/{id}approvalsAprova ou rejeita um artigo de blogue 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 da aplicação e do Slack e fica registada em nome do dono da chave. Quando o texto contém expressões que exigem confirmação, recebe 409 confirmation_required com os avisos e pode enviar o pedido 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 pedidos

Os limites são definidos por espaço de trabalho, por minuto e por dia (UTC). As respostas incluem os cabeçalhos abaixo. Ao exceder o limite, recebe 429 com Retry-After. Para aumentar um limite, peça o aumento em Definições > API. A nossa equipa analisa o pedido.

X-RateLimit-Limit
Pedidos permitidos por minuto.
X-RateLimit-Remaining
Pedidos restantes no minuto atual.
X-RateLimit-Reset
Hora Unix em que a janela do minuto é reposta.
X-RateLimit-Day-Limit
Pedidos permitidos por dia.
X-RateLimit-Day-Remaining
Pedidos restantes hoje.
Retry-After
Segundos de espera antes de tentar de novo. Apenas em 429.

Erros

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

CódigoEstadoSignificado
invalid_key401A chave está em falta, mal formada ou foi revogada.
expired401A chave expirou. Crie uma chave ou faça a rotação da atual.
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 âmbito que este endpoint exige.
personal_key_required403Apenas uma chave pessoal pode aprovar ou rejeitar.
denied403A função do dono da chave não permite isto.
unknown_endpoint404Esse endpoint não existe.
comment_required400É preciso indicar 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 para o seu sistema. Adicione um destino em Definições > API > Webhooks. Cada pedido é um JSON com os campos event (alert, approval ou briefing), workspace, title, text, url, data e sentAt. Um pedido de aprovação inclui data.kind (press_release, blog ou event) e data.id, que pode usar para ler e decidir através da API.

Cada pedido é assinado. Calcule o HMAC-SHA256 do corpo em bruto do pedido com o seu segredo de assinatura e compare com o cabeçalho X-Marcomm-Signature, no formato sha256=<hex>. Rejeite os pedidos que não coincidam.

A verificar 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 ligaçã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 chegar um webhook de aprovação, 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-o 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 na aplicação, através da ligação na mensagem.

Leve o resumo de notícias para o seu painel

  1. Crie uma chave do espaço de trabalho com os âmbitos news e crisis.
  2. Chame news/digest de forma agendada, por exemplo todas as manhãs.
  3. Chame crisis/incidents com mais frequência se quiser os 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 o URL de webhook da sala e adicione-o como destino em Definições > API > Webhooks.
  2. Para JANDI, Dooray! e Chatwork, ligue em Definições > Integrações.
  3. Escolha quais de alertas, pedidos de aprovação e briefing da manhã cada destino recebe e envie uma mensagem de teste.

Pronto para ligar?

O proprietário ou administrador do espaço de trabalho faz o pedido em Definições > API. É avisado por e-mail e na aplicação quando a análise terminar.

Abrir definições da API