view360directchat 1.0.0 copy "view360directchat: ^1.0.0" to clipboard
view360directchat: ^1.0.0 copied to clipboard

A Flutter package providing real-time socket connections, HTTP APIs, LiveKit audio/video calling, and push messaging for implementing the View360 chat feature.

📦 view360directchat (view360_chat) #

A comprehensive Flutter package for integrating View360's real-time chat & AI voice call solutions into Flutter applications.

view360directchat enables real-time customer support chat, REST-based messaging API, file attachment uploads, automatic push notifications via Firebase Cloud Messaging (FCM), local session persistence, and an interactive LiveKit-powered AI Voice Call page.


🌟 Key Features #

  • 🔌 Real-time Socket Connection (SocketManager) — Instant bidirectional web-socket communication using socket_io_client.
  • 💬 Chat Session Management (ChatService) — Easily register chat sessions, send text messages, handle queuing, and close sessions.
  • 📎 Multipart Attachment Uploads — Send images (.jpg, .png, .gif), documents (.pdf, .xlsx, .csv), and videos (.mp4).
  • 📜 Chat History Retrieval — Fetch past conversation messages with timestamps and sender identifiers.
  • 📲 FCM Push Notification Sync — Automatically registers Firebase Cloud Messaging tokens with View360 servers.
  • 💾 Persistent Local Storage (View360ChatPrefs) — Automatically saves customer IDs, chat IDs, and queue statuses using shared_preferences.
  • 🎙️ AI Voice Calling (View360CallPage) — Complete pre-built UI and service (LivekitCallService) for real-time voice conversations powered by LiveKit WebRTC, live transcription streaming, and post-call feedback ratings.

📁 Package Architecture #

lib/
├── view360directchat.dart       # Main package barrel export file
└── src/
    ├── api/
    │   └── api_service.dart      # REST API client (ChatService)
    ├── socket/
    │   └── socket_managet.dart   # Socket.IO connection manager (SocketManager)
    ├── local/
    │   └── local_storage.dart    # Shared preferences helper (View360ChatPrefs)
    ├── model/
    │   ├── chat_response.dart    # Session registration models
    │   ├── chat_list_response.dart # Chat history and message models
    │   ├── sending_response.dart # Message delivery responses
    │   └── storage_pre_model.dart# Preferences data model
    ├── helper/
    │   └── function.dart         # Utility functions (MIME detection, FCM helper)
    └── call/                     # AI Voice Call Sub-system
        ├── config/               # Call configs, themes, and localized strings
        ├── model/                # Token & transcript data models
        ├── service/              # LiveKit WebRTC call state engine
        └── ui/                   # Voice call screen & UI state widgets

💻 Installation & Platform Configuration #

Add the dependency to your pubspec.yaml:

dependencies:
  view360directchat: ^1.0.0

🤖 Android Setup #

In android/app/src/main/AndroidManifest.xml, ensure the following permissions are present:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Required permissions for LiveKit Voice Calls -->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE"/>

    <application>
        ...
    </application>
</manifest>

🍏 iOS Setup #

Add the required usage descriptions and background modes to ios/Runner/Info.plist:

<key>NSMicrophoneUsageDescription</key>
<string>Microphone access is required for AI voice calls.</string>

<key>UIBackgroundModes</key>
<array>
  <string>fetch</string>
  <string>remote-notification</string>
</array>

<key>NSUserTrackingUsageDescription</key>
<string>We need your permission to send notifications for chat updates.</string>

🚀 Usage Guide #

1. Initialize Real-Time Socket Manager #

The SocketManager singleton connects to the View360 WebSocket server (/chatsocket.io namespace) and handles events such as incoming messages, agent join notifications, and session closures.

import 'package:view360directchat/view360directchat.dart';

final socketManager = SocketManager();

socketManager.connect(
  baseUrl: 'https://your-view360-domain.com',
  onConnected: () {
    print('✅ Socket connected successfully!');
  },
  onMessage: ({
    required String content,
    List<String>? filePaths,
    required dynamic response,
    required String senderType,
    required String createdAt,
  }) {
    print('📩 Message from $senderType: $content');
    if (filePaths != null && filePaths.isNotEmpty) {
      print('📎 Attachments: $filePaths');
    }
  },
  onAgentJoin: ({required String name}) {
    print('👤 Agent connected: $name');
  },
  onAgentClose: () {
    print('🔴 Agent closed the chat session.');
  },
);

// To disconnect when no longer needed:
// socketManager.disconnect();

2. Register & Create a Chat Session #

Instantiate ChatService with your View360 base URL and App ID to start a conversation.

import 'package:view360directchat/view360directchat.dart';

final chatService = ChatService(
  baseUrl: 'https://your-view360-domain.com',
  appId: 'YOUR_VIEW360_APP_ID',
);

