Sello de no leídos
Un contador reactivo que usted cuelga del icono que ya existe en su interfaz.
Nueve paquetes nativos llevan el widget dentro de su app — sello de no leídos, chat, agente de IA y novedades, con push en el celular — incluso en stacks que suelen quedar fuera, como Delphi 7 y Lazarus.
Los nueve paquetes nativos están publicados, cada uno en el gestor de paquetes de su plataforma. Donde no hay paquete, el widget web funciona en cualquier app con WebView.
Móvil
Escritorio
Web y empaquetados
Delphi se instala con Boss. Lazarus viene directo del repositorio: clónelo y abra el paquete bfocus_widget_lcl.lpk. Los demás salen del registro de cada plataforma.
Los fragmentos de abajo son los mismos del README de cada paquete.
<!-- antes de </body> --> <script> (function (w, d) { w.bFocusQueue = w.bFocusQueue || []; w.bFocus = w.bFocus || { init: function(o){ w.bFocusQueue.push(['init', o]); } }; var s = d.createElement('script'); s.async = true; s.src = 'https://widget.bfocus.com.br/v1/widget.js'; s.setAttribute('data-bf-key', 'bf_pk_…'); d.head.appendChild(s); })(window, document); bFocus.init({ user: { externalId: 'USR-123', name: 'João Silva' }, customer: { externalId: 'EMP-456', name: 'Empresa Ltda' }, userHash: '…' // firmado en SU servidor }); </script>
Widget web — disponible, servido por la CDN
# Flutter — pubspec.yaml bfocus_widget: ^0.1.0 // iOS — Package.swift (productos BFocusWidget y BFocusWidgetCore) .package(url: "https://github.com/bernisoftware/bfocus-widget-ios", from: "0.1.2") // Android — build.gradle.kts (para Compose: bfocus-widget-android-compose) implementation("br.com.bernisoftware:bfocus-widget-android:0.1.0") # React Native $ npm i @bfocus/react-native-widget react-native-webview @react-native-async-storage/async-storage # .NET — o Bfocus.Widget.Wpf / Bfocus.Widget.Maui $ dotnet add package Bfocus.Widget.WinForms // Java desktop — o bfocus-widget-swing implementation("br.com.bernisoftware:bfocus-widget-javafx:0.1.0") # Delphi $ boss install github.com/bernisoftware/bfocus-widget-delphi # Lazarus — luego abra package/bfocus_widget_lcl.lpk $ git clone https://github.com/bernisoftware/bfocus-widget-lazarus # Python desktop — o [tk] $ pip install "bfocus-widget[qt]"
Un comando por plataforma. La clave publicable es la misma en todas.
# pubspec.yaml dependencies: bfocus_widget: ^0.1.0 import 'package:bfocus_widget/bfocus_widget.dart'; await BFocus.init(BFocusConfig( publishableKey: 'bf_pk_…', user: BFocusUser(externalId: u.id, name: u.nome), customer: BFocusCustomer(externalId: u.empresaId), userHashProvider: () => minhaApi.bfocusUserHash(), navigatorKey: navigatorKey, product: 'erp', // opcional: marca del producto ));
Paquete bfocus_widget 0.1.0, publicado en pub.dev
// Flutter: el sello sigue el estado del widget ValueListenableBuilder<String>( valueListenable: BFocus.badge, // '' | '•' | 'N' | '99+' builder: (context, label, _) => Badge( isLabelVisible: label.isNotEmpty, label: Text(label), child: IconButton( icon: const Icon(Icons.support_agent), onPressed: () => BFocus.open(context: context), ), ), );
El contador de no leídos es reactivo: lo dibuja donde quiera
Lo esencial vale en todos. Donde la plataforma cambia la forma, el texto dice cuál.
Un contador reactivo que usted cuelga del icono que ya existe en su interfaz.
Píldora de versión y banner de la última nota, con confirmación de lectura cuando usted la exija.
En Flutter, iOS, Android, React Native y .NET MAUI, la notificación sale por su proyecto Firebase, con el nombre y el icono de su app. En el escritorio, el sello y la notificación del sistema vienen de una consulta periódica.
Abre directo en el ticket o en la novedad; en el celular, también al tocar la notificación con la app cerrada.
Enviar foto, documento y descargar lo que mandó el agente, con los permisos correctos de cada sistema.
En los paquetes con WebView, pantalla propia de red no disponible, con reintento automático cuando vuelve.
En el gestor de paquetes de cada plataforma: pub.dev, Swift Package Manager, Maven Central, npm, NuGet y PyPI. Delphi se instala con Boss y Lazarus viene directo de GitHub. El código de todos está en github.com/bernisoftware.
No. En los paquetes con WebView, la interfaz viene de la CDN. En todos, textos, colores, base de conocimiento y agente vienen del servidor, sin volver a publicar la app.
Existe el modo navegador: su sistema abre el widget en el navegador predeterminado con la sesión ya firmada, y el usuario sigue identificado. Así funcionan VB6, Harbour y Visual FoxPro.
La clave pública identifica su cuenta y puede quedar visible en la app. La firma HMAC, calculada en su servidor, es lo que prueba que ese usuario es quien dice ser — con la identidad verificada activada, bFocus rechaza a quien no la trae. Vale 7 días: su servidor genera otra cuando vence.
Sí. El origen del paquete nativo es app:// seguido del id de la aplicación, y entra en la misma lista de dominios autorizados del widget. Ahí el id se comprueba entero: app://com.cliente no habilita app://com.cliente.otro, porque el host es un identificador de aplicación y no un dominio. Registre uno por app. En la web es al revés: el dominio raíz ya cubre los subdominios.
Instale el paquete de su stack o empiece por el widget web. La clave es la misma.