sendInternalEvent function
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);
}
}