botgo

package module
v0.1.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 10, 2024 License: Apache-2.0 Imports: 10 Imported by: 16

README

BotGo

QQ频道机器人,官方 GOLANG SDK。

Go Reference Examples

注意事项

  1. websocket 事件推送链路将在24年年底前逐步下线,后续官方不再维护。
  2. 新的webhook事件回调链路目前在灰度验证,灰度用户可体验通过页面配置事件监听及回调地址。如未在灰度范围,可联系QQ机器人反馈助手开通。

反馈机器人

灰度期间,原有机器人仍可使用websocket事件链路接收事件推送。

一、quick start

1. QQ机器人创建与配置
  1. 创建开发者账号,创建QQ机器人 QQ机器人开放平台

create_bot.png

  1. 配置沙箱成员 (QQ机器人上线前,仅沙箱环境可访问)。新创建机器人会默认将创建者加入沙箱环境。

sandbox_setting.png

2. 云函数创建与配置
  1. 腾讯云账号开通scf服务 快速入门
  2. 创建函数
  • 选择模板

create_scf.png

  • 启用"公网访问"、"日志投递"

turn_internet_access.png

  • 编辑云函数,启用"固定公网出口IP" (QQ机器人需要配置IP白名单,仅白名单内服务器/容器可访问OpenAPI)

scf_setting.png

get_internet_ip.png

3. 使用示例构建、上传云函数部署包
  1. 打开 examples/receive-and-send
  2. 复制 config.yaml.demo -> config.yaml

img.png

  1. 登录开发者管理端,将BotAppID和机器人秘钥分别填入config.yaml中的appid和secret字段

find-app-acc.png

type-in-app-info.png

  1. 执行Makefile中build指令
  2. 将config.yaml、scf_bootstrap、qqbot-demo(二进制文件)打包,上传至云函数

上传压缩包

4.配置QQ机器人事件监听、回调地址、IP白名单
  1. 复制云函数地址 + "/qqbot"后缀,填入回调地址输入框。点击确认。

img.png

  1. 勾选 C2C_MESSAGE_CREATE 事件。点击确认。

webhook配置

  1. 将云函数 "固定公网出口IP" 配置到IP白名单中)

ip_whitlist_setting.png

体验与机器人的对话

给机器人发送消息、富媒体文件,机器人回复消息

二、如何使用SDK


var api openapi.OpenAPI

func main() {
	//创建oauth2标准token source
	tokenSource := token.NewQQBotTokenSource(
		&token.QQBotCredentials{
			AppID:     "", 
			AppSecret: "",
		}) 
	//启动自动刷新access token协程 
	if err = token.StartRefreshAccessToken(ctx, tokenSource); err != nil {
		log.Fatalln(err)
	}
	// 初始化 openapi,正式环境 
	api = botgo.NewOpenAPI(credentials.AppID, tokenSource).WithTimeout(5 * time.Second).SetDebug(true) 
	// 注册事件处理函数 
	_ = event.RegisterHandlers( 
		// 注册c2c消息处理函数 
		C2CMessageEventHandler(), 
	)
	//注册回调处理函数 
	http.HandleFunc(path_, func (writer http.ResponseWriter, request *http.Request) {
		webhook.HTTPHandler(writer, request, credentials)
	}) 
	// 启动http服务监听端口 
	if err = http.ListenAndServe(fmt.Sprintf("%s:%d", host_, port_), nil); err != nil {
		log.Fatal("setup server fatal:", err)
	}
}

// C2CMessageEventHandler 实现处理 at 消息的回调
func C2CMessageEventHandler() event.C2CMessageEventHandler {
	return func(event *dto.WSPayload, data *dto.WSC2CMessageData) error {
		//TODO use api do sth.
		return nil
	}
}

三、SDK 开发说明 (Deprecated)

请查看: 开发说明

四、加入官方社区

欢迎扫码加入 QQ 频道开发者社区

开发者社区

Documentation

Overview

Package botgo 是一个QQ频道机器人 sdk 的 golang 实现

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewOpenAPI

func NewOpenAPI(appID string, tokenSource oauth2.TokenSource) openapi.OpenAPI

NewOpenAPI 创建新的 openapi 实例,会返回当前的 openapi 实现的实例 如果需要使用其他版本的实现,需要在调用这个方法之前调用 SelectOpenAPIVersion 方法

