QQ 官方機(jī)器人部署

本文為各位呈現(xiàn)項(xiàng)目里包含的 QQ 機(jī)器人部署和使用方式。
請(qǐng)注意。目前 QQ 機(jī)器人的官方設(shè)計(jì)平臺(tái)還處于預(yù)覽階段,比較不穩(wěn)定,因此并未對(duì)所有用戶都開放使用機(jī)器人功能。有些功能可能在未來有巨大改變,因此本文可能會(huì)動(dòng)態(tài)更新。請(qǐng)各位注意和留意本文的內(nèi)容,如果你對(duì)機(jī)器人項(xiàng)目比較感興趣的話。
第一步:打開“頻道”入口
第一步是需要用戶打開頻道的入口。頻道(QQ 官方簡(jiǎn)稱為 GUILD),是 QQ 的應(yīng)用里和“聯(lián)系人”、“消息”以及“動(dòng)態(tài)”等功能完全平行的一個(gè)單獨(dú)選項(xiàng)卡頁面。它長(zhǎng)這樣:

該功能帶有類似貼吧的功能,也可以用于交流。本文需要用到該環(huán)境進(jìn)行部署和測(cè)試,因此需要各位能夠通過修改本地文件來打開該環(huán)境。本文介紹的內(nèi)容因?yàn)槭遣渴饻y(cè)試環(huán)境功能,因此類似貼吧等發(fā)帖的功能本文不作提及,畢竟跟本文的配置操作無關(guān)。
請(qǐng)打開各位手機(jī) QQ(目前支持 QQ 不支持 TIM)的配置文件路徑:
/data/user/0/com.tencent.mobileqq/shared_prefs/TabDataHelper_Shared_Prefs.xml
經(jīng)測(cè)試,我的手機(jī)上是沒有的。我的手機(jī)是小米的。如果你的路徑上也沒有類似的文件或文件夾的話,需要你通過電腦端,下載安裝一個(gè)安卓模擬器(例如 Bluestack 等)。
安卓模擬器是等效的,因?yàn)槲覀冃枰谴蜷_入口,為 QQ 提供 UI 的入口和使用功能,因此校驗(yàn)會(huì)和服務(wù)器進(jìn)行操作,并不是你手機(jī)本地。我們找的本地是為了配置文件來打開第一步的入口,為了幫助和 QQ 服務(wù)器通信以能夠開通此功能。
找到文件后,請(qǐng)打開此文件。文件里包含一些配置項(xiàng),不過我們并不修改它們,而是去增加兩行內(nèi)容。
我們?cè)谖募? 標(biāo)簽的末尾,追加
標(biāo)簽作為對(duì)應(yīng)的信息。注意,本代碼為參考,里面的“123456789”請(qǐng)自行替換為你的 QQ 號(hào)。注意,是你的 QQ 號(hào)碼,而不是機(jī)器人的,也不是別的。
可能你使用過別的 QQ 機(jī)器人第三方的框架。那些機(jī)器人框架都依賴于一個(gè)真實(shí)的賬號(hào)。QQ 官方機(jī)器人在架構(gòu)設(shè)計(jì)上,QQ 機(jī)器人并不依賴于你自己的某個(gè)賬號(hào),而是單獨(dú)有一個(gè)自己的賬號(hào)。因此,這里我們需要接入的入口是你自己的 QQ 號(hào)碼而不是別的什么東西。
在添加完畢后,保存并退出文件。確保你的 QQ 已經(jīng)全部退出,包括后臺(tái)。在確認(rèn)完全退出后,重啟 QQ,頻道功能就有了。而隔一段時(shí)間,你的電腦端也會(huì)多出頻道的選項(xiàng)頁面。


