Dokumentasi

Flutter SDK

Klien Dart murni untuk chat dukungan Respondo — tanpa kode platform native yang harus dikompilasi atau di-debug.

Persyaratan#

  • Dart >=3.4.0 <4.0.0.
  • Flutter >=3.16.0 (lini 3.x).
  • Dart murni: tanpa bridge native, tanpa pod install, tanpa penyuntingan Gradle. Dependensi transitif adalah paket Dart biasa (http, web_socket_channel, uuid).

Instalasi#

Tambahkan paket dari pub.dev:

pubspec.yamlyaml
dependencies:
  respondo_sdk: ^0.1.2
Dartdart
import 'package:respondo_sdk/respondo_sdk.dart';

Inisialisasi#

Ikat Respondo.navigatorKey ke MaterialApp Anda agar SDK dapat membuka sheet chat tanpa BuildContext Anda, panggil Respondo.init sekali, lalu Respondo.open().

main.dartdart
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:respondo_sdk/respondo_sdk.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Direktori penyimpanan file berasal dari plugin aplikasi host; SDK tetap murni.
  final dir = await getApplicationSupportDirectory();

  await Respondo.init(
    RespondoConfig(
      agentId: '<agent-uuid>',
      channelId: '<channel-uuid>',
      storageDirectory: dir.path,
    ),
  );

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      navigatorKey: Respondo.navigatorKey, // wajib agar SDK dapat membuka chat
      home: Scaffold(
        body: Center(
          child: FilledButton(
            onPressed: () => Respondo.open(),
            child: const Text('Support'),
          ),
        ),
      ),
    );
  }
}

Semua metode facade bersifat idempoten, aman dipanggil sebelum init (metode menyimpan di buffer lalu memutar ulang), dan tidak pernah melempar ke dalam aplikasi Anda.

Mengenali pengguna#

Secara default setiap pengunjung bersifat anonim. Pada peluncuran pertama SDK menghasilkan visitor_id yang stabil dan menyimpannya di penyimpanan lokal, sehingga pengguna yang kembali menemukan percakapannya lagi. Tidak ada kunci API yang perlu disematkan — setiap percakapan dilindungi oleh token sesi per percakapan yang dicetak backend dan digeser maju pada setiap pesan, sehingga pengunjung anonim tidak pernah harus melakukan autentikasi ulang.

Panggil identify setelah pengguna Anda masuk. Ini melampirkan identitas asli mereka sehingga riwayatnya mengikuti mereka di berbagai perangkat dan pemasangan ulang, dan nama serta email mereka muncul di samping percakapan di inbox Anda alih-alih pengunjung anonim.

userHash adalah tanda tangan yang dihitung backend Anda dari identity_secret milik agen — HMAC-SHA256(secret, userId) (atau email bila tidak ada userId), dikodekan sebagai hex huruf kecil. Secret ini membuktikan bahwa identitas asli, jadi ia harus hanya berada di backend Anda dan tidak pernah dikirim di dalam aplikasi. Lihat halaman Verifikasi identitas untuk formula lengkap dan contoh sisi server.

Dartdart
// 1. Masuk ke backend Anda sendiri dan baca hash yang sudah dihitung
//    (misalnya, sebuah field yang dikembalikan bersama respons login).
final session = await api.login(email, password);

// 2. Serahkan userHash yang sudah jadi ke SDK — jangan pernah menghitungnya di dalam aplikasi.
Respondo.identify(RespondoIdentity(
  userId: session.userId,
  email: session.email,
  name: session.fullName,
  userHash: session.respondoUserHash,
));

// 3. Saat logout: cabut sesi dan mulai pengunjung anonim baru.
Respondo.reset();

Jika hash hilang atau salah, tidak ada yang dilempar: backend diam-diam menjaga pengunjung tetap anonim, chat tetap berfungsi, dan Anda hanya kehilangan tautan lintas perangkat sampai hash yang valid diberikan. Verifikasi hanya berjalan saat agen memiliki identity_secret yang disetel — biarkan kosong selama pengembangan dan userId / email diterima apa adanya.

Observable & callback#

Semuanya tersedia sebagai Stream broadcast, setter callback, dan getter nilai saat ini.

Dartdart
// Stream reaktif untuk jumlah belum dibaca (untuk badge).
Respondo.unreadCountStream.listen((n) => setBadge(n));

// Atau setter callback.
Respondo.onUnreadChanged = (n) => setBadge(n);

// Cegat link/CTA; kembalikan true jika host membuka URL sendiri.
Respondo.onUrlRequested = (url) {
  openInAppBrowser(url);
  return true;
};

Pelacakan layar#

Laporkan layar saat ini pada setiap navigasi agar teaser proaktif dan penargetan tingkat halaman dapat mencocokkannya. Teruskan null untuk menghapusnya; pada setiap perubahan, teaser proaktif dievaluasi ulang untuk layar baru.

Dartdart
Respondo.setCurrentScreen('pricing');

Langkah berikutnya#

Tambahkan Notifikasi push dan Verifikasi identitas. Permukaan API lengkap, permukaan keterlibatan, dan pemecahan masalah dibahas dalam panduan memulai Flutter SDK di halaman paket pub.dev.