Документация по API и SDK ScreenApp

API ScreenApps позволяет автоматически расшифровывать, суммировать и анализировать видео- и аудиоконтент

Автор Команда ScreenApp

Документация по ScreenApp API v2.0.0

API ScreenApp позволяет автоматически транскрибировать, суммировать и анализировать видео- и аудиоконтент. Идеально подходит для предприятий, стремящихся обрабатывать звонки клиентов, обучающие видео и записи встреч в масштабе.

Ключевые варианты использования

✨ Популярный вариант использования: Команды обслуживания клиентов используют наш API для автоматической транскрипции звонков в службу поддержки и создания сводок, которые затем синхронизируются с их CRM через веб-хуки.

Получить учетные данные API на панели управления →

Требования к плану и доступ к API

Чтобы использовать ScreenApp API, вам потребуется:

  1. Активная подписка на бизнес-план
  2. Учетные данные API из вашей панели управления ScreenApp

Получение учетных данных API

  1. Войдите в свою учетную запись ScreenApp
  2. Перейдите в Настройки → Интеграция
  3. Здесь вы найдете:
    • API-токен
    • ID команды

Храните эти учетные данные в безопасности и никогда не публикуйте их.

Быстрый старт

Хотите сразу приступить к работе? Выполните следующие действия, чтобы интегрировать ScreenApp на свой веб-сайт:

1. Установите плагин

Добавьте этот код в HTML вашего веб-сайта:

<script>
  // Код установки плагина здесь
</script>

2. Добавьте кнопку триггера

Добавьте кнопку или элемент триггера на свою страницу:

<button onclick="loadScreenApp()">Начать запись</button>

3. Настройте обратный вызов

Настройте функцию обратного вызова для обработки завершения записи:

function callback({ id, url }) {
  // Пример: Отправка на ваш бэкенд
  fetch('/api/recordings', {
    method: 'POST',
    body: JSON.stringify({ recordingId: id, recordingUrl: url })
  });
  
  // Пример: Обновление UI
  document.getElementById('status').innerHTML = 
    `Запись сохранена! Посмотреть ее можно по адресу ${url}`;
}

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

Для всех запросов API требуется аутентификация. ScreenApp использует аутентификацию на основе токенов вместе со специфическими для команды идентификаторами.

Учетные данные, которые вам понадобятся

Пример аутентификации

curl -X POST "https://api.screenapp.io/v2/files/upload" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "X-Team-ID: YOUR_TEAM_ID"

Конечные точки аутентификации

GET /auth/google

Перенаправление в Google для аутентификации

Параметры запроса:

GET /auth/facebook

Перенаправление в Facebook для аутентификации

Параметры запроса:

Основные концепции

Прежде чем углубляться в конкретные конечные точки, давайте разберемся с ключевыми понятиями в ScreenApp:

  1. Записи: Записи видео и аудио, которые можно загружать и обрабатывать
  2. Команды: Группы, которые могут обмениваться записями и управлять ими
  3. Веб-хуки: Уведомления в режиме реального времени о событиях записи и результатах обработки
  4. Теги: Метаданные, которые можно прикрепить к записям, командам или профилям пользователей

Справочник API

Управление командами

POST /team/{teamId}/tag

Добавить тег в команду

Параметры пути:

Тело запроса:

{
  "key": "color",
  "value": "red"
}

DELETE /team/{teamId}/tag

Удалить тег из команды

Параметры пути:

Тело запроса:

{
  "key": "color"
}

Интеграция веб-хуков команды

POST /team/{teamId}/integrations/webhook

Зарегистрировать новый URL-адрес веб-хука для команды

Параметры пути:

Тело запроса:

{
  "url": "https://example.com/webhook",
  "name": "My Webhook"
}

Ответы:

DELETE /team/{teamId}/integrations/webhook

Отменить регистрацию URL-адреса веб-хука для команды

Параметры пути:

Параметры запроса:

Ответы:

GET /team/{teamId}/integrations/zapier/sample/list

Получить пример данных для Zapier в виде массива

Параметры пути:

Ответы:

Пользовательские интеграции

POST /integrations/webhook

