feat: 调整机器人webhook事件

- 可取消接收消息事件
- 打开机器人会话窗口时推送webhook消息,相同机器人消息缓存1分钟
This commit is contained in:
王昱
2025-11-06 04:08:39 +00:00
parent ab4640382d
commit 4933930afd
4 changed files with 94 additions and 28 deletions

View File

@@ -445,28 +445,6 @@ class DialogController extends AbstractController
}
$data = WebSocketDialog::synthesizeData($dialog->id, $user->userid);
if ($userid > 0) {
$botTarget = User::whereUserid($userid)->whereBot(1)->first();
if ($botTarget) {
$userBot = UserBot::whereBotId($botTarget->userid)->first();
if ($userBot) {
$userBot->dispatchWebhook(UserBot::WEBHOOK_EVENT_DIALOG_OPEN, [
'dialog_id' => $dialog->id,
'dialog_type' => $dialog->type,
'session_id' => $dialog->session_id,
'dialog_name' => $dialog->getGroupName(),
'user' => [
'userid' => $user->userid,
'email' => $user->email,
'nickname' => $user->nickname,
],
], 10, [
'dialog' => $dialog->id,
'operator' => $user->userid,
]);
}
}
}
return Base::retSuccess('success', $data);
}
@@ -3710,4 +3688,61 @@ class DialogController extends AbstractController
//
return Base::retSuccess('重命名成功', $session);
}
/**
* @api {get} api/dialog/open/webhook 打开机器人会话推送 webhook
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup dialog
* @apiName open__webhook
*
* @apiParam {Number} dialog_id 对话ID
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function open__webhook()
{
$user = User::auth();
//
$dialog_id = intval(Request::input('dialog_id'));
if (empty($dialog_id)) {
return Base::retError('错误的会话');
}
//
$dialog = WebSocketDialog::checkDialog($dialog_id);
if (empty($dialog)) {
return Base::retError('打开会话失败');
}
$data = WebSocketDialog::synthesizeData($dialog->id, $user->userid);
if ($data['bot'] == 1) {
$botTarget = User::whereUserid($data['dialog_user']['userid'])->whereBot(1)->first();
if ($botTarget) {
$userBot = UserBot::whereBotId($botTarget->userid)->first();
if ($userBot) {
// 每个机器人1分钟只触发一次 webhook
Cache::remember('webhook_dialog_open_' . $botTarget->userid, 60, function () use ($userBot, $dialog, $user) {
$userBot->dispatchWebhook(UserBot::WEBHOOK_EVENT_DIALOG_OPEN, [
'dialog_id' => $dialog->id,
'dialog_type' => $dialog->type,
'session_id' => $dialog->session_id,
'dialog_name' => $dialog->getGroupName(),
'user' => [
'userid' => $user->userid,
'email' => $user->email,
'nickname' => $user->nickname,
],
], 10, [
'dialog' => $dialog->id,
'operator' => $user->userid,
]);
return true;
});
}
}
}
return Base::retSuccess('success');
}
}