final response = await chatService.createChatSession(
  chatContent: 'Hello! I need help with my account.',
  customerName: 'John Doe',
  customerEmail: 'john.doe@example.com',
  customerPhone: '+1234567890',
  fetchFCMToken: true, // Automatically fetches and updates FCM token
);

if (response.success) {
  if (response.isInQueue) {
    print('⏳ Customer placed in queue. Waiting for an available agent.');
  } else if (response.isOutOfOfficeTime) {
    print('🌙 Session created, but currently out of office hours.');
  } else {
    print('✅ Chat session established!');
  }
} else {
  print('❌ Error starting chat: ${response.message}');
}

3. Send Chat Messages & Attachments #

Send text messages along with optional file attachments (images, PDFs, videos, spreadsheets).

final sendResponse = await chatService.sendChatMessage(
  chatContent: 'Here is the requested invoice.',
  filePath: [
    '/path/to/invoice.pdf',
    '/path/to/screenshot.png',
  ],
);

if (sendResponse.status) {
  print('✅ Message delivered!');
} else {
  print('❌ Message failed to send: ${sendResponse.error}');
}

Supported Attachment Types

  • Images: .jpg, .jpeg, .png, .gif
  • Documents: .pdf, .xlsx, .csv
  • Video: .mp4

4. Fetch Conversation History #

Retrieve the complete chat history for the active session:

final history = await chatService.fetchMessages();

if (history.success) {
  for (var msg in history.messages) {
    print('[${msg.createdAt}] ${msg.senderType}: ${msg.content}');
    if (msg.files.isNotEmpty) {
      print('  Files: ${msg.files}');
    }
  }
} else {
  print('❌ Failed to load messages: ${history.error}');
}

5. Close Chat Session #

End the chat session on the server and clear locally cached credentials:

await chatService.closeChat();
print('Chat session ended and local storage cleared.');

6. Local Session Storage (View360ChatPrefs) #

Inspect or clear saved customer preferences manually if needed:

// Retrieve stored session model
View360ChatPrefsModel prefModel = await View360ChatPrefs.getString();
print('Customer ID: ${prefModel.customerId}');
print('Chat ID: ${prefModel.chatId}');
print('In Queue: ${prefModel.isInQueue}');

// Clear session
await View360ChatPrefs.remove();

7. AI Voice Call Feature (View360CallPage) #

Integrate an interactive, full-screen AI voice calling experience powered by LiveKit WebRTC:

import 'package:flutter/material.dart';
import 'package:view360directchat/view360directchat.dart';

void openVoiceCall(BuildContext context) {
  Navigator.push(
    context,
    MaterialPageRoute(
      builder: (_) => View360CallPage(
        config: const View360CallConfig(
          tokenUrl: 'https://ai.view360.cx/api/token',
          sdkId: 'YOUR_SDK_ID',
          apiKey: 'YOUR_API_KEY',
          livekitUrl: 'wss://livekit.view360.cx',
          notificationTitle: 'Active AI Voice Call',
          notificationText: 'Voice call is in progress...',
        ),
        userName: 'John Doe',
        userPhone: '+1234567890',
        userEmail: 'john.doe@example.com',
        // Optional Customizations
        theme: View360CallTheme(
          primaryColor: Colors.deepPurple,
        ),
        strings: const View360CallStrings(
          agentName: 'View360 Voice Assistant',
          haveAQuestion: 'Need instant help?',
        ),
        onCallStarted: () => print('🎙️ Voice call started'),
        onCallEnded: () => print('📞 Voice call ended'),
        onRatingSubmitted: (rating, feedback) {
          print('⭐ Customer rating: $rating, feedback: $feedback');
        },
        onError: (error) => print('⚠️ Call error: $error'),
      ),
    ),
  );
}

🛠️ API Reference Summary #

Module Core Class Main Purpose
API ChatService Manages REST endpoints for registration, sending messages/files, history, FCM tokens, and session closing.
Socket SocketManager Singleton socket client handling real-time incoming messages, agent assignment, and disconnect events.
Storage View360ChatPrefs Manages SharedPreferences persistence for customer ID, chat ID, and queue status.
Call UI View360CallPage Flutter widget rendering the AI Voice Call interface with live transcription bubbles and call controls.
Call Engine LivekitCallService ChangeNotifier state engine controlling WebRTC connection, mute/speaker toggles, and rating submissions.
Call Config View360CallConfig Configuration holder for token URLs, LiveKit WebSocket URLs, SDK IDs, and API keys.

📄 License #

This package is proprietary software maintained by View360 (Systech). For inquiries, visit view360.cx.

1
likes
0
points
225
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package providing real-time socket connections, HTTP APIs, LiveKit audio/video calling, and push messaging for implementing the View360 chat feature.

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

firebase_messaging, flutter, http, http_parser, livekit_client, shared_preferences, socket_io_client

More

Packages that depend on view360directchat