第二步:創(chuàng)建一個(gè)調(diào)試用的頻道
在我們使用機(jī)器人之前,我們需要?jiǎng)?chuàng)建一個(gè)單獨(dú)的頻道,以便我們使用后續(xù)的功能。做法其實(shí)相當(dāng)簡(jiǎn)單,請(qǐng)查看前面給出的手機(jī) QQ 里的頻道頁面,左側(cè)的菜單欄圖標(biāo)里有一個(gè)加號(hào)“+”樣子的圖標(biāo),這個(gè)就是創(chuàng)建頻道的圖標(biāo)。我們需要自行創(chuàng)建一個(gè)。
創(chuàng)建過程就省略了,因?yàn)檫@個(gè)也不復(fù)雜,按照指導(dǎo)過程創(chuàng)建即可。
稍微要說一點(diǎn)的是,在創(chuàng)建期間,我們會(huì)看到選擇模板的頁面。這里我們需要使用的模板是“自定義”(圖片就省略了,自己創(chuàng)建期間就肯定看得到)。別的模板也不是不行,但是因?yàn)槭潜A粲玫臏y(cè)試頻道,因此別的功能我們都不需要。越是帶有復(fù)雜功能的頻道,對(duì)我們的幫助就越小。
第三步:注冊(cè)機(jī)器人
在使用機(jī)器人的前提是能保證你有一個(gè)自己的機(jī)器人的關(guān)聯(lián)權(quán)限。因此,你必須要注冊(cè)一個(gè)單獨(dú)的、適用于機(jī)器人的平臺(tái)賬號(hào)。注意說的是平臺(tái)賬號(hào),也不是 QQ 機(jī)器人的賬號(hào)。
請(qǐng)打開,并選擇右上角的“立即注冊(cè)”。
https://q.qq.com/#/App/bot

然后在頁面里選擇“個(gè)人”。

然后開始注冊(cè)。頁面如下。

這里包含三個(gè)子步驟:創(chuàng)建賬號(hào)、激活郵箱以及綁定管理員。這些內(nèi)容應(yīng)該可以自行操作,因此此處就省略了。
這里稍微說一下。郵箱地址就是你自己想要和該平臺(tái)交互和收發(fā)郵件的郵箱??梢允?QQ 郵箱也可以不是;登陸密碼和確認(rèn)登陸密碼要一致。
在完成創(chuàng)建之后,請(qǐng)重新打開前面我給出鏈接的主頁面。

這里,我們?cè)囍卿洿速~號(hào)。注意選擇記住密碼然后登錄。
期間會(huì)讓你進(jìn)行驗(yàn)證,例如拼圖驗(yàn)證以及二維碼驗(yàn)證,正確驗(yàn)證即可。
打開后,是一個(gè)空頁面,因?yàn)槲覀冞€沒創(chuàng)建任何的機(jī)器人?,F(xiàn)在我們需要?jiǎng)?chuàng)建一個(gè)。選擇右上角的“創(chuàng)建機(jī)器人”。

然后,開始填入創(chuàng)建的機(jī)器人的信息。

在創(chuàng)建過程的時(shí)候,我們會(huì)看到有兩個(gè)不是很能理解的選項(xiàng)。

這里要稍微說一下這兩個(gè)詞語的定義。
沙箱頻道:沙箱(Sandbox)是為了我們調(diào)試方便而創(chuàng)建的術(shù)語詞。沙箱是機(jī)器人在調(diào)試改動(dòng)代碼期間使用的環(huán)境。單位是一個(gè)頻道。所謂的頻道,就是我們?cè)诘诙嚼飫?chuàng)建出來的頻道;
機(jī)器人類型:機(jī)器人為了使用權(quán)限,分為公域(Public Domain)機(jī)器人和私域(Private Domain)機(jī)器人。公域機(jī)器人和私域機(jī)器人的使用 QQ 提供的 API 的權(quán)限并不相同,而且權(quán)限大小不是包含關(guān)系。私域機(jī)器人可以提供更靈活的調(diào)試處理,所以調(diào)試選擇私域機(jī)器人;公域機(jī)器人比較復(fù)雜,而且一旦選擇之后,就無法修改了。
在填入數(shù)據(jù)后,會(huì)彈出確認(rèn)界面。此時(shí)確認(rèn)即可。
這里稍微說一下。在填入介紹文字信息的時(shí)候,有時(shí)會(huì)因?yàn)橐恍┎恢赖脑蚨鵁o法進(jìn)入確認(rèn)頁面。這個(gè)時(shí)候多數(shù)原因都是文字帶有敏感詞。請(qǐng)刪去你覺得是敏感詞語的部分(或修改掉)后重試。
在創(chuàng)建完成后,我們會(huì)得到一個(gè)機(jī)器人的頁面。
此時(shí),我們進(jìn)入配置頁面。而且,由于我們已經(jīng)完成創(chuàng)建,此時(shí)的沙箱頻道里會(huì)自動(dòng)包含此機(jī)器人,所以就不需要我們手動(dòng)去拉人之類的了。

