Экспорт журнала
Скачайте подписанный журнал в формате JSON Lines или получайте выбранные события по мере появления.
Каждый вызов, решение и изменение попадает в ваш журнал. Забирайте полную копию когда угодно, для SIEM или архива.
Скачайте из консоли
Откройте раздел История вызовов и нажмите «Скачать журнал». В файле вся цепочка вашей организации. Скачивать могут владельцы, а также администраторы и аудиторы всей организации, у которых нет более узкой роли ни в одном рабочем пространстве. Администратор или аудитор одного рабочего пространства скачать журнал не может, как и администратор организации, который в пространстве одного клиента только участник или гость. Прочитать журнал на экране можно на вкладке «Журнал» рядом: каждая запись, кто её сделал и к чему она относится. Каждый видит записи тех пространств, где он владелец, администратор или аудитор, и записи самой организации.
Скачайте скриптом
Скрипт входит по ключу API консоли. Владелец создаёт его в разделе Ключи API кнопкой «Новый ключ API», ключ показывается один раз. Сохраните его в SALLYPORT_CONSOLE_KEY:
read -rs SALLYPORT_CONSOLE_KEY && export SALLYPORT_CONSOLE_KEYcurl --fail --silent --show-error -H "Authorization: Bearer $SALLYPORT_CONSOLE_KEY" "https://mcp.sallyport.cloud/v1/audit/export" -o sallyport-audit.jsonlЧтобы взять диапазон, добавьте from_seq и to_seq. Оба параметра целые числа от нуля, обе границы входят в выгрузку. Без to_seq файл идёт до конца цепочки.
curl --fail --silent --show-error -H "Authorization: Bearer $SALLYPORT_CONSOLE_KEY" "https://mcp.sallyport.cloud/v1/audit/export?from_seq=1001" -o sallyport-audit-1001.jsonlЧтобы забирать только новое, прочитайте to_seq в первой строке прошлого файла и начните следующую выгрузку со следующей записи. Если events равно 0, нового нет: позже запросите снова с тем же from_seq.
По умолчанию Sallyport хранит журнал 180 дней, поэтому забирайте его хотя бы с такой частотой. Срок меняет поле «История вызовов и журнал (дни)» в разделе Настройки, «Организация». Сессия консоли работает с тем же маршрутом по адресу https://my.sallyport.cloud/api/v1/audit/export.
Что внутри файла
| Заголовок ответа | Значение |
|---|---|
| Content-Type | application/x-ndjson; charset=utf-8 |
| Content-Disposition | attachment; filename="sallyport-audit-{UUID организации}.jsonl" |
| Cache-Control | no-store |
| X-Content-Type-Options | nosniff |
Первая строка описывает файл: schema (spc-chain/2), tenant_id, from_seq, to_seq и events. Каждая следующая строка содержит одну запись по порядку: seq, occurred_at, kind, payload, prev_hash, this_hash, sig и signer_kid.
Каждая запись хранит хеш предыдущей, поэтому пропавшая или изменённая строка рвёт цепочку. Все записи подписаны Ed25519, публичные ключи лежат по адресу https://mcp.sallyport.cloud/.well-known/sallyport-audit-keys.json и открыты без учётной записи.
Сравните число строк с events, чтобы заметить оборванную загрузку. В файле нет значений ключей, тел запросов и полных списков аргументов.
Получайте события сразу
Вебхук отправляет на ваш HTTPS-адрес каждую новую запись журнала выбранных видов, примерно в течение минуты. Добавляет его владелец или администратор в разделе Вебхуки настроек: нажмите «Добавить вебхук», введите адрес и отметьте события. Скрипт делает это через API:
curl --fail --silent --show-error -X POST -H "Authorization: Bearer $SALLYPORT_CONSOLE_KEY" -H "Content-Type: application/json" -d '{"url": "https://siem.example.com/sallyport", "events": ["call.intent", "call.result", "approval.decided"]}' "https://mcp.sallyport.cloud/v1/webhooks"Секрет подписи показывается один раз: в консоли после «Добавить вебхук» и как secret в ответе API. Каждая доставка приходит POST-запросом с заголовками X-Sallyport-Event, X-Sallyport-Delivery и X-Sallyport-Signature: t=<unix seconds>,v1=<hex>.
Проверяйте v1 как HMAC-SHA256 от <t>.<body>, где ключом служит весь секрет. В теле лежат delivery_id, tenant_id, kind, occurred_at, seq, this_hash и payload.
- Отвечайте статусом 2xx. Неудачную доставку Sallyport повторяет, удваивая паузу начиная с 5 секунд, всего 8 попыток. Примерно через 15 минут доставка помечается как неудачная.
- У повторов тот же
X-Sallyport-Delivery, по нему отбрасывайте дубли. - Вебхук доставляет то, что его создатель может читать в журнале: записи пространств, где он владелец, администратор или аудитор, и записи самой организации. Пока ему не видно ничего, вебхук ничего не доставляет, и эти записи потом не досылаются. Вебхук, созданный ключом API, доставляет весь журнал.
- Вебхук начинает с момента создания. Старые записи берите из экспорта:
seqиthis_hashсовпадают с его строками. - Названия событий совпадают со значениями
kindв журнале, напримерcall.intent,call.result,approval.requested,approval.decided,grant.createdиaccess_request.created. Подходит любойkindиз выгрузки. Неизвестное название отклоняется при создании вебхука, и ошибка его называет. - Кнопка «Доставки» в строке вебхука показывает, что было отправлено, а «Отправить ещё раз» повторяет неудачную доставку. В API это
GET /v1/webhooks/{id}/deliveriesиPOST /v1/webhooks/{id}/deliveries/{delivery_id}/retry. - Список в разделе Вебхуки отмечает вебхук, который не доставляет. Переключатель в строке выключает доставку, не удаляя вебхук.