Подключите свои системы к Marcomm AI
Получайте дайджесты новостей, критические публикации и ожидающие согласования из собственных систем и принимайте или отклоняйте их в своих инструментах согласования. API доступен на тарифе Team и выше после краткой проверки.
Начало работы
- 1Подайте заявку на доступ
Опишите свою систему и выберите нужные данные. Мы рассматриваем каждую заявку.
- 2Создайте ключ
После одобрения создайте ключ в разделе «Настройки, API». Ключ показывается один раз, поэтому сохраните его в своей системе.
- 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/digest | news | Объём публикаций, тональность и ведущие СМИ за период. |
| GET | /api/v1/news/articles | news | Поиск по новостным публикациям. |
| GET | /api/v1/news/outlets | news | СМИ, которые пишут о ваших компаниях. |
| GET | /api/v1/crisis/incidents | crisis | Кризисные инциденты и критические статьи. |
| GET | /api/v1/approvals | approvals | Пресс-релизы и записи блога, ожидающие владельца ключа, и те, которые владелец ключа отправил на согласование. |
| GET | /api/v1/press-releases | content | Список пресс-релизов. |
| GET | /api/v1/press-releases/{id} | content | Один пресс-релиз с лидом и текстом. |
| GET | /api/v1/blog-posts | content | Список записей блога. |
| 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_key | 401 | Ключ отсутствует, имеет неверный формат или отозван. |
| expired | 401 | Срок действия ключа истёк. Создайте новый ключ или выполните ротацию. |
| ip_denied | 403 | Ключ ограничен другими IP-адресами. |
| plan_required | 403 | Рабочее пространство не на тарифе Team или выше. |
| access_required | 403 | Доступ к API для этого рабочего пространства не одобрен. |
| suspended | 403 | Доступ к API для этого рабочего пространства приостановлен. |
| scope_denied | 403 | У ключа нет области, необходимой для этого эндпоинта. |
| personal_key_required | 403 | Одобрять и отклонять можно только персональным ключом. |
| denied | 403 | Роль владельца ключа этого не позволяет. |
| unknown_endpoint | 404 | Такого эндпоинта нет. |
| comment_required | 400 | Для отклонения нужна причина. |
| confirmation_required | 409 | Предупреждения требуют подтверждения. Повторите запрос с force, равным true. |
| rate_limited | 429 | Превышен минутный лимит. |
| daily_limit | 429 | Достигнут суточный лимит. |
Вебхуки
Оповещения, запросы на согласование и утренний брифинг можно также отправлять в вашу систему. Добавьте получателя в разделе «Настройки, 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);
}Руководства по подключению
Согласование из вашей системы согласования
- Добавьте универсального получателя вебхука и включите запросы на согласование.
- Когда придёт вебхук согласования, проверьте подпись и прочитайте data.kind и data.id.
- Покажите запрос в своей системе согласования. При необходимости прочитайте текст через GET press-releases/{id} или blog-posts/{id}.
- Отправьте вердикт персональным ключом того, кто согласует. Мероприятия и email-рассылки согласуются в приложении по ссылке из сообщения.
Дайджест новостей на вашей панели
- Создайте ключ рабочего пространства с областями news и crisis.
- Вызывайте news/digest по расписанию, например каждое утро.
- Если нужны собственные оповещения, вызывайте crisis/incidents чаще. Следите за заголовками X-RateLimit, чтобы не выйти за лимиты.
Оповещения в вашем чате
- Для Teams и Google Chat создайте URL вебхука комнаты и добавьте его как получателя в разделе «Настройки, API, Вебхуки».
- JANDI, Dooray! и Chatwork подключаются в разделе «Настройки, Интеграции».
- Выберите, какие из оповещений, запросов на согласование и утреннего брифинга получает каждый получатель, и отправьте тестовое сообщение.
Готовы подключиться?
Владелец или администратор рабочего пространства подаёт заявку в разделе «Настройки, API». Когда проверка завершится, вы получите уведомление по электронной почте и в приложении.
Открыть настройки API