Документация по ScreenApp API v2.0.0
API ScreenApp позволяет автоматически транскрибировать, суммировать и анализировать видео- и аудиоконтент. Идеально подходит для предприятий, стремящихся обрабатывать звонки клиентов, обучающие видео и записи встреч в масштабе.
Ключевые варианты использования
- Автоматическая транскрипция и суммирование: Преобразуйте любое видео или аудио в доступный для поиска текст и краткие сводки. Идеально подходит для команд обслуживания клиентов, образовательных учреждений и создателей контента.
- Управление знаниями: Создайте доступный для поиска репозиторий видеоконтента с автоматическими транскрипциями, сводками и аналитикой на основе искусственного интеллекта. Идеально подходит для учебных материалов и баз знаний компании.
- Обработка в режиме реального времени: Получайте транскрипции и сводки через веб-хуки сразу после обработки записей. Отлично подходит для интеграции с CRM-системами и платформами обслуживания клиентов.
- Встроенная запись: Добавьте в свое приложение возможности записи профессионального уровня с помощью нашего встраиваемого рекордера, который обрабатывает захват экрана и аудио.
✨ Популярный вариант использования: Команды обслуживания клиентов используют наш API для автоматической транскрипции звонков в службу поддержки и создания сводок, которые затем синхронизируются с их CRM через веб-хуки.
Получить учетные данные API на панели управления →
Требования к плану и доступ к API
Чтобы использовать ScreenApp API, вам потребуется:
- Активная подписка на бизнес-план
- Учетные данные API из вашей панели управления ScreenApp
Получение учетных данных API
- Войдите в свою учетную запись ScreenApp
- Перейдите в Настройки → Интеграция
- Здесь вы найдете:
- 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 использует аутентификацию на основе токенов вместе со специфическими для команды идентификаторами.
Учетные данные, которые вам понадобятся
- API-токен: Ваш секретный ключ API
- ID команды: Ваш уникальный идентификатор команды
Пример аутентификации
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 для аутентификации
Параметры запроса:
redirectUrl- URL-адрес с кодировкой для перенаправления пользователя после успешной аутентификацииreferrerUrl- URL-адрес реферера с кодировкойintent- Намерение для пользователя (например, “signup”)
GET /auth/facebook
Перенаправление в Facebook для аутентификации
Параметры запроса:
redirectUrl- URL-адрес с кодировкой для перенаправления пользователя после успешной аутентификацииreferrerUrl- URL-адрес реферера с кодировкойintent- Намерение для пользователя (например, “signup”)
Основные концепции
Прежде чем углубляться в конкретные конечные точки, давайте разберемся с ключевыми понятиями в ScreenApp:
- Записи: Записи видео и аудио, которые можно загружать и обрабатывать
- Команды: Группы, которые могут обмениваться записями и управлять ими
- Веб-хуки: Уведомления в режиме реального времени о событиях записи и результатах обработки
- Теги: Метаданные, которые можно прикрепить к записям, командам или профилям пользователей
Справочник API
Управление командами
POST /team/{teamId}/tag
Добавить тег в команду
Параметры пути:
teamId- ID команды
Тело запроса:
{
"key": "color",
"value": "red"
}
DELETE /team/{teamId}/tag
Удалить тег из команды
Параметры пути:
teamId- ID команды
Тело запроса:
{
"key": "color"
}
Интеграция веб-хуков команды
POST /team/{teamId}/integrations/webhook
Зарегистрировать новый URL-адрес веб-хука для команды
Параметры пути:
teamId- ID команды
Тело запроса:
{
"url": "https://example.com/webhook",
"name": "My Webhook"
}
Ответы:
200- Веб-хук успешно зарегистрирован400- Недопустимое тело запроса500- Внутренняя ошибка сервера
DELETE /team/{teamId}/integrations/webhook
Отменить регистрацию URL-адреса веб-хука для команды
Параметры пути:
teamId- ID команды
Параметры запроса:
url- URL-адрес веб-хука для отмены регистрации
Ответы:
200- Веб-хук успешно отменен400- Недопустимый запрос404- URL-адрес веб-хука не найден500- Внутренняя ошибка сервера
GET /team/{teamId}/integrations/zapier/sample/list
Получить пример данных для Zapier в виде массива
Параметры пути:
teamId- ID команды
Ответы:
200- Пример данных успешно получен404- Пример файла не найден
Пользовательские интеграции
POST /integrations/webhook
Зарегистрировать новый веб-хук для пользователя
Тело запроса:
{
"url": "https://example.com/webhook",
"name": "My Webhook"
}
Ответы:
200- Веб-хук успешно зарегистрирован400- Недопустимое тело запроса
DELETE /integrations/webhook
Отменить регистрацию веб-хука для пользователя
Параметры запроса:
url- URL-адрес веб-хука для отмены регистрации
Ответы:
200- Веб-хук успешно отменен400- Недопустимый запрос404- URL-адрес веб-хука не найден
События веб-хука
Ваша конечная точка веб-хука будет получать события в следующем формате:
{
"event": "recording.completed",
"fileId": "file789",
"teamId": "team123",
"data": {
"url": "https://screenapp.io/recording/file789",
"duration": 300,
"status": "processed"
}
}
Общие события включают:
recording.startedrecording.completedrecording.processedrecording.failed
Управление файлами
POST /files/{fileId}/tag
Добавить тег в файл
Параметры пути:
fileId- ID файла
Тело запроса:
{
"key": "color",
"value": "red"
}
DELETE /files/{fileId}/tag
Удалить тег из файла
Параметры пути:
fileId- ID файла
Тело запроса:
{
"key": "color"
}
POST /files/{fileId}/ask/multimodal
Задать вопрос о файле, используя несколько моделей ИИ
Параметры пути:
fileId- ID файла для анализа
Тело запроса:
{
"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]
}
}
}
Ответы:
200- Вопрос успешно обработан403- Превышен лимит использования ИИ500- Ошибка сервера
Загрузка файла
POST /files/upload/{teamId}/{folderId}/url
Сгенерировать предварительно подписанные URL-адреса для загрузки файлов
Параметры пути:
teamId- ID командыfolderId- ID папки
Тело запроса:
{
"files": [
{
"contentType": "video/mp4",
"name": "meeting-recording.mp4"
}
]
}
Ответы:
200- URL-адреса для загрузки успешно сгенерированы400- Недопустимые параметры запроса500- Ошибка сервера
POST /files/upload/{teamId}/{folderId}/finalize
Завершить загруженные файлы
Параметры пути:
teamId- ID командыfolderId- ID папки
Тело запроса:
{
"file": {
"fileId": "file123",
"contentType": "video/mp4",
"name": "Sales Call",
"description": "Weekly sales call with customer",
"recorderName": "John Doe",
"recorderEmail": "[email protected]"
}
}
Ответы:
200- Загрузка файла успешно завершена400- Недопустимые параметры запроса403- Превышен лимит загрузки500- Ошибка сервера
Многокомпонентная загрузка (для больших файлов)
PUT /files/upload/multipart/init/{teamId}/{folderId}
Инициализировать многокомпонентную загрузку для большого файла
Параметры пути:
teamId- ID командыfolderId- ID папки
Тело запроса:
{
"contentType": "video/mp4"
}
Ответы:
200- Загрузка успешно инициализирована400- Недопустимые параметры запроса500- Ошибка сервера
Пример ответа:
{
"success": true,
"data": {
"fileId": "file789",
"uploadId": "upload123"
}
}
PUT /files/upload/multipart/url/{teamId}/{folderId}/{fileId}/{uploadId}/{partNumber}
Получить URL-адрес для загрузки конкретной части
Параметры пути:
teamId- ID командыfolderId- ID папкиfileId- ID загружаемого файлаuploadId- ID сеанса многокомпонентной загрузкиpartNumber- Номер части (1-10000)
Тело запроса:
{
"contentType": "video/mp4"
}
Ответы:
200- URL-адрес для загрузки успешно сгенерирован400- Недопустимые параметры запроса500- Ошибка сервера
Пример ответа:
{
"success": true,
"data": {
"uploadUrl": "https://presigned-s3-url.com/part1"
}
}
PUT /files/upload/multipart/finalize/{teamId}/{folderId}/{fileId}/{uploadId}
Завершить многокомпонентную загрузку
Параметры пути:
teamId- ID командыfolderId- ID папкиfileId- ID загружаемого файлаuploadId- ID сеанса многокомпонентной загрузки
Тело запроса:
{
"file": {
"contentType": "video/mp4",
"recorderName": "John Doe",
"recorderEmail": "[email protected]",
"name": "My Recording",
"description": "A recorded video session",
"notes": [
{
"text": "Important point discussed",
"timestamp": 1234567890
}
]
}
}
Ответы:
200- Загрузка успешно завершена400- Недопустимые параметры запроса404- Активная загрузка не найдена500- Ошибка сервера
PUT /files/upload/multipart/fallback/{teamId}/{folderId}/{fileId}/{partNumber}
Загрузить часть файла через бэкенд (запасной вариант)
Параметры пути:
teamId- ID командыfolderId- ID папкиfileId- ID загружаемого файлаpartNumber- Номер части (1-10000)
Данные формы:
file- Часть файла для загрузкиcontentType- MIME-тип загружаемого файла
Ответы:
200- Часть успешно загружена400- Недопустимые параметры запроса500- Ошибка сервера
Управление аккаунтом
POST /v2/account/tag
Добавить тег к аутентифицированному пользователю
Тело запроса:
{
"key": "color",
"value": "red"
}
Ответы:
200- Тег успешно добавлен400- Недопустимые параметры запроса
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"
}
Ответы:
200- Профиль успешно обновлен400- Недопустимые параметры запроса
Расширенные функции
Анализ ИИ
Используйте ИИ для анализа ваших записей и получения полезной информации:
// Запрос анализа ИИ записи
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);
}
Обработка ошибок
Общие коды ошибок
400: Недопустимые параметры запроса403: Превышен лимит использования ИИ или несанкционированный доступ404: Ресурс не найден500: Ошибка сервера
Формат ответа об ошибке
Ответы об ошибках обычно имеют следующий формат:
{
"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: '[email protected]'
}
})
}
);