feat: 添加额外数据处理,优化AI助手消息生成与发送逻辑

This commit is contained in:
kuaifan
2025-11-07 20:38:06 +00:00
parent e801c09c0f
commit 892ad395a7
8 changed files with 228 additions and 157 deletions
+19 -2
View File
@@ -43,6 +43,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property \Illuminate\Support\Carbon|null $deleted_at
* @property-read int|mixed $percentage
* @property-read \App\Models\User|null $user
* @property-read \App\Models\WebSocketDialogMsgExtra|null $extra
* @property-read \App\Models\WebSocketDialog|null $webSocketDialog
* @method static \Illuminate\Database\Eloquent\Builder|AbstractModel cancelAppend()
* @method static \Illuminate\Database\Eloquent\Builder|AbstractModel cancelHidden()
@@ -111,6 +112,14 @@ class WebSocketDialogMsg extends AbstractModel
return $this->hasOne(User::class, 'userid', 'userid');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function extra(): \Illuminate\Database\Eloquent\Relations\HasOne
{
return $this->hasOne(WebSocketDialogMsgExtra::class, 'msg_id', 'id');
}
/**
* 阅读占比
* @return int|mixed
@@ -1233,9 +1242,10 @@ class WebSocketDialogMsg extends AbstractModel
* @param bool|null $push_silence 推送-静默
* - type = [text|file|record|meeting] 默认为:false
* @param string|null $search_key 搜索关键词(用于搜索,留空则自动生成)
* @param array|null $extra_data 额外数据(仅在发送消息时有效)
* @return array
*/
public static function sendMsg($action, $dialog_id, $type, $msg, $sender = null, $push_self = false, $push_retry = false, $push_silence = null, $search_key = null)
public static function sendMsg($action, $dialog_id, $type, $msg, $sender = null, $push_self = false, $push_retry = false, $push_silence = null, $search_key = null, $extra_data = null)
{
$link = 0;
$mtype = $type;
@@ -1380,10 +1390,17 @@ class WebSocketDialogMsg extends AbstractModel
'msg' => $msg,
'read' => 0,
]);
AbstractModel::transaction(function () use ($search_key, $dialogMsg) {
AbstractModel::transaction(function () use ($search_key, $dialogMsg, $extra_data) {
$dialogMsg->send = 1;
$dialogMsg->generateKeyAndSave($search_key);
//
if ($extra_data) {
WebSocketDialogMsgExtra::createInstance([
'msg_id' => $dialogMsg->id,
'data' => Base::array2json($extra_data),
])->save();
}
//
WebSocketDialogSession::updateTitle($dialogMsg->session_id, $dialogMsg);
//
if ($dialogMsg->type === 'meeting') {