Перейти к содержимому
MarcommAI
Разработчикам

Подключите свои системы к Marcomm AI

Получайте дайджесты новостей, критические публикации и ожидающие согласования из собственных систем и принимайте или отклоняйте их в своих инструментах согласования. API доступен на тарифе Team и выше после краткой проверки.

Начало работы

  1. 1
    Подайте заявку на доступ

    Опишите свою систему и выберите нужные данные. Мы рассматриваем каждую заявку.

  2. 2
    Создайте ключ

    После одобрения создайте ключ в разделе «Настройки, API». Ключ показывается один раз, поэтому сохраните его в своей системе.

  3. 3
    Отправьте запрос

    Передайте ключ в заголовке Authorization и вызовите любой из перечисленных ниже эндпоинтов.

Пример запроса

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

Аутентификация

Передавайте ключ как токен Bearer в каждом запросе. Персональный ключ действует от имени создавшего его человека, поэтому может читать согласования и одобрять или отклонять их от его имени. Ключ рабочего пространства создаёт администратор, и он работает только на чтение. Ключи могут иметь срок действия, быть ограничены IP-адресами и заменяться: после ротации прежний ключ продолжает работать ещё 24 часа.

Области доступа

Каждый ключ получает только те области, для которых одобрена ваша заявка.

news
Дайджест новостей, статьи и СМИ.
crisis
Критические новости и кризисные инциденты.
approvals
Ожидающие согласования, а также их одобрение или отклонение персональным ключом.
content
Чтение пресс-релизов и записей блога.

Эндпоинты

Пути начинаются с /api/v1. Эндпоинты чтения используют GET и принимают параметры запроса. Ответ приходит в формате JSON вида {"data": ...}.

МетодПутьОбластьНазначение
GET/api/v1/news/digestnewsОбъём публикаций, тональность и ведущие СМИ за период.
GET/api/v1/news/articlesnewsПоиск по новостным публикациям.
GET/api/v1/news/outletsnewsСМИ, которые пишут о ваших компаниях.
GET/api/v1/crisis/incidentscrisisКризисные инциденты и критические статьи.
GET/api/v1/approvalsapprovalsПресс-релизы и записи блога, ожидающие владельца ключа, и те, которые владелец ключа отправил на согласование.
GET/api/v1/press-releasescontentСписок пресс-релизов.
GET/api/v1/press-releases/{id}contentОдин пресс-релиз с лидом и текстом.
GET/api/v1/blog-postscontentСписок записей блога.
GET/api/v1/blog-posts/{id}contentОдна запись блога с текстом.
POST/api/v1/approvals/press-releases/{id}approvalsОдобрить или отклонить пресс-релиз, ожидающий владельца ключа.
POST/api/v1/approvals/blog-posts/{id}approvalsОдобрить или отклонить запись блога, ожидающую владельца ключа.

Одобрение и отклонение

Отправьте {"decision": "approve"} или {"decision": "reject", "comment": "..."} на адрес материала. Для отклонения нужен комментарий. Вердикт подчиняется тем же правилам, что и в приложении и Slack, и записывается на владельца ключа. Если в тексте есть формулировки, требующие подтверждения, вы получите ответ 409 confirmation_required с предупреждениями и сможете повторить запрос с "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."}'

Лимиты запросов

Лимиты задаются для рабочего пространства на минуту и на сутки (UTC). Каждый ответ содержит приведённые ниже заголовки. При превышении лимита вы получите ответ 429 с заголовком Retry-After. Чтобы увеличить лимит, отправьте запрос в разделе «Настройки, API». Его рассмотрит наша команда.

X-RateLimit-Limit
Допустимое число запросов в минуту.
X-RateLimit-Remaining
Оставшееся число запросов в текущей минуте.
X-RateLimit-Reset
Время Unix, когда окно минуты сбрасывается.
X-RateLimit-Day-Limit
Допустимое число запросов в сутки.
X-RateLimit-Day-Remaining
Оставшееся число запросов на сегодня.
Retry-After
Сколько секунд подождать перед повторной попыткой. Только при 429.

Ошибки

Ошибки возвращаются в формате JSON вида {"error": {"code": ..., "message": ...}}.

КодСтатусЗначение
invalid_key401Ключ отсутствует, имеет неверный формат или отозван.
expired401Срок действия ключа истёк. Создайте новый ключ или выполните ротацию.
ip_denied403Ключ ограничен другими IP-адресами.
plan_required403Рабочее пространство не на тарифе Team или выше.
access_required403Доступ к API для этого рабочего пространства не одобрен.
suspended403Доступ к API для этого рабочего пространства приостановлен.
scope_denied403У ключа нет области, необходимой для этого эндпоинта.
personal_key_required403Одобрять и отклонять можно только персональным ключом.
denied403Роль владельца ключа этого не позволяет.
unknown_endpoint404Такого эндпоинта нет.
comment_required400Для отклонения нужна причина.
confirmation_required409Предупреждения требуют подтверждения. Повторите запрос с force, равным true.
rate_limited429Превышен минутный лимит.
daily_limit429Достигнут суточный лимит.

Вебхуки

Оповещения, запросы на согласование и утренний брифинг можно также отправлять в вашу систему. Добавьте получателя в разделе «Настройки, API, Вебхуки». Каждый запрос представляет собой JSON с полями event (alert, approval или briefing), workspace, title, text, url, data и sentAt. Запрос на согласование содержит data.kind (press_release, blog или event) и data.id, по которым можно прочитать материал и вынести вердикт через API.

Каждый запрос подписан. Вычислите HMAC-SHA256 от необработанного тела запроса с вашим секретом подписи и сравните результат с заголовком X-Marcomm-Signature вида sha256=<hex>. Отклоняйте запросы, которые не совпадают.

Проверка вебхука в 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);
}

Руководства по подключению

Согласование из вашей системы согласования

  1. Добавьте универсального получателя вебхука и включите запросы на согласование.
  2. Когда придёт вебхук согласования, проверьте подпись и прочитайте data.kind и data.id.
  3. Покажите запрос в своей системе согласования. При необходимости прочитайте текст через GET press-releases/{id} или blog-posts/{id}.
  4. Отправьте вердикт персональным ключом того, кто согласует. Мероприятия и email-рассылки согласуются в приложении по ссылке из сообщения.

Дайджест новостей на вашей панели

  1. Создайте ключ рабочего пространства с областями news и crisis.
  2. Вызывайте news/digest по расписанию, например каждое утро.
  3. Если нужны собственные оповещения, вызывайте crisis/incidents чаще. Следите за заголовками X-RateLimit, чтобы не выйти за лимиты.

Оповещения в вашем чате

  1. Для Teams и Google Chat создайте URL вебхука комнаты и добавьте его как получателя в разделе «Настройки, API, Вебхуки».
  2. JANDI, Dooray! и Chatwork подключаются в разделе «Настройки, Интеграции».
  3. Выберите, какие из оповещений, запросов на согласование и утреннего брифинга получает каждый получатель, и отправьте тестовое сообщение.

Готовы подключиться?

Владелец или администратор рабочего пространства подаёт заявку в разделе «Настройки, API». Когда проверка завершится, вы получите уведомление по электронной почте и в приложении.

Открыть настройки API