sendInternalEvent function

Future<void> sendInternalEvent({
  1. required String apiKey,
  2. required dynamic chatbotConfig,
  3. required ChatbotEventType eventType,
  4. Map<String, dynamic>? additionalData,
  5. Map<String, dynamic>? userProfile,
  6. Map<String, dynamic>? systemInfoMap,
})

Implementation

Future<void> sendInternalEvent({
  required String apiKey,
  required dynamic chatbotConfig,
  required ChatbotEventType eventType,
  Map<String, dynamic>? additionalData,
  Map<String, dynamic>? userProfile,
  Map<String, dynamic>? systemInfoMap,
}) async {
  if (apiKey.isEmpty) return;
  try {
    final sysInfo = getSystemInfo(systemInfoMap ?? {'os': '', 'browser': ''});
    final eventData = {
      'trigger_time': DateTime.now().millisecondsSinceEpoch,
      'channel': 'CHATBOT',
      'org_id': apiKey,
      'client_user_id': (chatbotConfig is Map && (chatbotConfig['isAnonymous'] == true))
          ? 'Anonymous'
          : '${chatbotConfig is Map ? chatbotConfig['userId'] ?? '' : ''}',
      'event_type': _eventTypeToBackend(eventType),
      'user_profile': userProfile ?? {},
      ...?additionalData,
    };
    final payload = {
      'org_id': apiKey,
      'event_data': eventData,
      'metadata': {'timestamp': DateTime.now().millisecondsSinceEpoch, ...sysInfo},
      'event_type': 'INFO',
      'user_id': chatbotConfig is Map ? chatbotConfig['userId'] : null,
    };
    logDebug('Sending internal event:', payload);
    final url = Uri.parse('$sdkApiUrl/users/sdk/record-logs/');
    final response = await http.post(
      url,
      headers: {'Content-Type': 'application/json'},
      body: jsonEncode(payload),
    );
    if (response.statusCode != 200) {
      throw Exception('Failed to send internal event: ${response.statusCode}');
    }
  } catch (e) {
    logError('Failed to send internal event:', e);
  }
}