sendMessage method
void
sendMessage(
- NIMMessage message, {
- NIMMessage? replyMsg,
- NIMMessagePushConfig? pushConfig,
发送消息最终实现
message 消息
replyMsg 回复消息
pushConfig 推送配置
aiAgent 消息发送的AI代理
Implementation
void sendMessage(
NIMMessage message, {
NIMMessage? replyMsg,
NIMMessagePushConfig? pushConfig,
}) async {
final params = await ChatMessageHelper.getSenderParams(
message, conversationId,
pushConfig: pushConfig);
//设置aiAgent
// 根据forcePushAccountIds 设置
NIMAIUser? aiAgent;
if (pushConfig?.forcePushAccountIds?.isNotEmpty == true ||
message.pushConfig?.forcePushAccountIds?.isNotEmpty == true) {
final pushList = pushConfig?.forcePushAccountIds?.isNotEmpty == true
? pushConfig?.forcePushAccountIds
: message.pushConfig?.forcePushAccountIds;
for (var accId in pushList!) {
if (AIUserManager.instance.getAIUserById(accId!) != null) {
aiAgent = AIUserManager.instance.getAIUserById(accId);
break;
}
}
}
if (aiAgent == null && isAIUser()) {
//如果是AI用户,设置aiAgent 为单聊对象
aiAgent = AIUserManager.instance.getAIUserById(_sessionId!);
}
//处理重发的case,从消息的 Config 中获取
if (aiAgent == null && message.aiConfig?.accountId?.isNotEmpty == true) {
aiAgent =
AIUserManager.instance.getAIUserById(message.aiConfig!.accountId!);
}
//根据回复消息设置上下文
List<NIMAIModelCallMessage>? aiMessages;
if (aiAgent != null && replyMsg != null) {
final textMsg = ChatMessageHelper.getAIContentMsg(replyMsg);
if (textMsg != null) {
aiMessages = [
NIMAIModelCallMessage(
type: 0, msg: textMsg, role: NIMAIModelRoleType.user)
];
}
}
NIMMessageAIConfigParams? aiConfigParams;
if (aiAgent != null) {
final aiStreamMode = await IMKitClient.enableAIStream;
// AI 参数处理
aiConfigParams = NIMMessageAIConfigParams(
accountId: aiAgent.accountId, aiStream: aiStreamMode);
if (ChatMessageHelper.getAIContentMsg(message)?.isNotEmpty == true) {
NIMAIModelCallContent content = NIMAIModelCallContent(
type: 0, msg: ChatMessageHelper.getAIContentMsg(message));
aiConfigParams.content = content;
}
}
//处理与数字人单聊的上下文
if (aiConfigParams != null) {
if (aiMessages?.isNotEmpty == true) {
aiConfigParams.messages = aiMessages;
} else if (isAIUser()) {
//如果没有AI上下文,则取最近的30条消息
aiConfigParams.messages = getAIMessages();
}
}
params.aiConfig = aiConfigParams;
//处理重发case
if (replyMsg == null &&
message.sendingState == NIMMessageSendingState.failed &&
message.threadReply?.messageClientId?.isNotEmpty == true) {
replyMsg = (await NimCore.instance.messageService
.getMessageListByRefers(messageRefers: [message.threadReply!]))
.data
?.first;
}
//发送前的对外回调
if (ChatKitClient.instance.messageAction != null) {
ChatKitClient.instance.messageAction!(message, conversationId, params);
}
if (replyMsg != null) {
ChatMessageRepo.replyMessage(
msg: message, replyMsg: replyMsg, params: params)
.then((result) {
_handleMessageSendResult(result);
});
} else {
ChatMessageRepo.sendMessage(
message: message, conversationId: conversationId, params: params)
.then((result) {
_handleMessageSendResult(result);
});
}
}