然后我們可以看到配置頁面。

點(diǎn)擊“功能配置”,我們可以看到“功能配置與提審”的頁面。此時(shí)我們要選擇第一個(gè)選項(xiàng):配置。

此時(shí),我們選擇“配置”后方可進(jìn)入配置頁面。

在彈出的頁面里,選擇“指令”?!胺?wù)”功能我們此時(shí)講不到,因此不作展開。
進(jìn)來之后,我們就可以為機(jī)器人添加指令了。

添加指令可以選擇右上角的“添加”按鈕;而修改指令,就選擇“重新配置”按鈕。
注意,重新配置會(huì)修改指令集里的指令,它會(huì)影響到我們的機(jī)器人。指令集里的指令,如果你選擇了私域機(jī)器人的話,那么配置項(xiàng)目里的前綴符號(hào)就必須是斜杠 無法修改;公域機(jī)器人可以修改這一點(diǎn)。而且,在配置指令的時(shí)候,“名稱”和“介紹”里只能寫中文漢字。
配置完成后,返回到手機(jī)頻道,我們就可以看到機(jī)器人的指令了:在我們創(chuàng)建的頻道聊天室里,輸入斜杠 ,就會(huì)自動(dòng)彈出指令序列。

這就是我們創(chuàng)建好之后的效果。
第四步:將機(jī)器人的信息關(guān)聯(lián)到代碼里
這是最后一步。請(qǐng)打開我們寫的程序代碼,機(jī)器人的項(xiàng)目(例如本倉(cāng)庫(kù)里的機(jī)器人項(xiàng)目是 )。

拿我的項(xiàng)目舉例說明。項(xiàng)目需要錄入如下的內(nèi)容到機(jī)器人配置代碼里去:
版權(quán)聲明(不是必要內(nèi)容,如果你自己寫的代碼可以不要);
日志記錄級(jí)別(用于顯示到控制臺(tái)界面里);
錄入授權(quán)信息(這個(gè)我們馬上說);
聲明機(jī)器人類型實(shí)例(圖上的
類型),并設(shè)置相關(guān)的內(nèi)容:
公域還是私域機(jī)器人(圖上的
屬性);
信息的過濾器(圖上的
屬性);
機(jī)器人收發(fā)消息的事件的掛載;
注冊(cè)機(jī)器人的指令配置;
啟動(dòng)機(jī)器人(
方法)。
這里根據(jù)你自己的代碼設(shè)計(jì)而變動(dòng)不同的風(fēng)格。我們挑選重要的兩個(gè)內(nèi)容(授權(quán)機(jī)器人指令配置)說明一下。
各位。如果你在這一個(gè)步驟的剛開始就聽得一頭霧水的話,多半是因?yàn)槟銢]有寫代碼導(dǎo)致的。我們只是配置好了機(jī)器人的環(huán)境,并未實(shí)現(xiàn)機(jī)器人的相關(guān)邏輯,因此必須要手動(dòng)實(shí)現(xiàn)代碼邏輯才可以使用機(jī)器人。請(qǐng)自行參考機(jī)器人的實(shí)現(xiàn)代碼過程吧。
重要步驟一:授權(quán)機(jī)器人
機(jī)器人授權(quán)是需要關(guān)聯(lián)上我們剛才創(chuàng)建的機(jī)器人的信息的,否則任何人都可以隨便用,肯定是不行的。
機(jī)器人的授權(quán)信息包含三個(gè):App ID、令牌信息(Token)和密鑰信息(Secret)。這三個(gè)數(shù)據(jù)均可在查到:
https://q.qq.com/bot/#/developer/developer-setting

在機(jī)器人授權(quán)信息得到之后,我們需要將信息錄入到代碼里。拿我的項(xiàng)目來說,請(qǐng)關(guān)注到代碼的這部分:

在這里,我們調(diào)用到 方法。它的聲明位于
之中:

實(shí)際上就是一個(gè)很簡(jiǎn)單的讀取本地文件的路徑,然后視為 JSON 文件然后讀取成 JSON 對(duì)象之后,然后將每一個(gè)數(shù)值讀取到后傳入對(duì)應(yīng)的臨時(shí)變量,最后返回一個(gè) 實(shí)例。該實(shí)例會(huì)在主方法里使用。

如果你的代碼不給別人看的話,你完全可以把密鑰、token 等重要信息直接寫進(jìn)代碼。不過我非常不建議這么做,因?yàn)樗鼈兪敲舾行畔?,寫進(jìn)去就意味著如果被別人看到,別人就可以用了。
因?yàn)槲业拇a是開源公開的,因此我的這些敏感信息被我存在了本地,因此多了這么一個(gè)步驟。
重要步驟二:注冊(cè)指令
在項(xiàng)目完成代碼實(shí)現(xiàn)后,我們需要配置指令。這些配置的指令,是我們?cè)陧撁娑藙?chuàng)建好了的,就是我剛才說的公域不限、私域機(jī)器人必須斜杠 開頭的那些指令信息。
注意,我們這里用的是中文的指令名稱,因此我們需要匹配上它們,需要在我們代碼書寫里也用這樣的指令名稱。

這里我們使用到一個(gè)叫 的方法來注冊(cè)指令。實(shí)際上可以看到,參數(shù)也是相當(dāng)簡(jiǎn)單的:一個(gè)
語句,實(shí)例化一個(gè)
類型的指令對(duì)象。指令傳入兩個(gè)參數(shù),一個(gè)是指令名稱(也就是我剛才說的匹配上頁面端設(shè)置的指令名);另一個(gè)則是回調(diào)函數(shù)。
指令名稱需要的是不帶斜杠 的后面的中文漢字部分,而在我的代碼實(shí)現(xiàn)上,所有漢字字符全部被我使用資源字典包裹起來了,因此這些指令名稱(中文字符)都放在資源字典里,因此才有了
方法的這一步(取字典里指定鍵的字符串值)。如果你的代碼不公開給別人看的話,你可以明文將漢字放在這里即可,注意用雙引號(hào)。
然后第二個(gè)參數(shù)是回調(diào)函數(shù)。這里的回調(diào)函數(shù)指的是指令需要執(zhí)行的代碼段。每一個(gè)指令都會(huì)匹配一個(gè)我們需要做的工作,因此此時(shí)傳入的是一個(gè)委托類型的實(shí)例。這里你可以用 lambda 表達(dá)式來完成,也可以使用匿名函數(shù)完成,也可以使用實(shí)際的方法來完成,總之,能放進(jìn)這里的委托類型實(shí)例兼容的東西都可以。
重要步驟三:在代碼末尾加入一個(gè)死循環(huán)
是的,你需要強(qiáng)制加入一個(gè)死循環(huán):
加入這么一段代碼的原因是,防止異步執(zhí)行的時(shí)候快速退出主方法。因?yàn)轫?xiàng)目使用的 API 均為異步的方法。如果我們不等待的話,異步方法會(huì)當(dāng)成異步去執(zhí)行,于是主線程會(huì)繼續(xù)走下去,導(dǎo)致程序快速退出。
加入死循環(huán)的目的是防止程序退出。而我們要退出這個(gè)程序的辦法是發(fā)出 組合鍵的方式來退出程序執(zhí)行。
第五步:嘗試跑起來吧!
完成了代碼編寫后,我們?cè)囍\(yùn)行一下程序。

打開頁面,并輸入指令。

如果可以看到配置指令輸出顯示出來的話,就說明機(jī)器人全部完成。本文結(jié)束。
總結(jié)
通過本文,我們介紹了如何使用機(jī)器人的部署,以及代碼完成,簡(jiǎn)要說明了一下,如何配置一個(gè) QQ 官方提供的機(jī)器人。雖然看起來略微復(fù)雜一些,但是可以看出 QQ 對(duì)開放平臺(tái)做出的貢獻(xiàn)和努力。