一個適合CJK 環境的,Telegram 群聊搜尋和歸檔機器人。
點選【搜尋】按鈕即可自動鑑權開啟搜尋介面。
點擊時間連結即可跳轉聊天介面。
你需要:
下載.env.example
文件,參考內部註釋,進行相應配置。
你可以將它儲存為.env
,或是作為環境變數配置。
TAS 並未提供內建的https 服務,建議使用Caddy 或類似軟體反向代理TAS。
docker run -d --restart=always --env-file=.env quay.io/oott123/telegram-archive-server
當然,也可以使用Kubernetes 或docker-compose 來運作。
如果沒有Docker 或不想用Docker,也可以從原始碼編譯部署。此時你還需要:
git clone https://github.com/oott123/telegram-archive-server.git
cd telegram-archive-server
# git checkout vX.X.X
cp .env.example .env
vim .env
yarn
yarn build
yarn start
在群組中發送/search
。 Bot 可能會提示你設定Domain,按提示設定即可。
使用者必須滿足以下條件,才能在搜尋結果中展示頭像:
由於MeiliSearch 對新訊息的索引效率較差,因此只有在滿足以下任意條件時,訊息才會進入索引:
如果沒有使用redis 以持久化訊息佇列,則在程式異常、伺服器重新啟動時可能會遺失未進入佇列的訊息。
目前僅支援超級群導入。
在桌面用戶端點選三點按鈕- Export chat history,等待匯出完成,得到result.json
。
執行:
curl
-H " Content-Type: application/json "
-H " Authorization: Bearer $AUTH_IMPORT_TOKEN "
-XPOST -T result.json
http://localhost:3100/api/v1/import/fromTelegramGroupExport
即可匯入記錄。注意一次只能匯入單一群組的記錄。
如果啟用OCR 佇列,那麼Redis 是必須的(可以和快取共用一個實例),並配置第三方識別服務。識別流程如下:
識別和入庫可以在不同的角色實例上完成:圖片下載和文字入庫將在Bot 實例上完成,OCR 實例只需存取OCR 服務即可。
這樣的設計使得維護者可以設計離線式的集中辨識(例如使用搶佔式實例運行識別服務,佇列清空後關機),降低辨識成本。
如果你使用的是第三方雲端服務,可以直接關閉OCR 佇列,或是在同一個實例中開啟Bot 和OCR 角色。
參考Google Cloud Vision 文字辨識文件和Google Cloud Vision 計費規則。配置如下:
OCR_DRIVER=google
OCR_ENDPOINT=eu-vision.googleapis.com # 或者 us-vision.googleapis.com ,决定 Google 在何处存储处理数据
GOOGLE_APPLICATION_CREDENTIALS=/path/to/google/credentials.json # 从 GCP 后台下载的 json 鉴权文件
你需要一個paddleocr-web 實例。配置如下:
OCR_DRIVER=paddle-ocr-web
OCR_ENDPOINT=http://127.0.0.1:8980/api
建立一個Azure Vision 資源,並將資源資訊配置如下:
OCR_DRIVER=azure
OCR_ENDPOINT=https://tas.cognitiveservices.azure.com
OCR_CREDENTIALS=000000000000000000000000000000000
docker run [...] dist/main ocr,bot
# or
node dist/main ocr,bot
DEBUG=app: * ,grammy * yarn start:debug
搜尋服務鑑權後,服務端會跳到: $HTTP_UI_URL/index.html
並帶上以下URL 參數:
tas_server
- 伺服器基礎URL,形如http://localhost:3100/api/v1
tas_indexName
- 群組號碼,形狀如supergroup1234567890
tas_authKey
- 伺服器簽發的JWT,可以用來作為MeiliSearch 的api key 使用。在/api/v1/search/compilable/meili
處可以當作普通的MeiliSearch 實例進行搜尋。
索引名應該使用形如supergroup1234567890
的群號; API Key 則是服務端簽發的JWT。
請注意filter 因安全原因暫時無法使用。