Integrasi Instagram
OmniStream terhubung ke DM Instagram menggunakan Instagram Login OAuth dengan token per akun. Setiap akun Instagram yang ditambahkan admin akan menukar kode otorisasi dengan access token-nya sendiri — tidak ada lagi model satu token Meta App global yang dipakai untuk semua akun.
Pendekatan per-akun ini menggantikan alur Instagram Basic Display lama. Lihat riwayat commit
393f9ae(fix Instagram integration to use Instagram Login OAuth with per-account tokens) dancd49b7f(remove unusedINSTAGRAM_LOGIN_CONFIG_IDconfig) di CLAUDE.md repo history untuk perubahan terkini.
Peran: Hanya Admin yang dapat menambah atau menghapus integrasi Instagram. Rute frontend:
/integrations
Prasyarat
- Meta App dengan produk Instagram (Instagram Login) aktif.
- Instagram Business Account yang dihubungkan ke Facebook Page (Meta masih memerlukan hubungan Page meski pengguna tidak pernah membukanya).
- Instagram App ID dan Instagram App Secret dari Meta App Dashboard.
- URL callback OAuth yang dapat dijangkau publik:
https://<host-omnistream>/integrations/instagram/callback. - Akses admin ke OmniStream.
Kredensial yang dibutuhkan
Nilai berikut perlu dikonfigurasi oleh administrator server dan pada Meta App Dashboard:
| Kredensial | Asal |
|---|---|
| Instagram App ID | Meta App Dashboard → Instagram → Basic Display |
| Instagram App Secret | Meta App Dashboard → Instagram → Basic Display |
| Meta App Secret | Untuk verifikasi tanda tangan webhook masuk |
| Meta Verify Token | Nilai bebas untuk handshake verifikasi webhook Meta |
Alur OAuth per akun
Alur pendaftaran satu akun Instagram adalah sebagai berikut:
- Admin membuka halaman Integrations (
/integrations) dan klik + Add Instagram Account. - OmniStream membangun URL otorisasi Instagram Login berdasarkan
INSTAGRAM_APP_IDdan callbackhttps://<host>/integrations/instagram/callback. - Admin diarahkan ke Instagram, memilih akun yang ingin dihubungkan, dan menerima izin:
instagram_business_basicinstagram_business_manage_messages
- Instagram memanggil kembali callback OmniStream dengan
?code=.... - Backend menukar
codedengan access token per akun melalui endpoint Graph (menggunakanINSTAGRAM_APP_IDdanINSTAGRAM_APP_SECRET). - Token,
user_id,username, dan metadata lain disimpan ke tabelintegration_accountspada baris denganchannel = 'instagram'. - OmniStream akan mulai memakai token tersebut saat mengirim DM keluar, dan memetakan event masuk ke akun berdasarkan user ID Instagram.
Langkah-langkah setup
1. Konfigurasi Meta App
- Di developers.facebook.com, buka app Anda.
- Tambahkan produk Instagram → Instagram Login jika belum.
- Di Instagram → Basic Display, salin Instagram App ID dan Instagram App Secret. Simpan ke konfigurasi server OmniStream Anda.
- Pada Valid OAuth Redirect URIs, tambahkan:
https://<host-omnistream>/integrations/instagram/callbackserta variannya jika Anda punya environment staging.
2. Konfigurasi webhook Instagram
- Di Meta App → Instagram → Webhooks, klik Configure.
- Masukkan Callback URL:
https://<host-omnistream>/webhook/instagram - Masukkan Verify Token sama dengan
META_VERIFY_TOKEN. - Langganan ke event
messagesdanmessaging_postbacks.
3. Mulai alur OAuth dari UI OmniStream
- Masuk sebagai admin ke OmniStream.
- Buka Integrations, klik tab Instagram.
- Klik + Connect Instagram Account.
- Pilih halaman/akun pada dialog Meta dan berikan izin.
- Setelah redirect kembali ke OmniStream, baris baru muncul di tabel Instagram Accounts dengan username yang terdeteksi.
4. Kirim pesan uji
- Dari akun Instagram lain, kirim DM ke akun yang baru dihubungkan.
- Percakapan baru akan muncul di Inbox OmniStream.
- Balas dari Inbox; pesan keluar dikirim memakai access token per-akun yang tersimpan.
- Jika balasan gagal, buka halaman Integrations dan lakukan Re-authenticate pada akun yang bermasalah — ini memicu siklus OAuth ulang tanpa menghapus riwayat percakapan.
Model per akun: mengapa penting
Sebelum commit 393f9ae, OmniStream menyimpan satu kredensial Instagram global yang dibagi-pakai oleh semua integration account. Akibatnya satu token kedaluwarsa bisa memadamkan seluruh saluran, dan Meta juga tidak mengizinkannya untuk Instagram Login.
Setelah commit tersebut, setiap baris di integration_accounts memiliki access token-nya sendiri pada config. Implikasi operasionalnya:
- Menghapus satu akun tidak mempengaruhi akun Instagram lain.
- Token kedaluwarsa hanya memadamkan satu akun; admin cukup re-authenticate akun tersebut.
Troubleshooting
- OAuth redirect ditolak oleh Instagram — pastikan URL callback di Meta App Dashboard tepat sama dengan yang OmniStream pakai, termasuk skema
https://. Meta ketat terhadap trailing slash. - Webhook verification gagal —
META_VERIFY_TOKENtidak cocok. Token ini sama untuk WhatsApp, Instagram, dan Messenger karena satu Meta App. - HMAC
InvalidSignaturepada webhook — Meta App Secret tidak cocok. Hubungi administrator untuk memperbarui konfigurasi server. - Token kedaluwarsa pada satu akun — buka Integrations, pilih akun, klik Re-authenticate untuk memulai OAuth ulang.
Hubungan dengan API Reference
Tag Integrations pada API Reference menampilkan endpoint untuk mengelola konfigurasi saluran. Endpoint untuk integration_accounts Instagram memungkinkan inspeksi daftar akun yang terhubung, dengan rahasia di-mask pada respons.
Endpoint OAuth callback Instagram (/integrations/instagram/callback) belum terdaftar di openapi.yaml per status drift pada docs-site/SCOPE.md Bagian 2.1. Halaman ini adalah panduan user-flow, bukan referensi REST.