python3實現QQ官方機器人回調驗證

? ? 考慮到第三方的機器人現在越來越難維持了,來搗鼓一下官方的機器人。雖然官方藏著掖著不肯開放很多功能,但起碼能用。官方機器人的優點是穩定,只要申請成功,且你自己不亂搞,基本不存在被封的可能,缺點是藤子對其嚴格到令人發指的管控,包括已經完全關閉主動發送消息功能只能被動回復消息,無法獲得用戶的QQ號、群的QQ號等等。

? ? 這里記錄一下自己對接QQ官方機器人的過程。僅粗略記錄準備工作和如何實現回調驗證,不記錄具體實現的業務邏輯。


1. 準備工作

1.1 QQ開放平臺

? ? 登錄QQ開放平臺QQ 開放平臺,這邊登錄時有一個管理員QQ的概念,也就是你登錄平臺時的QQ,就是你想要創建的機器人的管理員,建議大家用大號去登錄,這個不會有什么影響。

? ? 登錄上去以后申請機器人,選個人的就行,現在個人申請機器人也可以加QQ群(以前只有企業實名的機器人才能加進QQ群)。過程不復雜,這里簡略。不需要驗證太多東西,只是需要你的手機QQ掃二維碼驗證。

? ? 創建好機器人后,點擊機器人,進入具體的設置,找到左邊菜單的開發-沙箱配置,設置一個測試用的群,自己登錄用的管理員QQ必須是這個群的群主或者管理員,人數必須小于20人。建議是自己創一個,符合條件的群可以在下拉菜單里面看到,選中這個群,然后根據說明文字,去QQ上,群里把機器人添加到群里。

1.2 準備服務器、域名等

? ? 需要的東西有:服務器、域名、證書、ICP備案。我個人習慣用阿里云,這些東西都可以在阿里云上搞定。

阿里云上對于個人用戶最便宜的方案:

服務器:阿里云的2核2G3M輕量服務器(99套餐),99一年,比其他動不動就幾百上千一個月的實惠

域名:阿里云上購買一個非.cn/.com/.net后綴的域名,自己看著買哪個便宜買哪個,最低幾塊錢一年

證書:阿里云控制臺找“數字證書管理服務”,里面找“個人測試證書”,一個賬戶一年能免費購買一次,20張,每張是3個月有效期,到期再創建,個人用戶足夠用,相當于是免費

ICP備案:阿里云搜ICP備案?網站備案_ICP備案_備案遷移_App備案_小程序備案_備案-阿里云

按提示備案,需要一些個人的信息,網站用途什么的寫測試就行,這個可以直接做,不需要先啟動網站。通過很容易,只是需要幾天時間。這個是必須的,否則外部在連接你的API時會出現connection reset(但阿里云服務器之間互相訪問不會出現這個問題)

1.3 準備HTTP服務

? ? 準備一個用來和騰訊交互的HTTP服務。這個自行搞定。看我這個標題點進來的應該用的都是python,可以用flask,也可以用fastapi等。我自己是用了nginx代理,后端fastapi。代理時對外部必須要使用域名、https,端口只能是80、443、8080、8443的其中一個,阿里云申請的話證書文件可以從阿里云那邊直接下載下來。

2. 配置對接

? ? 準備工作做好后就可以開始對接了,回到QQ機器人的管理后臺,找到菜單“開發”-“回調配置”,先在下面勾選你要監聽的事件(建議是全部選上),再在請求地址這里填你的HTTP服務監聽地址。

? ? 輸入完畢以后,鼠標點擊文本框外面任意地方,會立即觸發驗證,你的HTTP服務會收到一條HTTP請求,大致HTTP結構是這樣的:

POST /recmsg/qbot HTTP/1.0  # 這里是你監聽地址的uri
Host: xxx.xxx.xxx  # 這里是你填寫的域名
X-Real-IP: 183.47.105.49  # 這是騰訊那邊發起請求的真實IP地址,由于我用nginx代理,后端收到請求時出現這個字段,實際IP地址有很多
X-Forwarded-For: 183.47.105.49  # 這是騰訊那邊發起請求的真實IP地址,由于我用nginx代理,后端收到請求時出現這個字段,實際IP地址有很多
X-Forwarded-Proto: https
Connection: close
Content-Length: 76
content-type: application/json
user-agent: QQBot-Callback
x-bot-appid: xxxxxxxxx  # 這是你創建的QQ機器人的ID,沒什么用
x-signature-ed25519: xxxxxxxxxxxxxxxxxxxxxxxxxxx  # 一串超長的東西,這個是騰訊向你請求時,給你校驗用的,這里可以先不管
x-signature-method: Ed25519  # 驗證用的方法,不用管
x-signature-timestamp: 1750407202  # 請求時間戳,不用管{"d":{"plain_token":"xxxxxxxxxxxxxxxxxxxxxx","event_ts":"1750407202"},"op":13}
# 有用的主要是這一串東西,plain_token、event_ts取下來用于計算返回給騰訊的鑒權字符串
# op=13表示這個請求是用來驗證回調的

? ? 此時由于后端還沒有調好,頁面上會彈出驗證失敗的紅色提示框。

騰訊要求返回一個大致是這樣的響應體才可以通過驗證:

HTTP/1.1 200 OK
date: Fri, 20 Jun 2025 08:13:21 GMT
server: uvicorn  # 我用的fastapi,所以server顯示這個
content-length: 181
content-type: application/json
Connection: close{"plain_token":"xxxxxxxxxxxx","signature":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
# plain_token值和前面請求給你的值保持一致
# signature為計算出來以后得鑒權簽名串

計算signature的代碼段:

from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
# 需要安裝一下cryptography這個庫secret = 'xxxxxxxxxxxxxxxxxx'  # QQ機器人后臺“開發”-“開發管理”里面的AppSecret
event_ts = '1750407202'  # 驗證請求body里面送給你的時間戳
plain_token = 'xxxxxxxxxxxxxxxxxxxxxx'  # 驗證請求body里面送給你的plain_tokenwhile len(secret) < 32:  # 重復secret,直到長度為32,官方的示例里面有這段secret += secret     # 實際沒啥用,現在獲取的secret都是32位
secret = secret[:32]     # 也許是一開始設計的時候secret有可能不為32位,總之先放到這里b_secret = secret.encode('utf-8')
private_key = Ed25519PrivateKey.from_private_bytes(b_secret)signature = private_key.sign((event_ts + plain_token).encode('utf-8')).hex()
# 這里用到了event_ts和plain_token來計算signature的值

? ? 加密采用的是Ed25519方式,大致過程是根據給出的密鑰生成一個private_key,然后用這個private_key結合請求內的信息生成一個signature,有興趣自行研究。

? ? 把plain_token和計算出來的signature值填入響應里返回給騰訊。HTTP服務修改好之后重啟,激活一下回調地址修改的文本框,再點擊外面空白處,如果這時候沒有跳出報錯,那就是驗證成功了,可以點擊“確定配置”按鈕保存。

? ? 現在在你的測試群@機器人并發送一些消息,你的HTTP服務就能收到騰訊的消息推送了。然后就能進一步開發或配置業務邏輯了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86095.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86095.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86095.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Vue3+TS的自定義指令開發與業務場景應用

文章目錄 1. 前言2. 基礎概念與優勢?3. Vue3TS自定義指令的創建與注冊?3.1. 創建自定義指令?3.2. 注冊自定義指令? 4. 實際場景示例?4.1. 權限指令控制?4.2. 圖片懶加載指令? 5. 優化與注意事項? 1. 前言 在 Vue3 的開發生態中&#xff0c;自定義指令是一項極為靈活且…

Elasticsearch 索引文檔的流程

Elasticsearch 索引文檔的流程是一個分布式、多階段的過程&#xff0c;涉及客戶端請求、路由、主副本同步及持久化等步驟&#xff0c;具體流程如下&#xff1a; 一、客戶端請求與路由 1.1 文檔接收與路由計算? 客戶端通過 REST API 發送文檔寫入請求&#xff0c;需指…

【unity】批量剔除圖片四周空白像素的工具

摘要&#xff1a;Unity圖片空白像素批量處理工具 該工具提供兩種方式批量剔除圖片空白像素&#xff1a; 靜態處理類&#xff1a;提供TrimTexture方法&#xff0c;可讀取紋理像素數據&#xff0c;計算非透明區域邊界&#xff0c;生成裁剪后的新紋理&#xff1b;SaveTexture方法…

可編輯64頁PPT | 基于DeepSeek的數據治理方案

薦言摘要&#xff1a;在數據量爆炸式增長且業務需求日益復雜的當下&#xff0c;企業數據治理面臨著數據分散、標準混亂、價值挖掘難等諸多挑戰。我們基于DeepSeek強大的智能能力&#xff0c;為企業量身打造創新數據治理方案。 DeepSeek憑借其卓越的自然語言處理和深度學習技術…

啟用AWS VPC流日志保存到CloudWatch日志組

目標 啟用VPC流日志 啟用流日志 選擇vpc&#xff0c;開始啟用流日志&#xff0c;如下圖&#xff1a; 設置名稱和日志組&#xff0c;創建流日志&#xff0c;如下圖&#xff1a; 參考 AWS云中的VPC啟用流日志保存S3&#xff08;AWS中國云&#xff09;創建發布到 CloudWatc…

游戲引擎學習路徑與技術棧指南

游戲引擎架構全景圖&#xff08;基于GAMES104 V2.2思維導圖&#xff09; graph TDA[基礎架構] --> A1[面向數據管理]A --> A2[任務系統]A1 --> A11[ECS架構]A1 --> A12[內存優化]A2 --> A21[Job System]A2 --> A22[依賴調度]B[工具鏈] --> B1[編輯器框架]…

預訓練大語言模型

Encoder-only model&#xff08;Autoencoding model&#xff09; 使用掩碼語言模型&#xff08;Masked Language Modeling, MLM&#xff09;進行預訓練輸入原始語句和掩碼&#xff0c;訓練目標是預測掩碼標記&#xff0c;一遍重建原始句子->也稱為降噪目標&#xff08;deno…

C++信奧賽闖關題目1

1閏年 輸入一個年份,輸出它是否為閏年 閏年的規則: 描述:能被4整除,并且不能被100整除的,再加上可以被400整除的 版本一:原始版 #include <iostream> #include <cmath> using namespace std; int main() {int y;cin>>y;bool x = y%4==0&&y…

Qt+OPC開發筆記(三):OPC客戶端訂閱特點消息的Demo

若該文為原創文章&#xff0c;轉載請注明原文出處 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/148868209 長沙紅胖子Qt&#xff08;長沙創微智科&#xff09;博文大全&#xff1a;開發技術集合&#xff08;包含Qt實用技術、樹莓派、三維、OpenCV…

嵌入式開發學習日志Day8(ARM體系架構——按鍵、蜂鳴器及中斷)

一、蜂鳴器學習 代碼實現&#xff1a; 二、BSP工程管理及Makefile 1、BSP工程管理 利用BSP工程管理&#xff0c;使文檔顯示不雜亂&#xff1b; 將這些文件分為4類&#xff0c;并保存到4個不同的文件夾里。 首先在新的工程文件夾里創建一個之后我們編寫的類似led驅動&#xff0…

Linux部署Sonic前后端(詳細版)(騰訊云)

系統用的是Ubuntu 22.04 LTS 1、安裝Docker sudo apt update sudo apt install -y docker.io docker-compose sudo systemctl start docker sudo systemctl enable docker# 如果不想每次用 sudo&#xff0c;可以加權限 sudo usermod -aG docker $USER 2、安裝 docker-compose…

騰訊云CBS:企業級云存儲的性能與可靠性重構

摘要 根據Forrester 2025年網絡分析與可見性&#xff08;NAV&#xff09;報告&#xff0c;東西向流量安全與加密威脅檢測成為企業核心痛點&#xff08;誤報率降低需求↑40%&#xff09;。騰訊云CBS作為底層存儲支柱&#xff0c;通過三副本跨可用區冗余架構與毫秒級故障切換能力…

ubuntu 22.04 更換阿里源 (wsl2 參照)

步驟 1: 備份當前源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 步驟 2: 編輯源列表文件 sudo nano /etc/apt/sources.list 步驟 3: 添加阿里云鏡像源 ubuntu 阿里源地址可以在這查看 ubuntu鏡像_ubuntu下載地址_ubuntu安裝教程-阿里巴巴開源鏡像站 …

idea中push拒絕,merge,rebase的區別

在 IntelliJ IDEA 中進行 Git 操作時&#xff0c;Push 拒絕&#xff08;Push Rejected&#xff09;、Merge 和 Rebase 是常見的沖突解決方式。它們有不同的適用場景和影響&#xff0c;下面詳細說明它們的區別&#xff0c;并附上流程圖幫助理解。 1. Push 拒絕&#xff08;Push …

輕松實現PDF局部擦除的技術級解決方案

在處理PDF文檔時&#xff0c;我們常常會遇到這樣的場景&#xff1a;想要刪除某段文字、擦除一張圖片&#xff0c;或者對頁面內容進行局部調整。但很多編輯工具要么操作繁瑣&#xff0c;要么功能受限&#xff0c;甚至還需要付費解鎖核心功能。 這是一款輕便又實用的PDF編輯工具…

css color 十六進制顏色透明度

css color 十六進制顏色透明度 例&#xff1a;#FFFFFF ~~ #FFFFFF1A(10% ) 0% 為 FF10% 為 1A20% 為 3330% 為 4D40% 為 6650% 為 8060% 為 9970% 為 B380% 為 CC90% 為 E6100% 為 00

Git簡介和常用命令

Git簡介 Git是一款版本管理軟件&#xff0c;可以在任何時間點保存文件&#xff0c;也能夠恢復到以前任意時間點保存的文檔&#xff0c;Git作用簡單舉例來說就是&#xff0c;寫論文&#xff0c;有很多個版本&#xff0c;將原來的論文保存起來&#xff0c;新建一個副本&#xff…

Kafka 性能調優指南

文章目錄 概述操作系統層面調優文件系統優化內存管理磁盤 I/O 優化 JVM 調優堆內存設置GC 收集器選擇常見 GC 問題 Broker 端調優版本兼容性關鍵參數配置日志段大小調優設置原則推薦配置調優考慮因素監控命令 應用層調優客戶端復用資源管理多線程消費模式 性能指標調優吞吐量優…

佰力博科技與您探討低溫真空探針臺如何保養

低溫真空探針臺是一種用于在低溫或真空環境下進行電學性能測試的精密儀器&#xff0c;其保養和維護對于確保設備的穩定運行和延長使用壽命至關重要。 一、日常清潔與檢查 1、使用后應立即清潔探針臺&#xff0c;尤其是探針、接口和連接器&#xff0c;避免灰塵和雜質影響精度。…

MySQL:深入總結鎖機制

寫在前面 在 MySQL 數據庫中&#xff0c;鎖機制是保障并發控制和數據一致性的關鍵。合理運用鎖機制&#xff0c;能有效避免數據競爭&#xff0c;提升數據庫性能。接下來&#xff0c;我們就深入了解 MySQL 中的各類鎖。 博主總結&#xff08;注&#xff1a;針對總結的詳解補充在…