Nasıl Yapılır Kılavuzu

ScreenApp API ve SDK Dokümantasyonu

ScreenApps API, video ve ses içeriklerini otomatik olarak yazıya dökmenizi, özetlemenizi ve analiz etmenizi sağlar

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:

  1. Aktif bir Business plan aboneliği
  2. ScreenApp kontrol panelinizden API kimlik bilgileri

API Kimlik Bilgilerinizi Alma

  1. ScreenApp hesabınıza giriş yapın
  2. Ayarlar → Entegrasyon bölümüne gidin
  3. 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ış URL
  • referrerUrl - Kodlanmış Yönlendiren URL’si
  • intent - 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ış URL
  • referrerUrl - Kodlanmış Yönlendiren URL’si
  • intent - Kullanıcı için amaç (örneğin, “kayıt”)

Temel Kavramlar

Belirli uç noktalara dalmadan önce, ScreenApp’teki temel kavramları anlayalım:

  1. Kayıtlar: Yüklenebilen ve işlenebilen video ve ses yakalamaları
  2. Takımlar: Kayıtları paylaşabilen ve yönetebilen gruplar
  3. Web Kancaları: Kayıt olayları ve işleme sonuçları için gerçek zamanlı bildirimler
  4. 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 kaydedildi
  • 400 - Geçersiz istek gövdesi
  • 500 - 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 silindi
  • 400 - Geçersiz istek
  • 404 - 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 kaydedildi
  • 400 - 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 silindi
  • 400 - Geçersiz istek
  • 404 - 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.started
  • recording.completed
  • recording.processed
  • recording.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şlendi
  • 403 - 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ği
  • folderId - 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şturuldu
  • 400 - Geçersiz istek parametreleri
  • 500 - Sunucu hatası

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

Yüklenen dosyaları tamamla

Yol Parametreleri:

  • teamId - Takımın Kimliği
  • folderId - 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 parametreleri
  • 403 - 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ği
  • folderId - 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 parametreleri
  • 500 - 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ği
  • folderId - Klasörün Kimliği
  • fileId - Yüklenen dosyanın Kimliği
  • uploadId - Çok parçalı yükleme oturumunun Kimliği
  • partNumber - Bölüm numarası (1-10000)

İstek Gövdesi:

{
  "contentType": "video/mp4"
}

Yanıtlar:

  • 200 - Yükleme URL’si başarıyla oluşturuldu
  • 400 - Geçersiz istek parametreleri
  • 500 - 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ği
  • folderId - Klasörün Kimliği
  • fileId - Yüklenen dosyanın Kimliği
  • uploadId - Ç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 parametreleri
  • 404 - 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ği
  • folderId - Klasörün Kimliği
  • fileId - Yüklenen dosyanın Kimliği
  • partNumber - 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üklendi
  • 400 - Geçersiz istek parametreleri
  • 500 - 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 eklendi
  • 400 - 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üncellendi
  • 400 - 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 parametreleri
  • 403: AI kullanım limiti aşıldı veya yetkisiz erişim
  • 404: 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]'
      }
    })
  }
);

Kontrol Panelinde API Kimlik Bilgilerini Alın →