డాక్యుమెంటేషన్

Flutter SDK

Respondo సపోర్ట్ చాట్ కోసం స్వచ్ఛమైన Dart క్లయింట్ — కంపైల్ చేయాల్సిన లేదా డీబగ్ చేయాల్సిన నేటివ్ ప్లాట్‌ఫామ్ కోడ్ ఏదీ లేదు.

అవసరాలు#

  • Dart >=3.4.0 <4.0.0.
  • Flutter >=3.16.0 (3.x శ్రేణి).
  • స్వచ్ఛమైన Dart: నేటివ్ బ్రిడ్జ్‌లు లేవు, pod install లేదు, Gradle మార్పులు లేవు. ట్రాన్సిటివ్ డిపెండెన్సీలన్నీ సాధారణ Dart ప్యాకేజీలే (http, web_socket_channel, uuid).

ఇన్‌స్టాలేషన్#

ప్యాకేజీని pub.dev నుంచి జోడించండి:

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

ఇనిషియలైజేషన్#

మీ BuildContext లేకుండానే SDK చాట్ షీట్‌ను తెరవగలిగేలా Respondo.navigatorKey ను మీ MaterialApp కు ముడిపెట్టండి, Respondo.init ఒకసారి పిలవండి, ఆ తర్వాత 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();

  // ఫైల్ నిల్వ డైరెక్టరీ హోస్ట్ యాప్ ప్లగిన్ నుంచి వస్తుంది; SDK స్వచ్ఛంగానే ఉంటుంది.
  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 చాట్‌ను తెరవడానికి ఇది తప్పనిసరి
      home: Scaffold(
        body: Center(
          child: FilledButton(
            onPressed: () => Respondo.open(),
            child: const Text('Support'),
          ),
        ),
      ),
    );
  }
}

ఫసాడ్ మెథడ్‌లన్నీ ఇడెంపొటెంట్; init కంటే ముందు పిలిచినా ఇబ్బంది లేదు (అవి బఫర్ చేసి తర్వాత మళ్లీ నడుపుతాయి), మీ యాప్‌లోకి ఎప్పుడూ ఎక్సెప్షన్ విసరవు.

వినియోగదారుల గుర్తింపు#

డిఫాల్ట్‌గా ప్రతి సందర్శకుడూ అనామకుడే. మొదటిసారి యాప్ మొదలైనప్పుడు SDK ఒక స్థిరమైన visitor_id ను సృష్టించి లోకల్ స్టోరేజ్‌లో ఉంచుతుంది, అందుకే తిరిగి వచ్చిన వినియోగదారు తన సంభాషణను మళ్లీ కనుగొంటాడు. యాప్‌లో పొందుపరచాల్సిన API కీ ఏదీ లేదు — ప్రతి సంభాషణకూ బ్యాకెండ్ జారీ చేసి ప్రతి మెసేజ్ వద్దా ముందుకు జరిపే ఒక సెషన్ టోకెన్ రక్షణగా ఉంటుంది, కాబట్టి అనామక సందర్శకుడు మళ్లీ మళ్లీ ప్రామాణీకరణ చేయాల్సిన అవసరం రాదు.

మీ వినియోగదారు సైన్-ఇన్ అయిన వెంటనే identify ను పిలవండి. ఇది అతని నిజమైన గుర్తింపును జతచేస్తుంది, అందువల్ల అతని చరిత్ర పరికరాల మధ్య, రీఇన్‌స్టాల్‌ల మధ్య కూడా అతనితోనే ఉంటుంది, మీ ఇన్‌బాక్స్‌లో సంభాషణ పక్కన అనామక సందర్శకుడికి బదులు అతని పేరు, ఈమెయిల్ కనిపిస్తాయి.

