respondo_sdk
Respondo is an AI-powered customer support platform — an AI agent plus seamless human handoff. This package puts that support experience right inside your Flutter app, in pure Dart.
Why Respondo
Respondo answers your customers instantly. An AI agent resolves questions in real time from your own knowledge base, and escalates to a human teammate the moment a conversation needs one — with full context, no repetition. Every channel (in-app chat, email, Slack, Discord, Telegram, WhatsApp) lands in the same shared inbox, so support stays in one place.
respondo_sdk is the Flutter client for that platform: a drop-in chat surface with no native code to maintain.
Features
- AI + human support chat in a native bottom-sheet, themed from your Respondo widget config.
- Realtime messaging over WebSocket with automatic fallbacks and reconnect.
- File attachments through a host-provided picker — the package stays free of native plugins.
- Push notifications (APNs / FCM) — plug in your own
firebase_messaging; the SDK consumes the token and payload. - Identity verification with HMAC-signed users — the trusted pattern you already know from tools like Intercom.
- Engagement surfaces: surveys (NPS / CSAT), news, checklists, and proactive messages.
- 8 UI languages with automatic locale detection.
- Pure Dart — no platform channels, no native code, zero glue to maintain.
Install
dependencies:
respondo_sdk: ^0.1.1
The SDK relies on http, web_socket_channel, and uuid. To persist the visitor session across restarts, add path_provider as well (used in the quick start below).
Quick start
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();
// Persist the visitor session so conversations survive app restarts.
final dir = await getApplicationSupportDirectory();
await Respondo.init(
RespondoConfig(
agentId: '<agent-uuid>',
channelId: '<channel-uuid>',
locale: 'en',
storageDirectory: dir.path, // omit for in-memory (lost on restart)
),
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
// Lets the SDK present the chat bottom-sheet without a host BuildContext.
navigatorKey: Respondo.navigatorKey,
home: Scaffold(
body: Center(
child: ElevatedButton(
onPressed: Respondo.open, // show the support chat
child: const Text('Open support chat'),
),
),
),
);
}
}
Identify a signed-in user
// userHash is an HMAC computed by YOUR backend — the secret must never ship in the app.
// See the identity verification guide in the docs at https://respondo.ai/docs
Respondo.identify(
RespondoIdentity(
userId: 'u_123',
email: 'jane@example.com',
userHash: '<hmac-from-your-backend>',
),
);
Respondo.reset(); // on logout: revoke the session and start a fresh visitor
Without a userHash, the chat simply works anonymously — identity is optional.
Push notifications
// Your app owns the token (e.g. via firebase_messaging); the SDK only receives it.
Respondo.setPushToken(fcmToken);
Respondo.clearPushToken(); // on logout
// On an incoming data push or a tap on it:
final handled = Respondo.handlePushData(remoteMessage.data);
Observe unread state
Respondo.unreadCountStream.listen((count) => setBadge(count));
Respondo.onUrlRequested = (url) { openInApp(url); return true; };
Where to get agentId and channelId
Open the Respondo dashboard → Channels → Widget — the agent and channel IDs are shown there. No API key is required: the SDK talks to your public widget channel.
Links
- Product and dashboard: https://respondo.ai
- Documentation and guides: https://respondo.ai/docs
- Support: reach out through your Respondo dashboard or https://respondo.ai
Ready to add AI-powered support to your Flutter app? Get started at https://respondo.ai.
Libraries
- respondo_sdk
- Respondo support chat SDK for Flutter.