Berikut adalah terjemahan dari konten MDX tersebut ke dalam bahasa Indonesia:
Mengotomasi Alur Kerja Video dengan API Snapencode
Pelajari cara membuat alur kerja video yang sepenuhnya otomatis, dari unggah hingga pengolahan dan penyampaian, menggunakan API Snapencode klien-muka dan skrip Node.js sederhana.

Dalam dunia yang sangat berfokus pada konten saat ini, mengunggah video manual dan memprosesnya dapat menjadi hambatan signifikan, sehingga memperlambat seluruh pipeline konten Anda. Kemampuan sebenarnya dari platform seperti Snapencode terletak pada desain API-terlebih dahulu, yang memungkinkan Anda untuk mengotomatisasi tugas-tugas berulang ini dan merebut waktu yang sangat berharga.
Dalam tutorial ini, kita akan membuat skrip “watch folder” yang nyata yang memantau direktori tertentu untuk file video baru, secara otomatis mengunggahnya ke Snapencode, dan memastikan status prosesnya.
Tujuan: Uploader “Watch Folder”
Tujuan kita adalah untuk menciptakan skrip Node.js yang mencapai hal-hal berikut:
- Memantau direktori tertentu pada mesin lokal atau server.
- Ketika file video baru (
.mp4
,.mov
, dll.) ditambahkan, secara otomatis mengunggahnya ke koleksi yang telah ditetapkan di Snapencode. - Setelah mengunggah, memantau endpoint status hingga video tersebut “selesai.”
- Setelah selesai, mencatat ID video dan siap untuk file berikutnya.
Saat ini adalah solusi sempurna untuk alur kerja yang menghasilkan konten secara programatis atau menempatkan folder bersama oleh tim non-teknis.
Prasyarat
- API Key Snapencode: Buatlah satu dari dashboard Anda di bawah Pengaturan > API Keys.
- Node.js: Kita akan menggunakan JavaScript dan runtime Node.js untuk skrip kita.
axios
danchokidar
: Dua paket sederhana untuk membuat permintaan API dan memantau file.
npm install axios chokidar form-data
Membangun Skrip Otomatisasi
Kita akan menciptakan skrip tunggal yang lengkap. Mari kita sebutnya upload-watcher.js
.
Langkah 1: Mengonfigurasi Skrip
Pertama, mari kita atur variabel konfigurasi dan impor perpustakaan yang diperlukan di atas file upload-watcher.js
kita.
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const path = require('path');
const chokidar = require('chokidar');
// --- Konfigurasi ---
const API_BASE_URL = 'https://your-Snapencode-domain.com/api/client/v1';
const API_KEY = process.env.Snapencode_API_KEY || 'sk_your_api_key_here'; // Praktik yang baik: gunakan variabel lingkungan
const TARGET_FOLDER = 'root/automated-uploads'; // Jalur koleksi di Snapencode
const WATCH_DIRECTORY = './videos-to-upload';
// Set untuk memantau file yang sedang diproses untuk menghindari unggahan ganda
const processingFiles = new Set();
Menggunakan variabel lingkungan (process.env.Snapencode_API_KEY
) untuk API Key Anda jauh lebih aman daripada menulisnya secara langsung di skrip.
Langkah 2: Membuat Fungsi Utama
Selanjutnya, tambahkan dua fungsi utama: satu untuk menghandle unggahan file dan yang lain untuk memantau status proses.
// (Tambahkan kode ini di bawah bagian konfigurasi)
async function uploadVideo(filePath) {
console.log(`[MENGUNGGAH] Mulai mengunggah: ${path.basename(filePath)}`);
processingFiles.add(filePath); // Mark file sebagai sedang diproses
const form = new FormData();
form.append('video', fs.createReadStream(filePath));
form.append('folder', TARGET_FOLDER);
try {
const response = await axios.post(`${API_BASE_URL}/uploads`, form, {
headers: { ...form.getHeaders(), 'Authorization': `Bearer ${API_KEY}` },
});
console.log(`[SUCCES] Pengunggahan diterima! ID Video: ${response.data.data.id}`);
return response.data.data.id;
} catch (error) {
console.error(`[GAGAL] Pengunggahan gagal untuk ${path.basename(filePath)}:`, error.response?.data?.message || error.message);
return null;
}
}
async function monitorStatus(videoId, filePath) {
if (!videoId) {
processingFiles.delete(filePath); // Hapus dari set proses pada kegagalan
return;
}
console.log(`[MENONTON] Menonton status untuk ID Video: ${videoId}`);
const interval = setInterval(async () => {
try {
const response = await axios.get(`${API_BASE_URL}/uploads/${videoId}`, {
headers: { 'Authorization': `Bearer ${API_KEY}` },
});
const { status, status_text } = response.data.data;
if (status === 6) { // Selesai
console.log(`✅ [SELESAI] Proses selesai untuk ID Video: ${videoId}!`);
clearInterval(interval);
processingFiles.delete(filePath); // Hapus dari set pada kesuksesan
} else if (status === 7) { // Gagal
console.error(`❌ [GAGAL] Proses gagal untuk ID Video: ${videoId}.`);
clearInterval(interval);
processingFiles.delete(filePath);
} else {
console.log(`[STATUS] ID Video ${videoId}: ${status_text} (${status})`);
}
} catch (error) {
console.error(`[ERROR] Tidak dapat mendapatkan status untuk ${videoId}:`, error.message);
clearInterval(interval);
processingFiles.delete(filePath);
}
}, 5000); // Periksa setiap 5 detik
}
Skrip ini menunjukkan interaksi server-to-server. Tidak pernah tampilkan API Key rahasia di kode klien.
Langkah 3: Menginisialisasi Pemantau File
Akhirnya, tambahkan logika chokidar
ke akhir skrip. Ini akan memantau direktori dan mengaktifkan fungsi kita ketika file baru ditambahkan.
// (Tambahkan kode ini di akhir file)
function initializeWatcher() {
console.log(`--- Snapencode Watch Folder Dibuat ---`);
console.log(`Mengawasi file video baru di: ${path.resolve(WATCH_DIRECTORY)}`);
if (!fs.existsSync(WATCH_DIRECTORY)) {
console.log(`Membuat direktori pengawasan...`);
fs.mkdirSync(WATCH_DIRECTORY, { recursive: true });
}
const watcher = chokidar.watch(WATCH_DIRECTORY, {
ignored: /(^|[\/\\])\../, // Ignore file dot
persistent: true,
ignoreInitial: true, // Jangan unggah file yang sudah ada pada startup
});
watcher.on('add', (filePath) => {
if (processingFiles.has(filePath)) {
return; // Skip jika sedang diproses
}
console.log(`[DETEKSI] File baru: ${path.basename(filePath)}`);
// Tunggu sejenak untuk memastikan file sudah ditulis sepenuhnya sebelum mengunggah
setTimeout(async () => {
const videoId = await uploadVideo(filePath);
await monitorStatus(videoId, filePath);
}, 2000);
});
}
initializeWatcher();
Langkah 4: Jalankan Pemantau Anda
Dengan file upload-watcher.js
selesai, Anda dapat menjalankannya dari terminal.
# Praktik yang baik: tetapkan API Key sebagai variabel lingkungan
export Snapencode_API_KEY="sk_your_api_key_here"
# Jalankan skrip
node upload-watcher.js
Sekarang, setiap file video baru yang Anda masukkan ke direktori ./videos-to-upload
akan diunggah dan diproses secara otomatis!