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
- 1Peça acesso
Descreva o seu sistema e escolha os dados de que precisa. Cada pedido é analisado.
- 2Crie 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.
- 3Envie 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étodo | Caminho | Âmbito | O que faz |
|---|---|---|---|
| GET | /api/v1/news/digest | news | Volume de cobertura, sentimento e principais meios de um período. |
| GET | /api/v1/news/articles | news | Pesquisa na cobertura de notícias. |
| GET | /api/v1/news/outlets | news | Meios de comunicação que cobrem as suas empresas. |
| GET | /api/v1/crisis/incidents | crisis | Incidentes de crise e artigos críticos. |
| GET | /api/v1/approvals | approvals | Comunicados 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-releases | content | Lista os comunicados de imprensa. |
| GET | /api/v1/press-releases/{id} | content | Um comunicado de imprensa com o lead e o texto. |
| GET | /api/v1/blog-posts | content | Lista os artigos de blogue. |
| GET | /api/v1/blog-posts/{id} | content | Um artigo de blogue com o texto. |
| POST | /api/v1/approvals/press-releases/{id} | approvals | Aprova ou rejeita um comunicado de imprensa que aguarda o dono da chave. |
| POST | /api/v1/approvals/blog-posts/{id} | approvals | Aprova 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ódigo | Estado | Significado |
|---|---|---|
| invalid_key | 401 | A chave está em falta, mal formada ou foi revogada. |
| expired | 401 | A chave expirou. Crie uma chave ou faça a rotação da atual. |
| ip_denied | 403 | A chave está limitada a outros endereços IP. |
| plan_required | 403 | O espaço de trabalho não está no plano Team ou superior. |
| access_required | 403 | O acesso à API não foi aprovado para este espaço de trabalho. |
| suspended | 403 | O acesso à API deste espaço de trabalho está suspenso. |
| scope_denied | 403 | A chave não tem o âmbito que este endpoint exige. |
| personal_key_required | 403 | Apenas uma chave pessoal pode aprovar ou rejeitar. |
| denied | 403 | A função do dono da chave não permite isto. |
| unknown_endpoint | 404 | Esse endpoint não existe. |
| comment_required | 400 | É preciso indicar um motivo para rejeitar. |
| confirmation_required | 409 | Os avisos precisam de confirmação. Reenvie com force definido como true. |
| rate_limited | 429 | O limite por minuto foi excedido. |
| daily_limit | 429 | O 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
- Adicione um destino de webhook genérico e ative os pedidos de aprovação.
- Quando chegar um webhook de aprovação, verifique a assinatura e leia data.kind e data.id.
- Mostre o pedido no seu sistema de aprovação. Se precisar do texto, leia-o com GET press-releases/{id} ou blog-posts/{id}.
- 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
- Crie uma chave do espaço de trabalho com os âmbitos news e crisis.
- Chame news/digest de forma agendada, por exemplo todas as manhãs.
- 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
- Para Teams e Google Chat, crie o URL de webhook da sala e adicione-o como destino em Definições > API > Webhooks.
- Para JANDI, Dooray! e Chatwork, ligue em Definições > Integrações.
- 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