Зарегистрировать новый веб-хук для пользователя

Тело запроса:

{
  "url": "https://example.com/webhook",
  "name": "My Webhook"
}

Ответы:

DELETE /integrations/webhook

Отменить регистрацию веб-хука для пользователя

Параметры запроса:

Ответы:

События веб-хука

Ваша конечная точка веб-хука будет получать события в следующем формате:

{
  "event": "recording.completed",
  "fileId": "file789",
  "teamId": "team123",
  "data": {
    "url": "https://screenapp.io/recording/file789",
    "duration": 300,
    "status": "processed"
  }
}

Общие события включают:

Управление файлами

POST /files/{fileId}/tag

Добавить тег в файл

Параметры пути:

Тело запроса:

{
  "key": "color",
  "value": "red"
}

DELETE /files/{fileId}/tag

Удалить тег из файла

Параметры пути:

Тело запроса:

{
  "key": "color"
}

POST /files/{fileId}/ask/multimodal

Задать вопрос о файле, используя несколько моделей ИИ

Параметры пути:

Тело запроса:

{
  "promptText": "What are the key points discussed?",
  "mediaAnalysisOptions": {
    "transcript": {
      "segments": [
        {
          "start": 0,
          "end": 120
        }
      ]
    },
    "video": {
      "segments": [
        {
          "start": 0,
          "end": 120
        }
      ]
    },
    "screenshots": {
      "timestamps": [30, 60, 90]
    }
  }
}

Ответы:

Загрузка файла

POST /files/upload/{teamId}/{folderId}/url

Сгенерировать предварительно подписанные URL-адреса для загрузки файлов

Параметры пути:

Тело запроса:

{
  "files": [
    {
      "contentType": "video/mp4",
      "name": "meeting-recording.mp4"
    }
  ]
}

Ответы:

POST /files/upload/{teamId}/{folderId}/finalize

Завершить загруженные файлы

Параметры пути:

Тело запроса:

{
  "file": {
    "fileId": "file123",
    "contentType": "video/mp4",
    "name": "Sales Call",
    "description": "Weekly sales call with customer",
    "recorderName": "John Doe",
    "recorderEmail": "john.doe@example.com"
  }
}

Ответы:

Многокомпонентная загрузка (для больших файлов)

PUT /files/upload/multipart/init/{teamId}/{folderId}

Инициализировать многокомпонентную загрузку для большого файла

Параметры пути:

Тело запроса:

{
  "contentType": "video/mp4"
}

Ответы:

Пример ответа:

{
  "success": true,
  "data": {
    "fileId": "file789",
    "uploadId": "upload123"
  }
}

PUT /files/upload/multipart/url/{teamId}/{folderId}/{fileId}/{uploadId}/{partNumber}

Получить URL-адрес для загрузки конкретной части

Параметры пути:

Тело запроса:

{
  "contentType": "video/mp4"
}

Ответы:

Пример ответа:

{
  "success": true,
  "data": {
    "uploadUrl": "https://presigned-s3-url.com/part1"
  }
}

PUT /files/upload/multipart/finalize/{teamId}/{folderId}/{fileId}/{uploadId}

Завершить многокомпонентную загрузку

Параметры пути:

Тело запроса:

{
  "file": {
    "contentType": "video/mp4",
    "recorderName": "John Doe",
    "recorderEmail": "john@example.com",
    "name": "My Recording",
    "description": "A recorded video session",
    "notes": [
      {
        "text": "Important point discussed",
        "timestamp": 1234567890
      }
    ]
  }
}

Ответы:

PUT /files/upload/multipart/fallback/{teamId}/{folderId}/{fileId}/{partNumber}

Загрузить часть файла через бэкенд (запасной вариант)

Параметры пути:

Данные формы:

Ответы:

Управление аккаунтом

POST /v2/account/tag

Добавить тег к аутентифицированному пользователю

Тело запроса:

{
  "key": "color",
  "value": "red"
}

Ответы:

PUT /account/profile

Обновить профиль аутентифицированного пользователя

Тело запроса:

{
  "firstName": "John",
  "lastName": "Doe",
  "name": "John Doe",
  "gender": "male",
  "userType": "user",
  "company": "Acme Inc",
  "role": "Developer",
  "goals": "Learn new technologies",
  "phoneNumber": "+1234567890",
  "location": "San Francisco, CA",
  "website": "https://example.com",
  "picture": "https://example.com/avatar.jpg",
  "provider": "local",
  "providerId": "12345",
  "primaryField": "development"
}

Ответы:

Расширенные функции

Анализ ИИ

Используйте ИИ для анализа ваших записей и получения полезной информации:

// Запрос анализа ИИ записи
const analysis = await fetch(`/v2/files/${fileId}/ask/multimodal`, {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    promptText: "What are the key discussion points?",
    mediaAnalysisOptions: {
      transcript: {
        segments: [{ start: 0, end: 300 }]
      },
      video: {
        segments: [{ start: 0, end: 300 }]
      }
    }
  })
});

Пакетные операции

Эффективное управление несколькими записями:

// Пометить несколько записей тегом
async function batchTag(fileIds, tag) {
  const promises = fileIds.map(fileId => 
    fetch(`/v2/files/${fileId}/tag`, {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_TOKEN',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(tag)
    })
  );
  await Promise.all(promises);
}

Обработка ошибок

Общие коды ошибок

Формат ответа об ошибке

Ответы об ошибках обычно имеют следующий формат:

{
  "success": false,
  "message": "Detailed error message"
}

Примеры

Настройка веб-хуков команды

Веб-хуки позволяют получать обновления в режиме реального времени при обработке записей:

// Зарегистрировать новый веб-хук для вашей команды
async function registerTeamWebhook(teamId, webhookUrl, webhookName) {
  const response = await fetch(`/v2/team/${teamId}/integrations/webhook`, {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_TOKEN',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      url: webhookUrl,
      name: webhookName
    })
  });
  return await response.json();
}

// Пример использования
const result = await registerTeamWebhook(
  'team123',
  'https://your-domain.com/webhooks/screenapp',
  'Recording Updates'
);

Загрузка и обработка большого файла

Для файлов размером более 100 МБ используйте многокомпонентный процесс загрузки:

// 1. Инициализировать загрузку
const initResponse = await fetch(`/v2/files/upload/multipart/init/${teamId}/${folderId}`, {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    contentType: 'video/mp4'
  })
});

const { data: { fileId, uploadId } } = await initResponse.json();

// 2. Разделить файл на фрагменты и загрузить каждую часть
const CHUNK_SIZE = 5 * 1024 * 1024; // Фрагменты по 5 МБ
const totalParts = Math.ceil(file.size / CHUNK_SIZE);

for (let partNumber = 1; partNumber <= totalParts; partNumber++) {
  // Получить URL-адрес для загрузки этой части
  const urlResponse = await fetch(
    `/v2/files/upload/multipart/url/${teamId}/${folderId}/${fileId}/${uploadId}/${partNumber}`,
    {
      method: 'PUT',
      headers: {
        'Authorization': 'Bearer YOUR_API_TOKEN',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        contentType: 'video/mp4'
      })
    }
  );
  
  const { data: { uploadUrl } } = await urlResponse.json();
  
  // Создать фрагмент из файла
  const start = (partNumber - 1) * CHUNK_SIZE;
  const end = Math.min(start + CHUNK_SIZE, file.size);
  const chunk = file.slice(start, end);
  
  // Загрузить фрагмент непосредственно в S3
  await fetch(uploadUrl, {
    method: 'PUT',
    body: chunk,
    headers: {
      'Content-Type': 'video/mp4'
    }
  });
}

// 3. Завершить загрузку
const finalizeResponse = await fetch(
  `/v2/files/upload/multipart/finalize/${teamId}/${folderId}/${fileId}/${uploadId}`,
  {
    method: 'PUT',
    headers: {
      'Authorization': 'Bearer YOUR_API_TOKEN',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      file: {
        contentType: 'video/mp4',
        name: 'Customer Meeting Recording',
        description: 'Quarterly review with client',
        recorderName: 'Jane Smith',
        recorderEmail: 'jane@example.com'
      }
    })
  }
);

Получить учетные данные API на панели управления →