sendMessage static method
发送消息到购物助手
Implementation
static Future<OrchestratorResponse> sendMessage({
required String message,
String? sessionId,
}) async {
final url = '$baseUrl$orchestratorPath';
try {
final requestBody = {
'message': message,
if (sessionId != null) 'session_id': sessionId,
};
final language = _getLanguageCode();
final response = await NetworkUtil.post(
url,
headers: {
'Content-Type': 'application/json',
'x-language': language,
},
body: json.encode(requestBody),
timeout: Duration(seconds: EnvironmentConfig.apiTimeout),
);
// 使用 NetworkUtil 解析响应,自动处理404等错误
final jsonData = NetworkUtil.parseJsonResponse(response);
print('📊 JSON数据结构: ${jsonData.keys}');
// 检查是否有嵌套的 response 字段
final actualData = jsonData['response'] ?? jsonData;
print('🔍 实际数据字段: ${actualData.keys}');
final msgContent = actualData['message']?.toString() ?? '';
print('💬 消息内容: ${msgContent.length > 50 ? "${msgContent.substring(0, 50)}..." : msgContent}');
print('🔄 状态: ${actualData['state']}');
print('➡️ 下一步: ${actualData['next_action']}');
// 如果有 session_id 在外层,使用外层的
if (jsonData['session_id'] != null) {
actualData['session_id'] = jsonData['session_id'];
}
final result = OrchestratorResponse.fromJson(actualData);
print('✅ 响应解析成功 - message: ${result.message.length} chars, quickReplies: ${result.quickReplies.length}');
return result;
} on NetworkException catch (e) {
// 网络异常,使用友好的错误消息
print('❌ 网络请求失败: ${e.getUserFriendlyMessage()}');
throw Exception(e.getUserFriendlyMessage());
} catch (e) {
print('❌ 发送消息失败: $e');
rethrow;
}
}