func NewSandboxOpenAPI

func NewSandboxOpenAPI(appID string, tokenSource oauth2.TokenSource) openapi.OpenAPI

NewSandboxOpenAPI 创建测试环境的 openapi 实例

func RegisterDispatchEventHandler added in v0.1.7

func RegisterDispatchEventHandler(eventType dto.EventType, f func(event *dto.WSPayload, message []byte) error)

RegisterDispatchEventHandler 注册回调事件处理器

func SelectOpenAPIVersion

func SelectOpenAPIVersion(version openapi.APIVersion) error

SelectOpenAPIVersion 指定使用哪个版本的 api 实现,如果不指定,sdk将默认使用第一个 setup 的 api 实现

func SetLogger

func SetLogger(logger log.Logger)

SetLogger 设置 logger,需要实现 sdk 的 log.Logger 接口

func SetOpenAPIClient

func SetOpenAPIClient(v openapi.APIVersion, c openapi.OpenAPI)

SetOpenAPIClient 注册 openapi 的不同实现,需要设置版本

func SetSessionManager

func SetSessionManager(m SessionManager)

SetSessionManager 注册自己实现的 session manager

func SetWebsocketClient

func SetWebsocketClient(c websocket.WebSocket)

SetWebsocketClient 替换 websocket 实现

Types

type SessionManager

type SessionManager interface {
	// Start 启动连接,默认使用 apInfo 中的 shards 作为 shard 数量,如果有需要自己指定 shard 数,请修 apInfo 中的信息
	Start(apInfo *dto.WebsocketAP, tokenSource oauth2.TokenSource, intents *dto.Intent) error
}

SessionManager 接口,管理session

func NewSessionManager

func NewSessionManager() SessionManager

NewSessionManager 获得 session manager 实例

Directories

Path Synopsis
Package constant 常量定义
Package constant 常量定义
dto
Package dto 维护了用于与机器人接口通信的数据结构对象。
Package dto 维护了用于与机器人接口通信的数据结构对象。
keyboard
Package keyboard 消息按钮
Package keyboard 消息按钮
message
Package message 内提供了用于支撑处理消息对象的工具和方法。
Package message 内提供了用于支撑处理消息对象的工具和方法。
Package errs 是 SDK 里面的错误类型的集合,同时封装了 SDK 专用的错误类型。
Package errs 是 SDK 里面的错误类型的集合,同时封装了 SDK 专用的错误类型。
Package event 事件处理注册
Package event 事件处理注册
examples module
interaction
search
Package search 模拟内联搜索
Package search 模拟内联搜索
signature
Package signature 用于处理平台和机器人开发者之间的互动请求中的签名验证
Package signature 用于处理平台和机器人开发者之间的互动请求中的签名验证
webhook
Package webhook HTTP回调处理
Package webhook HTTP回调处理
Package log 是 SDK 的 logger 接口定义与内置的 logger。
Package log 是 SDK 的 logger 接口定义与内置的 logger。
Package openapi 声明了 sdk 所使用的 openapi 接口。
Package openapi 声明了 sdk 所使用的 openapi 接口。
options
Package options openapi options
Package options openapi options
v1
Package v1 是 openapi v1 版本的实现。
Package v1 是 openapi v1 版本的实现。
Package sessions 提供了用于处理 websocket 的多实例会话的相关功能。
Package sessions 提供了用于处理 websocket 的多实例会话的相关功能。
local
Package local 基于 golang chan 实现的单机 manager。
Package local 基于 golang chan 实现的单机 manager。
manager
Package manager 实现 session manager 所需要的公共方法。
Package manager 实现 session manager 所需要的公共方法。
remote
Package remote 基于 redis list 实现的分布式 session manager。
Package remote 基于 redis list 实现的分布式 session manager。
remote/lock
Package lock 一个基于 redis 的分布式锁实现。
Package lock 一个基于 redis 的分布式锁实现。
Package token 基于 golang.org/x/oauth2 标准实现token source
Package token 基于 golang.org/x/oauth2 标准实现token source
Package version sdk 版本声明。
Package version sdk 版本声明。
Package websocket SDK 需要实现的 websocket 定义。
Package websocket SDK 需要实现的 websocket 定义。
client
Package client 默认的 websocket client 实现。
Package client 默认的 websocket client 实现。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL