DEV Community

Cover image for Cara Menggunakan Hootsuite API
Walse
Walse

Posted on • Originally published at apidog.com

Cara Menggunakan Hootsuite API

Inti Pembahasan

API Hootsuite memungkinkan pengembang mengotomatisasi alur kerja manajemen media sosial melalui autentikasi OAuth 2.0, endpoint RESTful untuk profil, postingan, analitik, dan manajemen tim. Namun, sejak 2024, API publik Hootsuite telah dihentikan. Panduan ini fokus pada alternatif teknis, termasuk integrasi API platform sosial asli, webhook, serta solusi pihak ketiga untuk otomasi dan analisis media sosial.

Coba Apidog hari ini

Catatan: Karena API publik Hootsuite sudah tidak tersedia, gunakan pendekatan alternatif seperti API platform sosial asli atau solusi pihak ketiga.

Status API Hootsuite dan Alternatifnya

Situasi API Saat Ini

Mulai 2024, API publik Hootsuite sudah tidak tersedia. Pilihan integrasi yang bisa diterapkan:

Pendekatan Deskripsi Terbaik Untuk
API Platform Asli Integrasi langsung ke Facebook, Twitter, LinkedIn, dll. Kontrol penuh, solusi kustom
Audiense Intelijen audiens milik Hootsuite Analisis audiens
HeyOrca API penjadwalan media sosial Kalender konten
Buffer API Manajemen media sosial Tim kecil
Sprout Social API Manajemen sosial perusahaan Organisasi besar
Agorapulse API CRM media sosial Manajemen komunitas

Pendekatan yang Direkomendasikan: API Platform Asli

Integrasi langsung ke API platform sosial memberikan fleksibilitas maksimum:

Platform Nama API Fitur Utama
Facebook/Instagram Graph API Posting, wawasan, komentar
Twitter/X API v2 Tweet, analitik, stream
LinkedIn Marketing API Posting, halaman perusahaan, iklan
Pinterest API v5 Pin, papan, analitik
TikTok Display API Video, info pengguna
YouTube Data API Video, daftar putar, analitik

Memulai: Autentikasi Multi-Platform

Langkah 1: Daftarkan Aplikasi Pengembang

Buat akun pengembang di setiap platform dan simpan kredensial secara aman:

// Simpan kredensial dengan aman
const SOCIAL_CREDENTIALS = {
  facebook: {
    appId: process.env.FB_APP_ID,
    appSecret: process.env.FB_APP_SECRET,
    redirectUri: process.env.FB_REDIRECT_URI
  },
  twitter: {
    apiKey: process.env.TWITTER_API_KEY,
    apiSecret: process.env.TWITTER_API_SECRET,
    redirectUri: process.env.TWITTER_REDIRECT_URI
  },
  linkedin: {
    clientId: process.env.LINKEDIN_CLIENT_ID,
    clientSecret: process.env.LINKEDIN_CLIENT_SECRET,
    redirectUri: process.env.LINKEDIN_REDIRECT_URI
  },
  instagram: {
    appId: process.env.FB_APP_ID, // Uses Facebook Login
    appSecret: process.env.FB_APP_SECRET
  }
};
Enter fullscreen mode Exit fullscreen mode

Langkah 2: Implementasi OAuth 2.0 Multi-Platform

Gunakan pola di bawah ini untuk menghasilkan URL otorisasi dan menukarkan kode otorisasi ke access token:

const getAuthUrl = (platform, state) => {
  const configs = {
    facebook: {
      url: 'https://www.facebook.com/v18.0/dialog/oauth',
      params: {
        client_id: SOCIAL_CREDENTIALS.facebook.appId,
        redirect_uri: SOCIAL_CREDENTIALS.facebook.redirectUri,
        scope: 'pages_manage_posts,pages_read_engagement,instagram_basic,instagram_content_publish',
        state
      }
    },
    twitter: {
      url: 'https://twitter.com/i/oauth2/authorize',
      params: {
        client_id: SOCIAL_CREDENTIALS.twitter.apiKey,
        redirect_uri: SOCIAL_CREDENTIALS.twitter.redirectUri,
        scope: 'tweet.read tweet.write users.read offline.access',
        state,
        response_type: 'code'
      }
    },
    linkedin: {
      url: 'https://www.linkedin.com/oauth/v2/authorization',
      params: {
        client_id: SOCIAL_CREDENTIALS.linkedin.clientId,
        redirect_uri: SOCIAL_CREDENTIALS.linkedin.redirectUri,
        scope: 'w_member_social r_basicprofile',
        state,
        response_type: 'code'
      }
    }
  };

  const config = configs[platform];
  const params = new URLSearchParams(config.params);
  return `${config.url}?${params.toString()}`;
};

// Tangani callback OAuth
const handleOAuthCallback = async (platform, code) => {
  const tokenEndpoints = {
    facebook: 'https://graph.facebook.com/v18.0/oauth/access_token',
    twitter: 'https://api.twitter.com/2/oauth2/token',
    linkedin: 'https://www.linkedin.com/oauth/v2/accessToken'
  };

  const response = await fetch(tokenEndpoints[platform], {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams({
      client_id: SOCIAL_CREDENTIALS[platform].apiKey || SOCIAL_CREDENTIALS[platform].appId || SOCIAL_CREDENTIALS[platform].clientId,
      client_secret: SOCIAL_CREDENTIALS[platform].appSecret || SOCIAL_CREDENTIALS[platform].apiSecret,
      redirect_uri: SOCIAL_CREDENTIALS[platform].redirectUri,
      code,
      grant_type: 'authorization_code'
    })
  });

  return response.json();
};
Enter fullscreen mode Exit fullscreen mode

Langkah 3: Simpan Token dengan Aman

Gunakan skema database berikut untuk keamanan:

// Skema database untuk token sosial
const SocialToken = {
  userId: 'user_123',
  platform: 'facebook',
  accessToken: 'encrypted_token_here',
  refreshToken: 'encrypted_refresh_token',
  tokenExpiry: Date.now() + 5183999, // 60 hari
  scopes: ['pages_manage_posts', 'pages_read_engagement'],
  pageId: 'page_456', // Untuk Facebook/Instagram
  pageName: 'My Business Page'
};
Enter fullscreen mode Exit fullscreen mode

Penjadwalan dan Penerbitan Postingan

Membuat Postingan Multi-Platform

Publikasikan konten ke beberapa platform secara paralel dengan fungsi berikut:

const createSocialPost = async (postData) => {
  const results = {};

  // Post ke Facebook
  if (postData.platforms.includes('facebook')) {
    results.facebook = await postToFacebook({
      pageId: postData.facebookPageId,
      message: postData.message,
      link: postData.link,
      photo: postData.photo
    });
  }

  // Post ke Twitter
  if (postData.platforms.includes('twitter')) {
    results.twitter = await postToTwitter({
      text: postData.message,
      media: postData.photo
    });
  }

  // Post ke LinkedIn
  if (postData.platforms.includes('linkedin')) {
    results.linkedin = await postToLinkedIn({
      authorUrn: postData.linkedinAuthorUrn,
      text: postData.message,
      contentUrl: postData.link
    });
  }

  // Post ke Instagram
  if (postData.platforms.includes('instagram')) {
    results.instagram = await postToInstagram({
      igAccountId: postData.igAccountId,
      imageUrl: postData.photo,
      caption: postData.message
    });
  }

  return results;
};

// Contoh fungsi posting ke masing-masing platform (lihat kode lengkap pada konten asli/postingan ini)
Enter fullscreen mode Exit fullscreen mode

Menjadwalkan Postingan

Simpan data postingan di database dan gunakan job queue untuk eksekusi terjadwal:

const schedulePost = async (postData, scheduledTime) => {
  // Simpan di database untuk dieksekusi nanti
  const scheduledPost = await db.scheduledPosts.create({
    message: postData.message,
    platforms: postData.platforms,
    scheduledTime: scheduledTime,
    status: 'pending',
    media: postData.media,
    link: postData.link
  });

  // Tambahkan ke antrean tugas
  await jobQueue.add('publish-social-post', {
    postId: scheduledPost.id
  }, {
    delay: scheduledTime - Date.now()
  });

  return scheduledPost;
};

// Worker pemroses tugas
jobQueue.process('publish-social-post', async (job) => {
  const post = await db.scheduledPosts.findById(job.data.postId);

  try {
    const result = await createSocialPost(post);

    await db.scheduledPosts.update(post.id, {
      status: 'published',
      publishedAt: new Date(),
      results: result
    });

    return result;
  } catch (error) {
    await db.scheduledPosts.update(post.id, {
      status: 'failed',
      error: error.message
    });

    throw error;
  }
});
Enter fullscreen mode Exit fullscreen mode

Analitik dan Pelaporan

Mengambil Analitik Lintas-Platform

Ambil dan agregasi metrik dari berbagai platform:

const getSocialAnalytics = async (accountId, dateRange) => {
  const analytics = {
    facebook: await getFacebookAnalytics(accountId.facebook, dateRange),
    twitter: await getTwitterAnalytics(accountId.twitter, dateRange),
    linkedin: await getLinkedInAnalytics(accountId.linkedin, dateRange),
    instagram: await getInstagramAnalytics(accountId.instagram, dateRange)
  };

  // Agregasi metrik
  const totals = {
    impressions: sum(analytics, 'impressions'),
    engagement: sum(analytics, 'engagement'),
    clicks: sum(analytics, 'clicks'),
    shares: sum(analytics, 'shares'),
    comments: sum(analytics, 'comments'),
    newFollowers: sum(analytics, 'newFollowers')
  };

  return { analytics, totals };
};

function sum(analytics, metric) {
  return Object.values(analytics).reduce((total, platform) => {
    return total + (platform.data?.[metric] || 0);
  }, 0);
}
Enter fullscreen mode Exit fullscreen mode

Lihat kode pada bagian sebelumnya untuk implementasi detail masing-masing platform.

Manajemen Tim

Kontrol Akses Berbasis Peran

Pastikan tiap anggota tim hanya dapat mengakses fitur sesuai peran:

const TEAM_ROLES = {
  ADMIN: 'admin',
  MANAGER: 'manager',
  CONTRIBUTOR: 'contributor',
  VIEWER: 'viewer'
};

const ROLE_PERMISSIONS = {
  [TEAM_ROLES.ADMIN]: ['create', 'read', 'update', 'delete', 'manage_team', 'billing'],
  [TEAM_ROLES.MANAGER]: ['create', 'read', 'update', 'approve_posts'],
  [TEAM_ROLES.CONTRIBUTOR]: ['create', 'read'],
  [TEAM_ROLES.VIEWER]: ['read']
};

const checkPermission = (userRole, requiredPermission) => {
  const permissions = ROLE_PERMISSIONS[userRole] || [];
  return permissions.includes(requiredPermission);
};
Enter fullscreen mode Exit fullscreen mode

Pembatasan Tingkat Permintaan (Rate Limiting)

Pembatasan Platform

Platform Batas Jendela Waktu
Facebook Graph 200 panggilan Per jam per pengguna
Twitter API v2 300 tweet Per 15 menit
LinkedIn 100-500 panggilan Per hari
Instagram 200 panggilan Per jam

Implementasi Rate Limiting di Kode

Gunakan rate limiter untuk menghindari blokir API:

class SocialMediaRateLimiter {
  constructor() {
    this.limits = {
      facebook: { limit: 200, window: 3600000 },
      twitter: { limit: 300, window: 900000 },
      linkedin: { limit: 500, window: 86400000 },
      instagram: { limit: 200, window: 3600000 }
    };
    this.counters = {};
  }

  async request(platform, endpoint, options) {
    await this.waitForCapacity(platform);

    const response = await fetch(endpoint, options);
    this.incrementCounter(platform);

    return response;
  }

  async waitForCapacity(platform) {
    const limit = this.limits[platform];
    const counter = this.counters[platform] || { count: 0, resetTime: Date.now() };

    if (Date.now() > counter.resetTime + limit.window) {
      counter.count = 0;
      counter.resetTime = Date.now();
    }

    if (counter.count >= limit.limit) {
      const waitTime = counter.resetTime + limit.window - Date.now();
      await new Promise(resolve => setTimeout(resolve, waitTime));
    }

    this.counters[platform] = counter;
  }

  incrementCounter(platform) {
    if (!this.counters[platform]) {
      this.counters[platform] = { count: 0, resetTime: Date.now() };
    }
    this.counters[platform].count++;
  }
}
Enter fullscreen mode Exit fullscreen mode

Daftar Periksa Penerapan Produksi

Pastikan checklist berikut sebelum deployment:

  • [ ] Implementasi OAuth 2.0 untuk semua platform
  • [ ] Simpan token dengan enkripsi
  • [ ] Refresh token otomatis
  • [ ] Implementasi rate limiting per platform
  • [ ] Penanganan error komprehensif
  • [ ] Logging semua panggilan API
  • [ ] Alur persetujuan postingan
  • [ ] Moderasi konten otomatis/manual
  • [ ] Agregasi analitik lintas-platform
  • [ ] Mekanisme posting cadangan/fallback

Kasus Penggunaan Dunia Nyata

Dasbor Media Sosial

  • Tantangan: Mengelola 50+ akun klien di banyak platform
  • Solusi: Dasbor terpusat dengan postingan multi-platform otomatis
  • Hasil: Efisiensi waktu 60%, konsistensi brand meningkat

Distribusi Konten Otomatis

  • Tantangan: Distribusi artikel baru secara manual memakan waktu
  • Solusi: Otomasi posting artikel ke semua platform secara bersamaan
  • Hasil: Distribusi instan, trafik sosial naik 3x

Kesimpulan

API publik Hootsuite sudah tidak tersedia, namun API platform sosial asli tetap menyediakan hampir semua fungsi manajemen media sosial modern. Rangkuman langkah teknis utama:

  • OAuth 2.0 wajib untuk setiap platform
  • Rate limiting sangat bervariasi, wajib dipantau
  • Posting multi-platform butuh implementasi spesifik per platform
  • Analitik lintas-platform butuh agregasi manual
  • Apidog memudahkan pengujian API dan kolaborasi tim

Bagian FAQ

Apakah Hootsuite masih memiliki API?

Tidak, mulai 2024 API publik Hootsuite dihentikan. Gunakan API platform sosial asli atau solusi alternatif seperti Buffer, Sprout Social, atau Agorapulse.

Bagaimana cara saya memposting ke banyak platform sekaligus?

Implementasikan OAuth untuk setiap platform dan buat fungsi posting terpadu yang memanggil API setiap platform secara paralel.

Berapa batas tingkat permintaan untuk API media sosial?

Batas tergantung platform: Facebook (200/jam), Twitter (300/15menit), LinkedIn (100-500/hari), Instagram (200/jam).

Bagaimana cara menjadwalkan postingan?

Simpan postingan di database dengan field scheduled_time, lalu gunakan job queue (Bull, Agenda, dsb.) untuk mempublikasikan pada waktu yang dijadwalkan.

Bisakah saya mendapatkan analitik dari semua platform?

Bisa. Setiap platform menyediakan API analitik; agregasikan data untuk pelaporan lintas-platform.

Top comments (0)