Panduan integrasi Mobile Live Chat
Dari pendaftaran aplikasi sampai pengujian notifikasi. Panduan teknis tersedia dalam Bahasa Indonesia, dengan contoh untuk setiap platform.
Cara Integrasi
Hubungkan Firebase milik Anda, lalu ikuti pemasangan SDK sesuai aplikasi Anda. Firebase mengantarkan notifikasi; percakapan dan balasan dikelola melalui Mobile Live Chat GSender.
- Aktifkan paket, lalu buka Control → Mobile Live Chat untuk mendaftarkan aplikasi.
- Hubungkan Firebase milik aplikasi dan simpan server credential GSender di backend Anda.
- Ikuti contoh backend token, kemudian pilih SDK di bawah.
- Daftarkan token push, atur layanan, dan uji pada perangkat tester.
SDK tersedia melalui unduhan dashboard, bukan perintah instalasi dari registry publik. backendCustomer pada contoh adalah client API backend aplikasi Anda, bukan class bawaan SDK.
1. Firebase milik Customer — mulai dari akun Google
- Siapkan akun perusahaan. Masuk ke akun Google, atau pilih Buat akun jika belum punya. Selesaikan verifikasi Google. Gunakan akun yang tetap dikuasai perusahaan dan aktifkan verifikasi dua langkah.
- Buat project. Buka Firebase Console, pilih Buat project / Create a project, isi nama, periksa Project ID, setujui ketentuan yang ditampilkan, lalu buat project. Analytics dan bantuan AI bersifat opsional. Jika aplikasi sudah menggunakan Firebase, gunakan project yang sama agar layanan yang sudah terpasang tetap berfungsi.
- Catat identitas project. Buka ikon roda gigi → Project settings → General. Catat Project ID dan Project number. Pisahkan konfigurasi aplikasi development dan production dengan jelas. Panduan project Firebase.
- Daftarkan Android. Pada Your apps pilih Add app → Android. Masukkan package name persis seperti
applicationIddi Gradle, misalnyacom.perusahaan.aplikasi. Daftarkan app dan unduhgoogle-services.json. Letakkan diandroid/app/untuk Flutter, atau root modulapp/untuk Android native. SHA fingerprint tidak diwajibkan untuk push FCM dasar; fitur Google lain mungkin memerlukannya. - Daftarkan iOS jika digunakan. Add app → iOS; isi Bundle ID yang sama dengan target Runner/aplikasi di Xcode. Unduh
GoogleService-Info.plist, tambahkan melalui Xcode ke target aplikasi, dan pastikan masuk target membership. Untuk Flutter biasanya berada diios/Runner/. - Aktifkan pengiriman FCM. Project settings → Cloud Messaging: periksa Firebase Cloud Messaging API (HTTP v1). Jika belum aktif, buka tautan pengelolaan API ke Google Cloud dan aktifkan Firebase Cloud Messaging API untuk project yang benar. Gunakan HTTP v1, bukan Legacy Server Key.
- Siapkan service account khusus pengiriman. Di Google Cloud → IAM & Admin → Service Accounts, pilih project yang sama, Create service account, lalu beri nama misalnya
gsender-push. Berikan roleFirebase Cloud Messaging API Admin(roles/firebasecloudmessaging.admin), bukan Owner/Editor. Ini adalah akun server untuk mengirim notifikasi. Detail izin FCM. - Siapkan kredensial server. Buka service account tadi → Keys → Add key → Create new key → JSON. Simpan file secara privat. Jika organisasi melarang pembuatan key, koordinasikan akses IAM dengan administrator; jangan mengubah kebijakan organisasi hanya untuk melewati pembatasan.
- Hubungkan ke GSender. Saat mendaftarkan aplikasi, isi nama serta package/Bundle ID, lalu unggah service-account JSON langsung di form pendaftaran. Project ID Firebase dibaca dari file tersebut. Jika aplikasi sudah terdaftar, periksa datanya pada Konfigurasi aplikasi dan lanjutkan pemasangan SDK; tidak perlu mendaftar ulang. Jangan lampirkan private key, password Google, atau token perangkat dalam tiket.
File service-account JSON berisi private key. File ini berbeda dari google-services.json, GoogleService-Info.plist, dan firebase_options.dart yang merupakan konfigurasi aplikasi. Kredensial server diserahkan hanya melalui saluran aman dan tidak dimasukkan ke APK/IPA atau repository aplikasi. Panduan kredensial server.
FCM sendiri tersedia tanpa biaya pengiriman. Firestore tidak diperlukan hanya untuk menerima push. Produk Firebase lain memiliki ketentuan biaya masing-masing. Harga Firebase.
2. Pasang SDK GSender dan Firebase di Flutter
Prasyarat: Flutter 3.32+ dan Dart 3.8.1+. Siapkan backend aplikasi dengan autentikasi pengguna.
Dengan paket aktif, unduh SDK Flutter dari Control → Mobile Live Chat. Ekstrak ke packages/gsender_chat di project aplikasi, lalu tambahkan dependensi berikut:
dependencies:
gsender_chat:
path: packages/gsender_chat
flutter pub get
Tampilan layanan (Flutter SDK 0.3). Gunakan paket terbaru dan build ulang aplikasi satu kali. Setelah itu, nama layanan, logo, warna kartu/tombol, gambar latar, dan tema dari Pengaturan Layanan dibaca saat chat dibuka. Pengaturan di GSender lebih diutamakan daripada tema bawaan SDK; tidak mengubah nama aplikasi atau APP_ID.
Kamera dan galeri. SDK menyediakan Kamera, Galeri, dan Dokumen. Pada iOS, tambahkan keterangan izin berikut ke ios/Runner/Info.plist; sesuaikan kalimatnya dengan layanan Anda:
<key>NSCameraUsageDescription</key>
<string>Kamera digunakan untuk melampirkan foto dalam chat dukungan.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Galeri digunakan untuk memilih foto atau video untuk chat dukungan.</string>
Kamera mengambil foto; video dipilih dari Galeri. Tidak perlu izin mikrofon. Jalankan flutter pub get lalu build ulang Android/iOS; hot reload tidak memasang plugin native. Android memakai pemilih media/kamera sistem. Uji izin diberikan, ditolak, dan dibatalkan pada perangkat. Panduan resmi image_picker.
Inisialisasi satu kali setelah user berhasil login. Endpoint /api/gsender/chat-token adalah endpoint backend milik customer yang mengembalikan identity token singkat; server_credential tidak boleh ditaruh di aplikasi.
import 'package:gsender_chat/gsender_chat.dart';
GSenderChat.initialize(
appId: 'APP_ID_DARI_GSENDER',
environment: GSenderChatEnvironment.production,
tokenProvider: () async {
final response = await backendCustomer.get('/api/gsender/chat-token');
return response.data['access_token'] as String;
},
);
Tempel pemanggilan berikut pada menu aplikasi. Seluruh kartu dapat diklik untuk membuka Beranda chat, lalu customer memilih kategori dan menekan Mulai chat:
ListTile(
leading: const Icon(Icons.support_agent),
title: const Text('Live Chat'),
onTap: () => GSenderChat.open(context),
);
Panggil GSenderChat.logout() ketika user keluar atau berganti akun.
Aktifkan push Firebase
Perintah berikut memasang SDK resmi Firebase untuk push. Konfigurasi Firebase tetap dimiliki host app agar tidak bentrok dengan Firebase yang sudah digunakan aplikasi.
- Di root project Flutter jalankan perintah berikut. Sesuaikan versi paket dengan Flutter serta target Android/iOS aplikasi Anda.
flutter pub add firebase_core firebase_messaging
Firebase milik Customer: pasang Firebase CLI, lalu hubungkan ke project Anda:
firebase login
dart pub global activate flutterfire_cli
flutterfire configure --project=PROJECT_ID_ANDA
Pilih Android/iOS yang digunakan dan cocokkan package name/Bundle ID. FlutterFire menghasilkan lib/firebase_options.dart.
Inisialisasi di main.dart sebelum runApp. Jika Firebase sudah diinisialisasi aplikasi, gunakan inisialisasi yang sudah ada.
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
// Di main() yang sudah ada:
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Lanjutkan runApp(...) milik aplikasi Anda.
Panduan resmi pemasangan FlutterFire.
Izin notifikasi dan token perangkat
Jalankan dari alur pengguna memilih mengaktifkan notifikasi. Contoh ini mengembalikan token kepada kode aplikasi Anda; token tidak ditampilkan atau dicetak ke log.
import 'dart:io';
import 'package:firebase_messaging/firebase_messaging.dart';
Future<String?> getPushToken() async {
final messaging = FirebaseMessaging.instance;
final permission = await messaging.requestPermission(
alert: true, badge: true, sound: true,
);
if (permission.authorizationStatus != AuthorizationStatus.authorized &&
permission.authorizationStatus != AuthorizationStatus.provisional) {
return null;
}
if (Platform.isIOS && await messaging.getAPNSToken() == null) {
return null; // Coba lagi setelah APNs siap / aplikasi resumed.
}
return messaging.getToken();
}
Simpan satu UUID acak sebagai installation ID pada penyimpanan aplikasi; jangan memakai IMEI atau identitas hardware. Setelah login, daftarkan token langsung melalui SDK:
final token = await getPushToken();
if (token != null) {
await GSenderChat.registerPushToken(
installationId: installationId,
token: token,
firebaseProjectId: Firebase.app().options.projectId,
);
}
Daftarkan listener FirebaseMessaging.instance.onTokenRefresh satu kali dan panggil registerPushToken lagi dengan installation ID yang sama. Tangani error dan coba lagi saat login/resume; jangan mencetak token ke log. Token dan refresh Flutter.
Menerima dan membuka notifikasi
FirebaseMessaging.onMessage: terima saat foreground. Tampilan banner foreground perlu dikonfigurasi oleh aplikasi; tampilkan melalui mekanisme notifikasi aplikasi yang sudah ada.FirebaseMessaging.onMessageOpenedApp: tangani ketukan notifikasi ketika app berada di background.FirebaseMessaging.instance.getInitialMessage(): tangani ketukan saat app mulai dari kondisi tertutup. Tunggu login dan navigator siap, lalu buka conversation yang memang boleh diakses user.- Jika memproses data di background, daftarkan
FirebaseMessaging.onBackgroundMessagedengan fungsi top-level beranotasi@pragma('vm:entry-point'). Jangan mengakses UI dari background handler. Gabungkan dengan handler yang sudah ada, bukan menggantinya. - Pada logout, panggil
await GSenderChat.unregisterPushToken(installationId)sebelumGSenderChat.logout(). Jangan memanggildeleteToken()global bila Firebase juga dipakai fitur lain. Saat berganti akun, SDK mengikat ulang installation ke user yang benar.
3. Pasang SDK Android native dan iOS native
Android native (Kotlin)
Prasyarat: Android API 23+. Konfigurasikan Firebase pada aplikasi host, lalu ikuti pemasangan library berikut.
Unduh SDK Android, ekstrak folder gsender-chat ke root project, tambahkan include(":gsender-chat") di settings.gradle.kts, lalu tambahkan implementation(project(":gsender-chat")) pada modul aplikasi.
import id.gsender.chat.GSenderChat
import id.gsender.chat.GSenderTokenProvider
GSenderChat.initialize(
appId = "APP_ID_DARI_GSENDER",
tokenProvider = GSenderTokenProvider { forceRefresh ->
backendCustomer.fetchGSenderToken(forceRefresh)
},
)
liveChatMenu.setOnClickListener { GSenderChat.open(this) }
tokenProvider berjalan di background. Simpan satu UUID acak sebagai installationId, lalu daftarkan token FCM pada coroutine/worker:
withContext(Dispatchers.IO) {
GSenderChat.registerPushToken(
installationId = installationId,
token = FirebaseMessaging.getInstance().token.await(),
firebaseProjectId = requireNotNull(FirebaseApp.getInstance().options.projectId),
appVersion = BuildConfig.VERSION_NAME,
deviceOS = Build.VERSION.RELEASE,
)
}
Panggil kembali dari onNewToken ketika user login. Saat logout, jalankan unregisterPushToken(installationId) di background sebelum GSenderChat.logout().
- Pastikan package name cocok dengan Firebase app. Android native memakai Google Services Gradle plugin, Firebase BoM yang kompatibel, dan dependensi
com.google.firebase:firebase-messaging; ikuti nilai versi pada dokumentasi resmi. Flutter mengikuti konfigurasi plugin FlutterFire. - Untuk Android 13+, deklarasikan
android.permission.POST_NOTIFICATIONSdan minta izin runtime. Siapkan notification channel Android 8+ serta ikon notifikasi kecil yang valid. - Android native mendapatkan token melalui
FirebaseMessaging.getInstance().getToken(), memperbaruinya diFirebaseMessagingService.onNewToken, dan menangani pesan dionMessageReceived. - Rebuild aplikasi dan uji pada perangkat dengan Google Play services atau emulator Google Play. Aplikasi harus dibuka setidaknya sekali.
iOS native (Swift)
Prasyarat: iOS 15+ dan toolchain Swift 6. Siapkan signing aplikasi serta konfigurasi APNs/FCM.
Unduh SDK iOS, ekstrak ke project, lalu di Xcode pilih File → Add Package Dependencies → Add Local dan pilih folder SDK. Hubungkan product GSenderChat ke target aplikasi.
import GSenderChat
import SwiftUI
try GSenderChat.initialize(appID: "APP_ID_DARI_GSENDER") { forceRefresh in
try await backendCustomer.fetchGSenderToken(forceRefresh: forceRefresh)
}
// SwiftUI
NavigationLink("Live Chat") {
if let chat = try? GSenderChatView() { chat }
else { Text("Live Chat belum dikonfigurasi") }
}
// Saat logout
try await GSenderChat.unregisterPushToken(installationID: installationID)
await GSenderChat.logout()
Untuk UIKit, buat GSenderChatView di dalam do/catch, lalu tampilkan melalui UIHostingController. Tangani kegagalan konfigurasi pada alur aplikasi, jangan memakai try! di production.
- Di Apple Developer, siapkan App ID dan APNs authentication key untuk aplikasi. Catat Key ID dan Team ID; simpan file
.p8secara privat. - Di Firebase Project settings → Cloud Messaging → konfigurasi iOS → APNs authentication key, unggah
.p8dan isi Key ID serta Team ID. - Buka target aplikasi di Xcode → Signing & Capabilities. Tambahkan Push Notifications dan Background Modes → Remote notifications; sesuaikan provisioning profile. Untuk Flutter, aktifkan Background fetch bila mengikuti persyaratan plugin.
- Native Swift menggunakan
FirebaseMessaging,FirebaseApp.configure(), izinUNUserNotificationCenter, registrasi remote notifications, dan delegate Messaging untuk token. Pada Flutter, pertahankan method swizzling yang dibutuhkan plugin. - Uji di iPhone fisik dengan signing yang benar; pastikan APNs token tersedia sebelum meminta FCM token.
guard let firebaseProjectID = FirebaseApp.app()?.options.projectID else {
// Tampilkan kesalahan konfigurasi Firebase di aplikasi.
return
}
try await GSenderChat.registerPushToken(
installationID: installationID,
token: fcmToken,
firebaseProjectID: firebaseProjectID,
appVersion: Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String,
deviceOS: UIDevice.current.systemVersion
)
Simpan installationID satu kali per instalasi dan panggil registrasi di atas setiap delegate Firebase memberikan token baru. Jangan mencetak token ke log.
4. Pasang SDK React Native
SDK 0.2 memerlukan React Native 0.79 atau lebih baru. Pemilih lampiran memakai native document picker. Setelah npm install, jalankan cd ios && pod install untuk iOS, lalu build ulang aplikasi; hot reload saja tidak menambahkan modul native.
Unduh SDK React Native, ekstrak ke packages/gsender-chat-react-native, lalu tambahkan "@gsender/chat-react-native": "file:packages/gsender-chat-react-native" pada dependencies aplikasi dan jalankan npm install.
import { GSenderChat, GSenderChatView } from '@gsender/chat-react-native';
GSenderChat.initialize({
appId: 'APP_ID_DARI_GSENDER',
tokenProvider: forceRefresh =>
backendCustomer.fetchGSenderToken({forceRefresh}),
});
// Screen LiveChat milik aplikasi
function LiveChatScreen() {
return <GSenderChatView />;
}
await GSenderChat.registerPushToken({
installationId, token: fcmToken, firebaseProjectId,
appVersion, deviceOS,
});
Arahkan menu Live Chat ke screen tersebut. Pertahankan konfigurasi Firebase Android/iOS milik aplikasi dan panggil registrasi kembali saat token berubah. Ketika logout/berganti akun, panggil await GSenderChat.unregisterPushToken(installationId) sebelum await GSenderChat.logout(). SDK tidak menyimpan service-account key.
5. Yang diberikan ke GSender dan cara penghubungannya
- Project ID, Firebase App ID, package name / Bundle ID
- Identitas project dan aplikasi. Dipakai untuk mencocokkan konfigurasi. APP_ID Mobile Live Chat GSender merupakan identitas berbeda.
- Service-account JSON
- Kredensial server untuk Firebase milik Customer. Diserahkan sekali saat setup melalui saluran aman, lalu dirotasi bila diperlukan. Bukan token perangkat dan bukan file konfigurasi client.
- Token FCM perangkat
- Dihasilkan SDK setelah aplikasi berjalan. Setiap installation memiliki token yang dapat berubah. Aplikasi mengirimkannya secara otomatis lewat integrasi terautentikasi, bukan menyalinnya satu per satu ke chat/tiket.
- APP_ID dan server credential GSender
- Identitas penghubung aplikasi ke layanan chat. Credential hanya disimpan di backend aplikasi Anda. Backend menukar identitas user yang sudah login menjadi sesi chat berumur pendek untuk aplikasi mobile.
Penghubungan aplikasi: setelah data aplikasi diverifikasi, GSender memberikan APP_ID dan server credential satu kali melalui saluran aman. Unduh SDK dari Control → Mobile Live Chat. Simpan credential hanya di backend customer, lalu gunakan endpoint backend tersebut sebagai tokenProvider SDK.
SDK mengirim installation ID, platform, token FCM, project ID, dan versi aplikasi melalui sesi chat yang terautentikasi. Backend Go menyimpan token dalam bentuk terenkripsi dan otomatis mencabut ikatan akun lama ketika installation atau token dipakai akun baru.
6. Uji end-to-end. Pastikan push dan chat benar-benar tersambung
- Uji Firebase dahulu. Di Firebase Console buka Messaging, buat notifikasi uji dan gunakan Send test message ke token perangkat tester milik Anda. Simpan aplikasi di background dan pastikan notifikasi benar-benar diterima. Jangan gunakan daftar customer untuk pengujian.
- Uji chat setelah penghubungan GSender selesai. Login sebagai tester, buka percakapan, kirim pesan, lalu balas melalui Inbox GSender. Periksa isi percakapan dan push ke perangkat yang tepat.
- Uji kondisi aplikasi. Cek foreground, background, dan buka lewat ketukan notifikasi dari kondisi tertutup. Android force-stop dari pengaturan dan iOS swipe-away mempunyai pembatasan; buka ulang app sebelum menguji kembali.
- Uji pergantian akun. Logout akun A lalu login akun B pada perangkat yang sama. Pesan A tidak boleh muncul untuk B. Pastikan token refresh tidak menambah penerima duplikat.
- Jika gagal. Cocokkan Firebase project dan token (SENDER_ID_MISMATCH), periksa izin service account/API (403), APNs/signing iOS, izin notifikasi, serta koneksi. Hapus pemetaan token yang sudah UNREGISTERED dan sinkronkan token terbaru.
Gunakan satu percakapan tester untuk memverifikasi hasil. Mobile Live Chat tidak boleh digunakan untuk broadcast. Balasan agen dan riwayat chat harus tetap tersedia meskipun notifikasi dimatikan.
7. Beranda, jam petugas, kategori, sapaan, dan riwayat
- Atur dari akun pemilik GSender. Buka Control → Mobile Live Chat → Pengaturan Layanan, lalu tentukan zona waktu, hari, dan jam aktif. Isi kategori satu per baris, misalnya Bantuan Produk, Pembayaran, dan Lainnya. Sesuaikan dengan layanan bisnis Anda.
- Isi sapaan awal. Sapaan wajib diisi dan tampil satu kali saat customer memulai percakapan baru. Contoh: “Halo, selamat datang. Silakan ceritakan kebutuhan Anda, tim kami akan membantu.” Gunakan kalimat yang sesuai baik saat online maupun offline. Sapaan sistem tidak memotong kredit balasan.
- Status petugas. Di atas daftar percakapan Inbox, pilih Online untuk menerima chat baru dari semua channel. Status awal Offline. Tidak ada sakelar khusus Mobile Chat; jadwal layanan tetap berlaku otomatis. Tab Inbox boleh berada di latar belakang selama masih terhubung. Jika koneksi atau pembaruan status terhenti, status kedaluwarsa setelah 90 detik. Customer tetap boleh meninggalkan pesan saat petugas Offline.
- Alur di aplikasi. Menu Live Chat → Beranda/status petugas → Percakapan baru → pilih kategori → Mulai chat → sapaan → percakapan. Tidak ada form data diri ulang.
- Riwayat dan akhir percakapan. Tab Pesan menampilkan percakapan milik user aplikasi yang sedang login. Percakapan selesai bisa dibaca, tetapi tidak dibalas lagi. Pada Flutter SDK 0.3, Mulai chat membuat sesi baru; bila sesi sebelumnya masih aktif, pelanggan diminta mengonfirmasi untuk mengakhirinya. Riwayat lama tidak dihapus. Membuka percakapan lewat Riwayat tetap membuka sesi yang dipilih.
- Bahasa. Indonesia menjadi bahasa awal; pelanggan dapat memilih English. Nama layanan tidak berubah. Isi sapaan dan kategori versi English di Pengaturan Layanan, atau gunakan tombol terjemahan jika layanan tersebut aktif. Terjemahan disimpan sebagai pengaturan; tidak mengubah pesan pelanggan maupun riwayat.
- Emoji, lampiran, dan mengetik. Composer menyediakan emoji serta gambar JPG/PNG/WebP, PDF, Word/Excel, dan video MP4, satu file maksimal 10 MB per pesan. Lampiran diperiksa sebelum disimpan terenkripsi. Status mengetik muncul dua arah dan hilang otomatis saat berhenti. Balasan tidak memotong Kredit Balasan; tetap mengikuti fair use, rate limit, dan proteksi abuse.
Penyimpanan lampiran dibatasi 5 GB per workspace untuk menjaga kapasitas layanan. SDK memuat hingga 200 percakapan terbaru (100 aktif dan 100 selesai). Riwayat disimpan di GSender, bukan Firestore.
8. Kirim profil pelanggan dari backend aplikasi Anda
Nama, ID customer, email, dan telepon berasal dari akun yang sudah login. Jangan meminta customer mengetik ulang. Jangan menerima ID/email kiriman client sebagai identitas tanpa mencocokkannya dengan sesi login server.
Di endpoint backend customer yang dipanggil tokenProvider, ambil user dari sesi terautentikasi, lalu panggil API berikut dari server:
POST https://gsender.id/chat-api/v1/mobile-chat/identity/tokens
Content-Type: application/json
{
"server_credential": "CREDENTIAL_DARI_ENV_BACKEND",
"app_id": "APP_ID_DARI_GSENDER",
"external_customer_key": "ID_USER_LOGIN_YANG_STABIL",
"display_name": "Nama dari profil aplikasi",
"email": "customer@example.com",
"phone": "+6281234567890",
"metadata": {"customer_id": "CUSTOMER-001"}
}
ID dan nama wajib. external_customer_key adalah ID login stabil dan unik yang memisahkan riwayat tiap pengguna; display_name harus berisi nama customer, bukan nama umum. Jangan menggunakan email, token FCM, atau nomor yang dipakai bersama oleh beberapa pengguna sebagai identitas login.
ID yang dilihat agent: kirim nomor pelanggan aplikasi Anda melalui metadata.customer_id, misalnya CUSTOMER-001. Backend harus mengambil nilai ini dari data pelanggan yang hak aksesnya sudah diverifikasi. Bila aplikasi tidak punya nomor pelanggan terpisah, ID login otomatis menjadi ID pelanggan. Setiap pengguna tetap memiliki external_customer_key sendiri, meskipun tergabung dalam akun bisnis yang sama.
Email/telepon opsional. Kirim null atau tidak sertakan bila tidak tersedia/tidak ingin dibagikan; Inbox menampilkan “—”. Profil dikirim ulang pada setiap pertukaran token, sehingga email/telepon lama ikut dikosongkan saat tidak dibagikan lagi. Panel kanan Inbox menampilkan ID, nama, email, dan telepon; data ini bukan pesan chat dan tidak diminta ulang dari customer.
Contoh endpoint Laravel di backend customer, dilindungi middleware login aplikasi:
$customer = $request->user();
$result = Http::timeout(15)->post(
'https://gsender.id/chat-api/v1/mobile-chat/identity/tokens',
[
'server_credential' => config('services.gsender.server_credential'),
'app_id' => config('services.gsender.app_id'),
'external_customer_key' => (string) $customer->id,
'display_name' => $customer->name,
'email' => $customer->email,
'phone' => $customer->phone ?: null,
// Sesuaikan customer_number dengan kolom nomor pelanggan aplikasi Anda.
'metadata' => ['customer_id' => (string) ($customer->customer_number ?: $customer->id)],
]
);
abort_unless($result->successful(), 502, 'Sesi chat belum tersedia.');
return response()->json(['access_token' => $result->json('access_token')])
->header('Cache-Control', 'no-store');
Sesuaikan nama kolom profil dan mekanisme login dengan backend Anda. Hanya access_token berumur pendek yang dikembalikan ke SDK. Server credential tetap di backend. Panggil logout SDK saat logout/berganti akun agar riwayat customer sebelumnya tidak tampil pada akun berikutnya.