wisperbot_chat 0.2.4
wisperbot_chat: ^0.2.4 copied to clipboard
A customizable Flutter SDK for adding WisperBot customer chat to mobile, web, and desktop apps.
Changelog #
0.2.4 - 2026-10-17 #
Fixed #
- Login during an in-flight guest session now fetches account history after the guest request finishes persisting in its own scope. Delayed old session responses no longer overwrite account state or save guest credentials under an account namespace.
- Identifying the same user during initialization preserves the pending history request.
- Launch-time visitor registration no longer requests or requires notification permission. When permission is mandatory, it is deferred until the user opens chat, where denial is handled by the existing chat-opening UI.
- Launch registration reads an existing OneSignal subscription without opting in, prompting, or waiting for subscription retries.
0.2.3 - 2026-10-14 #
Removed #
- Removed the destructive
WisperBotChat.logout()API. Applications now switch to a name-only guest withidentify(...)when their user logs out.
Changed #
- Account and guest credentials remain stored in separate identity scopes, allowing the same user ID to recover its history after logging out and back in.
- Switching from an account to a guest clears the account's OneSignal alias without deleting either chat session.
0.2.2 - 2026-10-13 #
Added #
- Added
WisperBotUser.userIdas the canonical durable account identity while retainingexternalIdas a compatibility alias. - Added installation-bound secure-session schema v2 so guest history survives app restarts but does not survive uninstall/reinstall when Keychain credentials remain.
Changed #
- Session requests now send
user_id; names and email addresses are mutable profile fields and never define identity. - Name-only users now use the persistent guest scope, while each user ID keeps isolated local credentials.
- Profile changes for the same user ID retain the existing conversation and synchronize the updated profile.
- HMAC signatures are documented as optional advanced verification and are not required unless a widget owner enables verification.
Fixed #
- Logged-in users can recover the same server history from new devices or empty local storage through their user ID.
- Schema-v1 secure sessions migrate to schema v2 without losing existing history.
Documentation #
- Updated the primary integration, guest persistence boundaries, example app, and account-switching guidance for
userId.
0.2.1 - 2026-10-08 #
Fixed #
- Restored decoding of server-configured starter questions so the prebuilt chat UI displays its reusable question buttons again.
- Kept starter-question buttons disabled while a human handoff is waiting or connected.
Documentation #
- Restored the starter-question setup and headless integration guide.
0.2.0 - 2026-10-07 #
This is a breaking release. See the migration table in the README when
upgrading from 0.1.x.
Added #
- Added flat
WisperBotChat.initialize,identify,logout, andshutdownAPIs for a shared default runtime. - Added
WisperBotChat.launcher(),view(), andscreen()presentation helpers. - Added an automatic unread badge to the built-in launcher, with dot/count modes and color, size, typography, alignment, offset, padding, overflow, and custom-label options.
- Added the customizable
WisperBotChat.badge(child: ...)wrapper for unread-aware host widgets of any type, plusWisperBotChat.unreadCountfor fully custom UI. - Added
unreadCountandhasUnreadMessagesto controller state andWisperBotChatController.markRead()for headless integrations. - Added
registerVisitorOnAppLaunch, which defaults totrue, to initialization and headless-client options. - Added direct configuration and an optional initial
usertoWisperBotClient. - Notification permission gating now defaults to enabled; set
requireNotificationPermission: falseto opt out. - Persisted sessions now include a redacted identity-profile fingerprint, preventing changed names, avatars, or custom fields from restoring stale visitor metadata.
Changed #
- Developers now pass configuration directly to
WisperBotChat.initialize; the configuration object is internal. - Moved visitor identity to
WisperBotChat.identify; advanced runtimes can useWisperBotClient(user: ...)orWisperBotChatController.updateUser. - Made OneSignal notification handlers and eager visitor registration internal to
WisperBotChat.initialize. - Made the prebuilt screen, embedded view, launcher, and modal facade use the shared runtime by default.
- Updated the example to initialize once and use config-free chat surfaces.
- Decoupled public launcher configuration loading from visitor registration, so API colors and placement load even when
registerVisitorOnAppLaunchisfalse. - Agent messages are marked read only while chat UI is visible, and foreground resume refreshes history before restoring realtime updates.
- Numeric badges render normal one- and two-digit counts as circles and expand overflow or custom labels into pills.
Fixed #
- Updated launcher configuration decoding to accept the JavaScript object wrapper returned by the public widget loader, allowing API colors to load before chat opens.
- Invalidated persisted identified sessions when profile data changes, preventing stale names, avatars, or custom fields from being restored on a later launch.
- Anchored custom unread indicators to the wrapped widget rather than a larger parent and made badge offsets apply consistently in dot and count modes.
- Prevented stale refreshed or realtime message payloads from downgrading read status and making a cleared badge reappear.
- Deferred shared unread-listener notifications during active Flutter builds, preventing badge updates from causing build-phase exceptions.
Documentation #
- Added a progressive unread-badge guide with beginner integrations, common recipes, complete launcher and wrapper option references, advanced/headless usage, lifecycle behavior, positioning guidance, and troubleshooting.
Removed #
- Removed
WisperBotLocationandWisperBotUser.location; useWisperBotUser.customFieldsfor optional metadata. - Removed
WisperBotChat.initializeNotificationHandlersandWisperBotChat.registerVisitor. - Removed
WisperBotConfigfrom the public API; identity and initialization options now belong to the runtime. - Removed
WidgetOneSignalServicefrom the public package exports. - Removed automatic country, city, coordinates, page-title, and page-URL payload generation; explicit
customFieldscontinue to pass through unchanged.
0.1.7 - 2026-10-04 #
Added #
- Made
http://,https://, andwww.links in message text tappable while preserving text selection and copying. - Added feedback when a message link cannot be opened.
Changed #
- Foreground push notifications no longer display SDK SnackBars. Use
onForegroundNotificationfor custom foreground handling. - Retained
showInAppForegroundNotificationfor source compatibility; its value is now ignored.
0.1.6 - 2026-09-28 #
Added #
- Added reusable, accessible starter-question buttons from session configuration below the welcome message.
- Added immediate post-send message refresh so deterministic replies appear without waiting for realtime delivery.
- Added persistent human-handoff waiting and connected states, including the agent name when available.
Changed #
- Documented that new integrations must use the widget's Mobile SDK key.
Fixed #
- Applied realtime message delivery/read status updates immediately and prevented out-of-order status downgrades.
- Kept realtime bot answers behind their in-flight visitor message so replies no longer flash above the question before send confirmation.
- Ignored malformed realtime delivery-status payloads through defensive decoding.
- Improved native audio playback compatibility and cleaned up temporary audio resources and stale preview loads.
- Improved chat initialization and secure-session storage recovery.
- Added Settings guidance when microphone permission remains denied on a later recording attempt.
0.1.4 #
Changed #
- Replaced timer-based foreground polling with Pusher as the primary live conversation transport.
- Removed
WisperBotPollingConfigandWisperBotConfig.polling; retained bounded pull-to-refresh and initial history pagination without a periodic scheduler. - Realtime connections now follow listener and application lifecycle demand and retry failed initial socket connections.
0.1.3 #
Added #
- Added
WisperBotConfig.lightStatusBarIconsto use white status-bar content over dark or strongly colored headers in full-screen chat. - Added lightweight widget-configuration preloading so launchers can resolve dashboard colors and placement without opening chat or requesting notification permission.
- Added custom attachment, microphone, send, document, camera, gallery, audio, close, and delete icon assets.
Changed #
- Redesigned the message composer into a compact, single-row layout inspired by modern messaging apps.
- The text field now starts at one line, expands horizontally on focus, and grows vertically only for multiline messages.
- Attachment, microphone, and send controls now share the compact field height and remain bottom-aligned while the field expands.
- Updated the attachment picker to use the new document, camera, gallery, and audio assets.
- Updated chat-header and pending-attachment close actions to use the new close asset, and recording cancellation to use the new delete asset.
- Updated README configuration and launcher behavior documentation.
Fixed #
- Fixed
WisperBotChatLauncherbriefly showing the fallback brand color before applying the API-provided color. - Fixed API colors not appearing on notification-gated launchers until chat had been opened once.
- Fixed the enabled send icon retaining its dark disabled color instead of using the contrasting
onPrimarycolor. - Preserved a 48 dp accessible send target while keeping the visible button aligned with the 42 px compact composer.
0.1.2 #
Added #
- OneSignal Push Notifications: Added
oneSignalAppIdconfiguration inWisperBotConfigand push notification handling with automatic chat navigation on notification tap (WisperBotChat.handleNotificationClick,WisperBotChat.openChatFromNotification). - Document & File Attachments: Added cross-platform document picking support (
file_selector) alongside camera and gallery image attachments. - Attachment Picker Sheet: Introduced interactive attachment bottom sheet for selecting photos, camera captures, or documents.
- Rich Document & File Preview: Enhanced message bubbles to render document icons, file sizes, file extensions, and tap-to-open handlers.
Changed #
- Enhanced pre-chat form validation with robust field requirements checking.
- Refined message composer bottom padding and attachment action layout.
- Updated example application to demonstrate document attachments and OneSignal configuration.
- Updated documentation and presentation screenshots.
0.1.1 #
Documentation & Assets #
- Reorganized README with a developer-first flow, quick start, and platform setup instructions.
- Added a full
WisperBotConfigproperty reference table and example snippets. - Added visual UI showcase screenshots for all presentation styles (full screen, bottom sheet, dialog, floating launcher, embedded view).
0.1.0 #
Added #
- Reusable Flutter package structure with a cross-platform example app.
- Anonymous and verified-user chat sessions with secure, identity-scoped storage.
- Public widget API client with injectable HTTP transport and session storage.
- Typed chat state, events, errors, and redacted diagnostics.
- Lifecycle-aware foreground polling with message ordering, deduplication, and send/server-echo reconciliation.
- Text, image, and audio message transport using the current visitor API.
- Human handoff, typing updates, and required pre-chat support.
- Prebuilt full-screen, launcher, embedded, bottom-sheet, dialog, and headless integration surfaces.
- Material UI defaults with server/host theme resolution, loading, empty, error, reconnecting, offline, and accessibility states.
WisperBotConfig.useApiColorsfor switching between API-provided colors and the built-in WisperBot brand palette.- Format-aware remote image rendering for SVG and Flutter-supported raster assets.
- Public API documentation and contributor guidance.
Changed #
- Aligned visitor requests with the Laravel widget API and removed unsupported realtime, identity-outcome, and unread state contracts.
- Reorganized internals into configuration, domain, application, data, and presentation boundaries without changing the public API.
- Clarified networking through named API endpoints, a central HTTP caller, and an operation-oriented widget remote data source.
- Updated the default Flutter chat UI to better match the WisperBot web widget.
- Increased bottom-sheet presentation height to 96% of the available safe height.
- Moved example widget key and API base URL configuration into a local
.envfile. - Kept built-in copy in English while leaving localization delegates and label overrides as a pre-stable API task.
- Updated package/example dependency versions and Android example compile SDK, and removed generated iOS Flutter build files from version control.
Fixed #
- Corrected image/audio delivery to use the backend multipart upload format.
- Fixed duplicate outgoing bubbles by reconciling poll echoes with in-flight send responses.
- Removed routine
SendingandSentbubble labels while retaining internal delivery tracking and visible failed/unconfirmed states. - Validated image/audio extension and MIME pairs, caption limits, byte limits, and native multipart edge
406failures. - Ensured required pre-chat submission is token-bound and does not persist submitted PII.
- Routed backend AI auto-replies through the queue so visitor sends can be acknowledged immediately.
Documented #
- Current backend contract and native domain-policy limitation.