respondo_sdk 0.1.0
respondo_sdk: ^0.1.0 copied to clipboard
Native Respondo support-chat SDK for Flutter: chat, news, surveys, banners, checklists and push notifications in pure Dart, with no native code.
respondo_sdk (Flutter) #
Нативный чат поддержки Respondo для встраивания в Flutter-приложения. Чистый
Dart, без нативного кода и плагинов с нативным кодом. Публичная поверхность
соответствует sdks/spec/api-surface.md; поведение — sdks/spec/behavior.md.
Установка #
Пакет версии 0.1.0. Публикация на pub.dev появится позже; пока подключается
по path- или git-зависимости.
Локально (монорепо):
dependencies:
respondo_sdk:
path: ../sdks/flutter/respondo_sdk
По git (пакет лежит в подкаталоге репозитория):
dependencies:
respondo_sdk:
git:
url: https://bitbucket.org/hub2026/respondo.git
path: sdks/flutter/respondo_sdk
ref: sdk-v0.1.0 # git-тег релиза
Зависимости: http, web_socket_channel, uuid. Полное руководство —
docs/sdk/getting-started-flutter.md.
Подключение #
- Привяжите
Respondo.navigatorKeyкMaterialApp.navigatorKey— по нему SDK показывает bottom-sheet чата без BuildContext от host:
MaterialApp(
navigatorKey: Respondo.navigatorKey,
home: HomeScreen(),
);
- Инициализируйте SDK (обычно один раз при старте):
final dir = await getApplicationSupportDirectory(); // из host-приложения
await Respondo.init(
RespondoConfig(
agentId: '<agent-uuid>',
channelId: '<channel-uuid>',
locale: 'ru',
storageDirectory: dir.path, // без него — in-memory (не переживёт перезапуск)
),
);
- Управляйте чатом:
Respondo.open(); // показать bottom-sheet
Respondo.identify(RespondoIdentity(userId: 'u1', email: 'a@b.c', userHash: '<hmac>'));
Respondo.track('purchase', properties: {'plan': 'pro'});
Respondo.close();
Respondo.reset(); // logout: revoke-session + новый визитёр
Наблюдаемые и колбэки #
Respondo.unreadCountStream.listen((n) => setBadge(n));
Respondo.chatStateStream.listen((s) => print(s));
Respondo.onUnreadChanged = (n) => setBadge(n);
Respondo.onUrlRequested = (url) { openInApp(url); return true; };
Push #
Токен добывает host (например firebase_messaging); SDK его только принимает:
Respondo.setPushToken(fcmToken);
Respondo.clearPushToken(); // logout
// На входящий data-пуш / тап по нему:
final handled = Respondo.handlePushData(remoteMessage.data);
// либо, если payload уже разобран:
final payload = RespondoPushPayload.from(remoteMessage.data);
if (payload != null) Respondo.handlePush(payload);
Вложения #
Пакет не тянет нативный пикер файлов. Передайте attachmentPicker в конфиг —
host сам выбирает файл, SDK загружает и прикрепляет:
RespondoConfig(
agentId: '...',
attachmentPicker: () async {
final picked = await myImagePicker(); // ваша реализация
if (picked == null) return null;
return RespondoPickedFile(
bytes: picked.bytes,
filename: picked.name,
contentType: picked.mimeType,
);
},
);
Если attachmentPicker не задан — кнопка вложения в композере скрыта.
Ссылки в чате #
SDK не открывает URL сам (нет плагина браузера — пакет чистый). Назначьте
Respondo.onUrlRequested, чтобы перехватывать ссылки/CTA; верните true, если
host открыл URL.
Ограничения (осознанные) #
- Тёмная тема не поддерживается (в вебе её нет; чат всегда светлый — theming.md §7).
- Engagement-поверхности (News, опросы, баннеры, чеклисты, proactive) — фаза Ф3;
сейчас
openNews/openChecklistsоткрывают чат-лист. app_versionиdevice_modelв автоконтекстеmetadatahost передаёт сам (черезidentity.metadata) — пакет чистый и не добывает их плагинами.