Dokumentasi ScreenApp API v2.0.0
API ScreenApp memungkinkan Anda untuk secara otomatis mentranskripsikan, meringkas, dan menganalisis konten video dan audio. Sempurna untuk bisnis yang ingin memproses panggilan pelanggan, video pelatihan, dan rekaman rapat dalam skala besar.
Kasus Penggunaan Utama
- Transkripsi & Ringkasan Otomatis: Ubah video atau audio apa pun menjadi teks yang dapat dicari dan ringkasan yang ringkas. Ideal untuk tim layanan pelanggan, lembaga pendidikan, dan pembuat konten.
- Manajemen Pengetahuan: Bangun repositori konten video yang dapat dicari dengan transkrip otomatis, ringkasan, dan wawasan bertenaga AI. Sempurna untuk materi pelatihan dan basis pengetahuan perusahaan.
- Pemrosesan Waktu Nyata: Terima transkrip dan ringkasan melalui webhook segera setelah rekaman diproses. Cocok untuk berintegrasi dengan sistem CRM dan platform layanan pelanggan.
- Perekaman Tersemat: Tambahkan kemampuan perekaman kelas profesional ke aplikasi Anda dengan perekam tersemat kami yang menangani pengambilan layar dan audio.
✨ Kasus Penggunaan Populer: Tim layanan pelanggan menggunakan API kami untuk secara otomatis mentranskripsikan panggilan dukungan dan menghasilkan ringkasan, yang kemudian disinkronkan ke CRM mereka melalui webhook.
Dapatkan Kredensial API di Dasbor →
Persyaratan Paket & Akses API
Untuk menggunakan ScreenApp API, Anda memerlukan:
- Langganan paket Bisnis yang aktif
- Kredensial API dari dasbor ScreenApp Anda
Mendapatkan Kredensial API Anda
- Masuk ke akun ScreenApp Anda
- Arahkan ke Pengaturan → Integrasi
- Di sini Anda akan menemukan:
- Token API
- ID Tim
Jaga keamanan kredensial ini dan jangan pernah membagikannya secara publik.
Mulai Cepat
Ingin segera memulai? Ikuti langkah-langkah ini untuk mengintegrasikan ScreenApp ke situs web Anda:
1. Instal Plugin
Tambahkan kode ini ke HTML situs web Anda:
<script>
// Kode instalasi plugin di sini
</script>
2. Tambahkan Tombol Pemicu
Tambahkan tombol atau elemen pemicu ke halaman Anda:
<button onclick="loadScreenApp()">Mulai Merekam</button>
3. Konfigurasikan Callback
Sesuaikan fungsi callback untuk menangani penyelesaian perekaman:
function callback({ id, url }) {
// Contoh: Kirim ke backend Anda
fetch('/api/recordings', {
method: 'POST',
body: JSON.stringify({ recordingId: id, recordingUrl: url })
});
// Contoh: Perbarui UI
document.getElementById('status').innerHTML =
`Rekaman disimpan! Lihat di ${url}`;
}
Otentikasi
Semua permintaan API memerlukan otentikasi. ScreenApp menggunakan otentikasi berbasis token bersama dengan pengidentifikasi khusus tim.
Kredensial yang Anda Butuhkan
- Token API: Kunci API rahasia Anda
- ID Tim: Pengidentifikasi tim unik Anda
Contoh Otentikasi
curl -X POST "https://api.screenapp.io/v2/files/upload" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "X-Team-ID: YOUR_TEAM_ID"
Titik Akhir Otentikasi
GET /auth/google
Alihkan ke Google untuk otentikasi
Parameter Kueri:
redirectUrl- URL Terenkripsi untuk mengalihkan pengguna setelah otentikasi berhasilreferrerUrl- URL Perujuk Terenkripsiintent- Niat untuk pengguna (mis., “signup”)
GET /auth/facebook
Alihkan ke Facebook untuk otentikasi
Parameter Kueri:
redirectUrl- URL Terenkripsi untuk mengalihkan pengguna setelah otentikasi berhasilreferrerUrl- URL Perujuk Terenkripsiintent- Niat untuk pengguna (mis., “signup”)
Konsep Inti
Sebelum menyelami titik akhir tertentu, mari pahami konsep-konsep utama di ScreenApp:
- Rekaman: Pengambilan video dan audio yang dapat diunggah dan diproses
- Tim: Grup yang dapat berbagi dan mengelola rekaman
- Webhook: Notifikasi waktu nyata untuk peristiwa perekaman dan hasil pemrosesan
- Tag: Metadata yang dapat dilampirkan ke rekaman, tim, atau profil pengguna
Referensi API
Manajemen Tim
POST /team/{teamId}/tag
Tambahkan tag ke tim
Parameter Jalur:
teamId- ID tim
Isi Permintaan:
{
"key": "color",
"value": "red"
}
DELETE /team/{teamId}/tag
Hapus tag dari tim
Parameter Jalur:
teamId- ID tim
Isi Permintaan:
{
"key": "color"
}
Integrasi Webhook Tim
POST /team/{teamId}/integrations/webhook
Daftarkan URL webhook baru untuk tim
Parameter Jalur:
teamId- ID tim
Isi Permintaan:
{
"url": "https://example.com/webhook",
"name": "Webhook Saya"
}
Respons:
200- Webhook berhasil didaftarkan400- Isi permintaan tidak valid500- Kesalahan server internal
DELETE /team/{teamId}/integrations/webhook
Batalkan pendaftaran URL webhook untuk tim
Parameter Jalur:
teamId- ID tim
Parameter Kueri:
url- URL webhook yang akan dibatalkan pendaftarannya
Respons:
200- Webhook berhasil dibatalkan pendaftarannya400- Permintaan tidak valid404- URL Webhook tidak ditemukan500- Kesalahan server internal
GET /team/{teamId}/integrations/zapier/sample/list
Dapatkan data sampel untuk Zapier sebagai array
Parameter Jalur:
teamId- ID tim
Respons:
200- Data sampel berhasil diambil404- File sampel tidak ditemukan
Integrasi Pengguna
POST /integrations/webhook
Daftarkan webhook baru untuk pengguna
Isi Permintaan:
{
"url": "https://example.com/webhook",
"name": "Webhook Saya"
}
Respons:
200- Webhook berhasil didaftarkan400- Isi permintaan tidak valid
DELETE /integrations/webhook
Batalkan pendaftaran webhook untuk pengguna
Parameter Kueri:
url- URL webhook yang akan dibatalkan pendaftarannya
Respons:
200- Webhook berhasil dibatalkan pendaftarannya400- Permintaan tidak valid404- URL Webhook tidak ditemukan
Peristiwa Webhook
Titik akhir webhook Anda akan menerima peristiwa dalam format ini:
{
"event": "recording.completed",
"fileId": "file789",
"teamId": "team123",
"data": {
"url": "https://screenapp.io/recording/file789",
"duration": 300,
"status": "processed"
}
}
Peristiwa umum meliputi:
recording.startedrecording.completedrecording.processedrecording.failed
Manajemen File
POST /files/{fileId}/tag
Tambahkan tag ke file
Parameter Jalur:
fileId- ID file
Isi Permintaan:
{
"key": "color",
"value": "red"
}
DELETE /files/{fileId}/tag
Hapus tag dari file
Parameter Jalur:
fileId- ID file
Isi Permintaan:
{
"key": "color"
}
POST /files/{fileId}/ask/multimodal
Ajukan pertanyaan tentang file menggunakan beberapa model AI
Parameter Jalur:
fileId- ID file yang akan dianalisis
Isi Permintaan:
{
"promptText": "Apa poin-poin penting yang dibahas?",
"mediaAnalysisOptions": {
"transcript": {
"segments": [
{
"start": 0,
"end": 120
}
]
},
"video": {
"segments": [
{
"start": 0,
"end": 120
}
]
},
"screenshots": {
"timestamps": [30, 60, 90]
}
}
}
Respons:
200- Pertanyaan berhasil diproses403- Batas penggunaan AI terlampaui500- Kesalahan server
Unggah File
POST /files/upload/{teamId}/{folderId}/url
Hasilkan URL pra-tandatangan untuk unggahan file
Parameter Jalur:
teamId- ID timfolderId- ID folder
Isi Permintaan:
{
"files": [
{
"contentType": "video/mp4",
"name": "meeting-recording.mp4"
}
]
}
Respons:
200- URL unggah berhasil dihasilkan400- Parameter permintaan tidak valid500- Kesalahan server
POST /files/upload/{teamId}/{folderId}/finalize
Selesaikan unggahan file
Parameter Jalur:
teamId- ID timfolderId- ID folder
Isi Permintaan:
{
"file": {
"fileId": "file123",
"contentType": "video/mp4",
"name": "Panggilan Penjualan",
"description": "Panggilan penjualan mingguan dengan pelanggan",
"recorderName": "John Doe",
"recorderEmail": "[email protected]"
}
}
Respons:
200- Unggahan file berhasil diselesaikan400- Parameter permintaan tidak valid403- Batas unggah terlampaui500- Kesalahan server
Unggahan Multipart (untuk file besar)
PUT /files/upload/multipart/init/{teamId}/{folderId}
Inisialisasi unggahan multipart untuk file besar
Parameter Jalur:
teamId- ID timfolderId- ID folder
Isi Permintaan:
{
"contentType": "video/mp4"
}
Respons:
200- Unggahan berhasil diinisialisasi400- Parameter permintaan tidak valid500- Kesalahan server
Contoh Respons:
{
"success": true,
"data": {
"fileId": "file789",
"uploadId": "upload123"
}
}
PUT /files/upload/multipart/url/{teamId}/{folderId}/{fileId}/{uploadId}/{partNumber}
Dapatkan URL unggah untuk bagian tertentu
Parameter Jalur:
teamId- ID timfolderId- ID folderfileId- ID file yang sedang diunggahuploadId- ID sesi unggahan multipartpartNumber- Nomor bagian (1-10000)
Isi Permintaan:
{
"contentType": "video/mp4"
}
Respons:
200- URL unggah berhasil dihasilkan400- Parameter permintaan tidak valid500- Kesalahan server
Contoh Respons:
{
"success": true,
"data": {
"uploadUrl": "https://presigned-s3-url.com/part1"
}
}
PUT /files/upload/multipart/finalize/{teamId}/{folderId}/{fileId}/{uploadId}
Selesaikan unggahan multipart
Parameter Jalur:
teamId- ID timfolderId- ID folderfileId- ID file yang sedang diunggahuploadId- ID sesi unggahan multipart
Isi Permintaan:
{
"file": {
"contentType": "video/mp4",
"recorderName": "John Doe",
"recorderEmail": "[email protected]",
"name": "Rekaman Saya",
"description": "Sesi video yang direkam",
"notes": [
{
"text": "Poin penting dibahas",
"timestamp": 1234567890
}
]
}
}
Respons:
200- Unggahan berhasil diselesaikan400- Parameter permintaan tidak valid404- Unggahan aktif tidak ditemukan500- Kesalahan server
PUT /files/upload/multipart/fallback/{teamId}/{folderId}/{fileId}/{partNumber}
Unggah bagian file melalui backend (fallback)
Parameter Jalur:
teamId- ID timfolderId- ID folderfileId- ID file yang sedang diunggahpartNumber- Nomor bagian (1-10000)
Data Formulir:
file- Bagian file yang akan diunggahcontentType- Tipe MIME dari file yang sedang diunggah
Respons:
200- Bagian berhasil diunggah400- Parameter permintaan tidak valid500- Kesalahan server
Manajemen Akun
POST /v2/account/tag
Tambahkan tag ke pengguna yang diautentikasi
Isi Permintaan:
{
"key": "color",
"value": "red"
}
Respons:
200- Tag berhasil ditambahkan400- Parameter permintaan tidak valid
PUT /account/profile
Perbarui profil pengguna yang diautentikasi
Isi Permintaan:
{
"firstName": "John",
"lastName": "Doe",
"name": "John Doe",
"gender": "male",
"userType": "user",
"company": "Acme Inc",
"role": "Developer",
"goals": "Pelajari teknologi baru",
"phoneNumber": "+1234567890",
"location": "San Francisco, CA",
"website": "https://example.com",
"picture": "https://example.com/avatar.jpg",
"provider": "local",
"providerId": "12345",
"primaryField": "development"
}
Respons:
200- Profil berhasil diperbarui400- Parameter permintaan tidak valid
Fitur Lanjutan
Analisis AI
Gunakan AI untuk menganalisis rekaman Anda untuk mendapatkan wawasan:
// Minta analisis AI dari rekaman
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: "Apa poin-poin diskusi utama?",
mediaAnalysisOptions: {
transcript: {
segments: [{ start: 0, end: 300 }]
},
video: {
segments: [{ start: 0, end: 300 }]
}
}
})
});
Operasi Batch
Kelola beberapa rekaman secara efisien:
// Tandai beberapa rekaman
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);
}
Penanganan Kesalahan
Kode Kesalahan Umum
400: Parameter permintaan tidak valid403: Batas penggunaan AI terlampaui atau akses tidak sah404: Sumber daya tidak ditemukan500: Kesalahan server
Format Respons Kesalahan
Respons kesalahan biasanya mengikuti format ini:
{
"success": false,
"message": "Pesan kesalahan terperinci"
}
Contoh
Menyiapkan Webhook Tim
Webhook memungkinkan Anda menerima pembaruan waktu nyata saat rekaman diproses:
// Daftarkan webhook baru untuk tim Anda
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();
}
// Contoh penggunaan
const result = await registerTeamWebhook(
'team123',
'https://your-domain.com/webhooks/screenapp',
'Pembaruan Rekaman'
);
Mengunggah dan Memproses File Besar
Untuk file yang lebih besar dari 100MB, gunakan alur unggahan multipart:
// 1. Inisialisasi unggahan
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. Bagi file menjadi beberapa bagian dan unggah setiap bagian
const CHUNK_SIZE = 5 * 1024 * 1024; // Potongan 5MB
const totalParts = Math.ceil(file.size / CHUNK_SIZE);
for (let partNumber = 1; partNumber <= totalParts; partNumber++) {
// Dapatkan URL unggah untuk bagian ini
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();
// Buat potongan dari file
const start = (partNumber - 1) * CHUNK_SIZE;
const end = Math.min(start + CHUNK_SIZE, file.size);
const chunk = file.slice(start, end);
// Unggah potongan langsung ke S3
await fetch(uploadUrl, {
method: 'PUT',
body: chunk,
headers: {
'Content-Type': 'video/mp4'
}
});
}
// 3. Selesaikan unggahan
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: 'Rekaman Rapat Pelanggan',
description: 'Tinjauan triwulanan dengan klien',
recorderName: 'Jane Smith',
recorderEmail: '[email protected]'
}
})
}
);