ScreenApp API Dokümantasyonu v2.0.0
ScreenApp’in API’si, video ve ses içeriklerini otomatik olarak yazıya dökmenizi, özetlemenizi ve analiz etmenizi sağlar. Müşteri aramalarını, eğitim videolarını ve toplantı kayıtlarını ölçekli olarak işlemek isteyen işletmeler için mükemmeldir.
Temel Kullanım Alanları
- Otomatik Yazıya Dökme & Özetleme: Herhangi bir video veya sesi aranabilir metne ve kısa özetlere dönüştürün. Müşteri hizmetleri ekipleri, eğitim kurumları ve içerik oluşturucular için idealdir.
- Bilgi Yönetimi: Otomatik transkriptler, özetler ve yapay zeka destekli içgörüler ile aranabilir bir video içeriği deposu oluşturun. Eğitim materyalleri ve şirket bilgi tabanları için mükemmeldir.
- Gerçek Zamanlı İşleme: Kayıtlar işlenir işlenmez web kancaları aracılığıyla transkript ve özetleri alın. CRM sistemleri ve müşteri hizmetleri platformlarıyla entegre olmak için harikadır.
- Gömülü Kayıt: Hem ekran hem de ses yakalamayı işleyen gömülebilir kaydedicimizle uygulamanıza profesyonel düzeyde kayıt yetenekleri ekleyin.
✨ Popüler Kullanım Alanı: Müşteri hizmetleri ekipleri, destek çağrılarını otomatik olarak yazıya dökmek ve özetler oluşturmak için API’mizi kullanır ve bunlar daha sonra web kancaları aracılığıyla CRM’lerine senkronize edilir.
Kontrol Panelinde API Kimlik Bilgilerini Alın →
Plan Gereksinimleri ve API Erişimi
ScreenApp API’sini kullanmak için şunlara ihtiyacınız olacak:
- Aktif bir Business plan aboneliği
- ScreenApp kontrol panelinizden API kimlik bilgileri
API Kimlik Bilgilerinizi Alma
- ScreenApp hesabınıza giriş yapın
- Ayarlar → Entegrasyon bölümüne gidin
- Burada şunları bulacaksınız:
- API Anahtarı
- Takım Kimliği
Bu kimlik bilgilerini güvende tutun ve asla herkese açık olarak paylaşmayın.
Hızlı Başlangıç
Hemen başlamak ister misiniz? ScreenApp’i web sitenize entegre etmek için şu adımları izleyin:
1. Eklentiyi Yükleyin
Bu kodu web sitenizin HTML’sine ekleyin:
<script>
// Eklenti yükleme kodu buraya
</script>
2. Tetikleme Düğmesini Ekleyin
Sayfanıza bir düğme veya tetikleme öğesi ekleyin:
<button onclick="loadScreenApp()">Kaydı Başlat</button>
3. Geri Çağırmayı Yapılandırın
Kayıt tamamlamayı işlemek için geri çağırma işlevini özelleştirin:
function callback({ id, url }) {
// Örnek: Arka ucunuza gönderin
fetch('/api/recordings', {
method: 'POST',
body: JSON.stringify({ recordingId: id, recordingUrl: url })
});
// Örnek: UI'yı Güncelleyin
document.getElementById('status').innerHTML =
`Kayıt kaydedildi! Şu adreste görüntüleyin: ${url}`;
}
Kimlik Doğrulama
Tüm API istekleri kimlik doğrulama gerektirir. ScreenApp, takım özel tanımlayıcılarıyla birlikte belirteç tabanlı kimlik doğrulama kullanır.
İhtiyacınız Olacak Kimlik Bilgileri
- API Anahtarı: Gizli API anahtarınız
- Takım Kimliği: Benzersiz takım tanımlayıcınız
Kimlik Doğrulama Örneği
curl -X POST "https://api.screenapp.io/v2/files/upload" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "X-Team-ID: YOUR_TEAM_ID"
Kimlik Doğrulama Uç Noktaları
GET /auth/google
Kimlik doğrulama için Google’a yönlendirin
Sorgu Parametreleri:
redirectUrl- Başarılı kimlik doğrulamanın ardından kullanıcıyı yönlendirmek için kodlanmış URLreferrerUrl- Kodlanmış Yönlendiren URL’siintent- Kullanıcı için amaç (örneğin, “kayıt”)
GET /auth/facebook
Kimlik doğrulama için Facebook’a yönlendirin
Sorgu Parametreleri:
redirectUrl- Başarılı kimlik doğrulamanın ardından kullanıcıyı yönlendirmek için kodlanmış URLreferrerUrl- Kodlanmış Yönlendiren URL’siintent- Kullanıcı için amaç (örneğin, “kayıt”)
Temel Kavramlar
Belirli uç noktalara dalmadan önce, ScreenApp’teki temel kavramları anlayalım:
- Kayıtlar: Yüklenebilen ve işlenebilen video ve ses yakalamaları
- Takımlar: Kayıtları paylaşabilen ve yönetebilen gruplar
- Web Kancaları: Kayıt olayları ve işleme sonuçları için gerçek zamanlı bildirimler
- Etiketler: Kayıtlara, takımlara veya kullanıcı profillerine eklenebilen meta veriler
API Referansı
Takım Yönetimi
POST /team/{teamId}/tag
Takıma etiket ekle
Yol Parametreleri:
teamId- Takımın Kimliği
İstek Gövdesi:
{
"key": "color",
"value": "red"
}
DELETE /team/{teamId}/tag
Takımdan etiketi kaldır
Yol Parametreleri:
teamId- Takımın Kimliği
İstek Gövdesi:
{
"key": "color"
}
Takım Web Kancası Entegrasyonu
POST /team/{teamId}/integrations/webhook
Takım için yeni bir web kancası URL’si kaydet
Yol Parametreleri:
teamId- Takımın Kimliği
İstek Gövdesi:
{
"url": "https://example.com/webhook",
"name": "Web Kancam"
}
Yanıtlar:
200- Web kancası başarıyla kaydedildi400- Geçersiz istek gövdesi500- Dahili sunucu hatası
DELETE /team/{teamId}/integrations/webhook
Takım için bir web kancası URL’sinin kaydını sil
Yol Parametreleri:
teamId- Takımın Kimliği
Sorgu Parametreleri:
url- Kaydı silinecek web kancası URL’si
Yanıtlar:
200- Web kancasının kaydı başarıyla silindi400- Geçersiz istek404- Web kancası URL’si bulunamadı500- Dahili sunucu hatası
GET /team/{teamId}/integrations/zapier/sample/list
Zapier için örnek verileri bir dizi olarak al
Yol Parametreleri:
teamId- Takımın Kimliği
Yanıtlar:
200- Örnek veriler başarıyla alındı404- Örnek dosya bulunamadı
Kullanıcı Entegrasyonları
POST /integrations/webhook
Kullanıcı için yeni bir web kancası kaydet
İstek Gövdesi:
{
"url": "https://example.com/webhook",
"name": "Web Kancam"
}
Yanıtlar:
200- Web kancası başarıyla kaydedildi400- Geçersiz istek gövdesi
DELETE /integrations/webhook
Kullanıcı için bir web kancasının kaydını sil
Sorgu Parametreleri:
url- Kaydı silinecek web kancası URL’si
Yanıtlar:
200- Web kancasının kaydı başarıyla silindi400- Geçersiz istek404- Web kancası URL’si bulunamadı
Web Kancası Olayları
Web kancası uç noktanız, olayları bu biçimde alacaktır:
{
"event": "recording.completed",
"fileId": "file789",
"teamId": "team123",
"data": {
"url": "https://screenapp.io/recording/file789",
"duration": 300,
"status": "processed"
}
}
Yaygın olaylar şunları içerir:
recording.startedrecording.completedrecording.processedrecording.failed
Dosya Yönetimi
POST /files/{fileId}/tag
Dosyaya etiket ekle
Yol Parametreleri:
fileId- Dosyanın Kimliği
İstek Gövdesi:
{
"key": "color",
"value": "red"
}
DELETE /files/{fileId}/tag
Dosyadan etiketi kaldır
Yol Parametreleri:
fileId- Dosyanın Kimliği
İstek Gövdesi:
{
"key": "color"
}
POST /files/{fileId}/ask/multimodal
Birden çok AI modeli kullanarak bir dosya hakkında soru sorun
Yol Parametreleri:
fileId- Analiz edilecek dosyanın Kimliği
İstek Gövdesi:
{
"promptText": "Tartışılan temel noktalar nelerdir?",
"mediaAnalysisOptions": {
"transcript": {
"segments": [
{
"start": 0,
"end": 120
}
]
},
"video": {
"segments": [
{
"start": 0,
"end": 120
}
]
},
"screenshots": {
"timestamps": [30, 60, 90]
}
}
}
Yanıtlar:
200- Soru başarıyla işlendi403- AI kullanım limiti aşıldı500- Sunucu hatası
Dosya Yükleme
POST /files/upload/{teamId}/{folderId}/url
Dosya yüklemeleri için önceden imzalanmış URL’ler oluştur
Yol Parametreleri:
teamId- Takımın KimliğifolderId- Klasörün Kimliği
İstek Gövdesi:
{
"files": [
{
"contentType": "video/mp4",
"name": "meeting-recording.mp4"
}
]
}
Yanıtlar:
200- Yükleme URL’leri başarıyla oluşturuldu400- Geçersiz istek parametreleri500- Sunucu hatası
POST /files/upload/{teamId}/{folderId}/finalize
Yüklenen dosyaları tamamla
Yol Parametreleri:
teamId- Takımın KimliğifolderId- Klasörün Kimliği
İstek Gövdesi:
{
"file": {
"fileId": "file123",
"contentType": "video/mp4",
"name": "Satış Çağrısı",
"description": "Müşteriyle haftalık satış çağrısı",
"recorderName": "John Doe",
"recorderEmail": "[email protected]"
}
}
Yanıtlar:
200- Dosya yükleme başarıyla tamamlandı400- Geçersiz istek parametreleri403- Yükleme limiti aşıldı500- Sunucu hatası
Çok Parçalı Yükleme (büyük dosyalar için)
PUT /files/upload/multipart/init/{teamId}/{folderId}
Büyük bir dosya için çok parçalı bir yükleme başlat
Yol Parametreleri:
teamId- Takımın KimliğifolderId- Klasörün Kimliği
İstek Gövdesi:
{
"contentType": "video/mp4"
}
Yanıtlar:
200- Yükleme başarıyla başlatıldı400- Geçersiz istek parametreleri500- Sunucu hatası
Yanıt Örneği:
{
"success": true,
"data": {
"fileId": "file789",
"uploadId": "upload123"
}
}
PUT /files/upload/multipart/url/{teamId}/{folderId}/{fileId}/{uploadId}/{partNumber}
Belirli bir bölüm için yükleme URL’si al
Yol Parametreleri:
teamId- Takımın KimliğifolderId- Klasörün KimliğifileId- Yüklenen dosyanın KimliğiuploadId- Çok parçalı yükleme oturumunun KimliğipartNumber- Bölüm numarası (1-10000)
İstek Gövdesi:
{
"contentType": "video/mp4"
}
Yanıtlar:
200- Yükleme URL’si başarıyla oluşturuldu400- Geçersiz istek parametreleri500- Sunucu hatası
Yanıt Örneği:
{
"success": true,
"data": {
"uploadUrl": "https://presigned-s3-url.com/part1"
}
}
PUT /files/upload/multipart/finalize/{teamId}/{folderId}/{fileId}/{uploadId}
Çok parçalı bir yüklemeyi tamamla
Yol Parametreleri:
teamId- Takımın KimliğifolderId- Klasörün KimliğifileId- Yüklenen dosyanın KimliğiuploadId- Çok parçalı yükleme oturumunun Kimliği
İstek Gövdesi:
{
"file": {
"contentType": "video/mp4",
"recorderName": "John Doe",
"recorderEmail": "[email protected]",
"name": "Kaydım",
"description": "Kaydedilmiş bir video oturumu",
"notes": [
{
"text": "Tartışılan önemli nokta",
"timestamp": 1234567890
}
]
}
}
Yanıtlar:
200- Yükleme başarıyla tamamlandı400- Geçersiz istek parametreleri404- Etkin yükleme bulunamadı500- Sunucu hatası
PUT /files/upload/multipart/fallback/{teamId}/{folderId}/{fileId}/{partNumber}
Dosya bölümünü arka uç aracılığıyla yükle (geri dönüş)
Yol Parametreleri:
teamId- Takımın KimliğifolderId- Klasörün KimliğifileId- Yüklenen dosyanın KimliğipartNumber- Bölüm numarası (1-10000)
Form Verileri:
file- Yüklenecek dosya bölümücontentType- Yüklenen dosyanın MIME türü
Yanıtlar:
200- Bölüm başarıyla yüklendi400- Geçersiz istek parametreleri500- Sunucu hatası
Hesap Yönetimi
POST /v2/account/tag
Kimliği doğrulanmış kullanıcıya bir etiket ekle
İstek Gövdesi:
{
"key": "color",
"value": "red"
}
Yanıtlar:
200- Etiket başarıyla eklendi400- Geçersiz istek parametreleri
PUT /account/profile
Kimliği doğrulanmış kullanıcının profilini güncelle
İstek Gövdesi:
{
"firstName": "John",
"lastName": "Doe",
"name": "John Doe",
"gender": "male",
"userType": "user",
"company": "Acme Inc",
"role": "Developer",
"goals": "Yeni teknolojiler öğrenmek",
"phoneNumber": "+1234567890",
"location": "San Francisco, CA",
"website": "https://example.com",
"picture": "https://example.com/avatar.jpg",
"provider": "local",
"providerId": "12345",
"primaryField": "development"
}
Yanıtlar:
200- Profil başarıyla güncellendi400- Geçersiz istek parametreleri
Gelişmiş Özellikler
AI Analizi
İçgörüler için kayıtlarınızı analiz etmek için AI’yı kullanın:
// Bir kaydın AI analizini isteyin
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: "Temel tartışma noktaları nelerdir?",
mediaAnalysisOptions: {
transcript: {
segments: [{ start: 0, end: 300 }]
},
video: {
segments: [{ start: 0, end: 300 }]
}
}
})
});
Toplu İşlemler
Birden çok kaydı verimli bir şekilde yönetin:
// Birden çok kaydı etiketleyin
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);
}
Hata Yönetimi
Yaygın Hata Kodları
400: Geçersiz istek parametreleri403: AI kullanım limiti aşıldı veya yetkisiz erişim404: Kaynak bulunamadı500: Sunucu hatası
Hata Yanıt Biçimi
Hata yanıtları genellikle şu biçimi izler:
{
"success": false,
"message": "Ayrıntılı hata mesajı"
}
Örnekler
Takım Web Kancaları Ayarlama
Web kancaları, kayıtlar işlendiğinde gerçek zamanlı güncellemeler almanızı sağlar:
// Takımınız için yeni bir web kancası kaydedin
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();
}
// Örnek kullanım
const result = await registerTeamWebhook(
'team123',
'https://your-domain.com/webhooks/screenapp',
'Kayıt Güncellemeleri'
);
Büyük Bir Dosyayı Yükleme ve İşleme
100 MB’tan büyük dosyalar için çok parçalı yükleme akışını kullanın:
// 1. Yüklemeyi başlat
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. Dosyayı parçalara ayırın ve her bölümü yükleyin
const CHUNK_SIZE = 5 * 1024 * 1024; // 5MB parçalar
const totalParts = Math.ceil(file.size / CHUNK_SIZE);
for (let partNumber = 1; partNumber <= totalParts; partNumber++) {
// Bu bölüm için yükleme URL'sini alın
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();
// Dosyadan parçayı oluşturun
const start = (partNumber - 1) * CHUNK_SIZE;
const end = Math.min(start + CHUNK_SIZE, file.size);
const chunk = file.slice(start, end);
// Parçayı doğrudan S3'e yükleyin
await fetch(uploadUrl, {
method: 'PUT',
body: chunk,
headers: {
'Content-Type': 'video/mp4'
}
});
}
// 3. Yüklemeyi tamamlayın
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: 'Müşteri Toplantı Kaydı',
description: 'Müşteriyle üç aylık inceleme',
recorderName: 'Jane Smith',
recorderEmail: '[email protected]'
}
})
}
);