分享机器人链接并接收事件
需要区分邀请来源时,通过 robot.Client.GenerateShareLink 附带渠道标记。用户使用链接添加机器人后,QQ 会将该标记传回应用。
配置事件订阅
使用 WebSocket
将所需条目合并到 config.yaml 现有的 connection.websocket.intents 列表,保留其他业务订阅。保存后重启机器人。
yaml
connection:
mode: websocket
websocket:
intents:
- GROUP_AND_C2C_EVENT使用 Webhook
在 QQ 机器人运营与管理后台选择 开发设置 → 事件订阅与回调。将接入方式设为 Webhook。在 接收事件配置 选择 部分接收,按事件标识勾选FRIEND_ADD、FRIEND_DEL、GROUP_ADD_ROBOT、GROUP_DEL_ROBOT 等所需事件。保存设置。已选 全部接收 时,无需逐项勾选。
生成分享链接
go
package guide
import (
"context"
"fmt"
"github.com/ProgramCX/GoQQBot/pkg/api"
"github.com/ProgramCX/GoQQBot/pkg/api/robot"
)
func GenerateInvite(ctx context.Context, client *api.Client, source string) (string, error) {
link, err := robot.NewClient(client).GenerateShareLink(ctx, source)
if err != nil {
return "", fmt.Errorf("生成分享链接: %w", err)
}
return link.URL, nil
}source 是业务侧的渠道标记,对应协议的 callback_data。无需区分邀请来源时可留空,填写时最长 32 个字符。
接收生命周期事件
通过 OnEvent 路由注册所需事件。
FRIEND_ADD和FRIEND_DEL。GROUP_ADD_ROBOT和GROUP_DEL_ROBOT。
按对应官方事件文档解码 ctx.Payload.D。
go
package guide
import (
"context"
"encoding/json"
"github.com/ProgramCX/GoQQBot/pkg/goqqrobot"
"github.com/ProgramCX/GoQQBot/pkg/message"
"github.com/ProgramCX/GoQQBot/shared/types"
)
func RegisterFriendEvents(bot *goqqrobot.Bot, consume func(context.Context, json.RawMessage) error) {
bot.OnEvent(message.FRIEND_ADD, func(ctx *types.Context) error {
// 复制后交给业务;不要记录整份授权载荷。
data := append(json.RawMessage(nil), ctx.Payload.D...)
return consume(ctx.RequestContext(), data)
})
}注意事项
- 分享参数中的密钥或个人敏感信息可能随分享传播。平台回传数据也应按业务边界校验。
- SDK 提供事件名和收到的原始事件数据,目前还没有为所有字段定义结构体。注册
OnEvent后,还要按接入方式订阅对应的事件。 Context.Reply自动路由覆盖消息事件和场景明确的交互事件。生命周期事件不一定支持该入口。- 官方允许使用外层事件 ID 回复时,可调用
Client.SendReply。显式填写场景、接收者和EventID。事件类型名不能充当 ID。接收者也不能从无关字段推断。