userHash అనేది ఏజెంట్ యొక్క identity_secret నుంచి మీ బ్యాకెండ్ లెక్కించే సంతకం — HMAC-SHA256(secret, userId) (userId లేనప్పుడు ఈమెయిల్), చిన్న అక్షరాల hex రూపంలో. గుర్తింపు నిజమైనదని ఆ సీక్రెట్ రుజువు చేస్తుంది, కాబట్టి అది మీ బ్యాకెండ్‌లో మాత్రమే ఉండాలి, యాప్‌తో పాటు ఎప్పుడూ పంపకూడదు. పూర్తి సూత్రం, సర్వర్-వైపు ఉదాహరణల కోసం గుర్తింపు ధ్రువీకరణ పేజీ చూడండి.

Dartdart
// 1. మీ సొంత బ్యాకెండ్‌తో సైన్ ఇన్ చేసి ముందే లెక్కించిన హాష్‌ను చదవండి
//    (ఉదాహరణకు, లాగిన్ జవాబుతో పాటే వచ్చే ఒక ఫీల్డ్).
final session = await api.login(email, password);

// 2. సిద్ధమైన userHashను SDKకు ఇవ్వండి — దాన్ని యాప్‌లో ఎప్పుడూ లెక్కించవద్దు.
Respondo.identify(RespondoIdentity(
  userId: session.userId,
  email: session.email,
  name: session.fullName,
  userHash: session.respondoUserHash,
));

// 3. లాగౌట్ అయినప్పుడు: సెషన్‌ను రద్దు చేసి కొత్త అనామక సందర్శకుడిని మొదలుపెట్టండి.
Respondo.reset();

హాష్ లేకపోయినా, తప్పుగా ఉన్నా ఏదీ కూలిపోదు: బ్యాకెండ్ మౌనంగా సందర్శకుడిని అనామకుడిగానే ఉంచుతుంది, చాట్ పని చేస్తూనే ఉంటుంది, సరైన హాష్ ఇచ్చే వరకు మీరు పరికరాల మధ్య అనుసంధానాన్ని మాత్రమే కోల్పోతారు. ఏజెంట్‌కు identity_secret సెట్ చేసినప్పుడే ధ్రువీకరణ జరుగుతుంది — డెవలప్‌మెంట్ సమయంలో దాన్ని ఖాళీగా వదిలేస్తే userId / ఈమెయిల్ ఉన్నవి ఉన్నట్టుగానే స్వీకరించబడతాయి.

Observables & callbacks#

ప్రతిదీ బ్రాడ్‌కాస్ట్ Stream గా, కాల్‌బ్యాక్ సెట్టర్‌గా, ప్రస్తుత విలువ గెట్టర్‌గా అందుబాటులో ఉంటుంది.

Dartdart
// చదవని మెసేజ్‌ల సంఖ్య రియాక్టివ్ స్ట్రీమ్ (బ్యాడ్జ్ కోసం).
Respondo.unreadCountStream.listen((n) => setBadge(n));

// లేదా కాల్‌బ్యాక్ సెట్టర్.
Respondo.onUnreadChanged = (n) => setBadge(n);

// లింక్‌లు/CTAలను అడ్డుకోండి; హోస్ట్ URLను తానే తెరిస్తే true తిరిగి ఇవ్వండి.
Respondo.onUrlRequested = (url) {
  openInAppBrowser(url);
  return true;
};

స్క్రీన్ ట్రాకింగ్#

ప్రతి నావిగేషన్‌లో ప్రస్తుత స్క్రీన్‌ను నివేదించండి — ముందస్తు టీజర్లు, పేజీ-స్థాయి టార్గెటింగ్ దానితో సరిపోల్చగలుగుతాయి. క్లియర్ చేయడానికి null పంపండి; ప్రతి మార్పులోనూ కొత్త స్క్రీన్‌కు ముందస్తు టీజర్ మళ్లీ మూల్యాంకనం అవుతుంది.

Dartdart
Respondo.setCurrentScreen('pricing');

తదుపరి దశలు#

పుష్ నోటిఫికేషన్‌లు, గుర్తింపు ధ్రువీకరణ జోడించండి. పూర్తి API ఉపరితలం, ఎంగేజ్‌మెంట్ ఉపరితలాలు, సమస్యల పరిష్కారం — pub.dev ప్యాకేజీ పేజీలోని Flutter SDK getting-started గైడ్‌లో ఉన్నాయి.