Dokümanlar

Flutter SDK

Respondo destek sohbeti için saf Dart bir istemci — derlenecek ya da hata ayıklanacak yerel platform kodu yok.

Gereksinimler#

  • Dart >=3.4.0 <4.0.0.
  • Flutter >=3.16.0 (3.x hattı).
  • Saf Dart: yerel köprü yok, pod install yok, Gradle düzenlemesi yok. Geçişli bağımlılıklar sade Dart paketleridir (http, web_socket_channel, uuid).

Kurulum#

Paketi pub.dev üzerinden ekleyin:

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

Başlatma#

Respondo.navigatorKey’i MaterialApp’inize bağlayın ki SDK, sohbet sayfasını sizin BuildContext’iniz olmadan açabilsin; Respondo.init’i bir kez, ardından Respondo.open()’i çağırın.

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();

  // Dosya depolama dizini bir host uygulama eklentisinden gelir; SDK saf kalır.
  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, // SDK'nın sohbeti açabilmesi için gereklidir
      home: Scaffold(
        body: Center(
          child: FilledButton(
            onPressed: () => Respondo.open(),
            child: const Text('Destek'),
          ),
        ),
      ),
    );
  }
}

Tüm cephe yöntemleri idempotenttir, init’ten önce çağrılması güvenlidir (tamponlayıp yeniden oynatırlar) ve asla uygulamanıza hata fırlatmazlar.

Kullanıcıları tanımlama#

Varsayılan olarak her ziyaretçi anonimdir. İlk açılışta SDK, kararlı bir visitor_id oluşturur ve onu yerel depoda tutar; böylece geri dönen bir kullanıcı konuşmasını yeniden bulur. Gömülecek bir API anahtarı yoktur — her konuşma, backend’in ürettiği ve her mesajda ilerlettiği konuşma başına bir oturum belirteciyle korunur; böylece anonim bir ziyaretçinin asla yeniden kimlik doğrulaması gerekmez.

Kullanıcınız oturum açtığında identify’i bir kez çağırın. Bu, gerçek kimliklerini iliştirir; böylece geçmişleri cihazlar ve yeniden kurulumlar arasında onları takip eder ve gelen kutunuzda konuşmanın yanında anonim bir ziyaretçi yerine adları ile e-postaları görünür.

userHash, backend’inizin ajanın identity_secret’ından hesapladığı bir imzadır — HMAC-SHA256(secret, userId) (veya userId yoksa e-posta), küçük harfli hex olarak kodlanır. Bu gizli anahtar, kimliğin gerçek olduğunu kanıtlar; bu yüzden yalnızca backend’inizde bulunmalı ve asla uygulamayla gönderilmemelidir. Tam formül ve sunucu tarafı örnekler için Kimlik doğrulama sayfasına bakın.

Dartdart
// 1. Kendi backend'inize karşı oturum açın ve önceden hesaplanmış hash'i okuyun
//    (örneğin, oturum açma yanıtıyla birlikte dönen bir alan).
final session = await api.login(email, password);

// 2. Tamamlanmış userHash'i SDK'ya verin — asla uygulamada hesaplamayın.
Respondo.identify(RespondoIdentity(
  userId: session.userId,
  email: session.email,
  name: session.fullName,
  userHash: session.respondoUserHash,
));

// 3. Çıkışta: oturumu iptal edin ve taze bir anonim ziyaretçi başlatın.
Respondo.reset();

Hash eksik veya yanlışsa hiçbir hata fırlatılmaz: backend, ziyaretçiyi sessizce anonim tutar, sohbet çalışmaya devam eder ve geçerli bir hash sağlanana kadar yalnızca cihazlar arası bağlantıyı kaybedersiniz. Doğrulama yalnızca ajanın ayarlanmış bir identity_secret’ı olduğunda çalışır — geliştirme sırasında onu boş bırakın; o zaman userId / e-posta olduğu gibi kabul edilir.

Gözlemlenebilirler & geri çağırmalar#

Her şey bir yayın Stream’i, bir geri çağırma setter’ı ve bir güncel değer getter’ı olarak mevcuttur.

Dartdart
// Okunmamış sayılarının reaktif akışı (bir rozet için).
Respondo.unreadCountStream.listen((n) => setBadge(n));

// Ya da bir geri çağırma setter'ı.
Respondo.onUnreadChanged = (n) => setBadge(n);

// Bağlantıları/CTA'ları yakalayın; host URL'i kendisi açtıysa true döndürün.
Respondo.onUrlRequested = (url) {
  openInAppBrowser(url);
  return true;
};

Ekran takibi#

Proaktif teaser’ların ve sayfa düzeyi hedeflemenin eşleşebilmesi için geçerli ekranı her gezinmede bildirin. Temizlemek için null geçirin; her değişimde proaktif teaser yeni ekran için yeniden değerlendirilir.

Dartdart
Respondo.setCurrentScreen('pricing');

Sonraki adımlar#

Push bildirimleri’ni ve Kimlik doğrulama’yı ekleyin. Tam API yüzeyi, etkileşim yüzeyleri ve sorun giderme, pub.dev paket sayfası üzerindeki Flutter SDK başlangıç kılavuzunda ele alınır.