試玩 signal-cli
顧名思義,這是個命令行下的 IM 聊天軟件客戶端,早年折騰 Linux 發行版的時候,多么希望 QQ 能開放協議,再加上CLI支持,生活該多美妙。可惜了,「珊瑚蟲QQ」作者都坐完牢,都出獄十幾年了 _
前幾天陸續搞定了 Signal-Server 的部署,以及手機版,牛馬版的客戶端編譯運行,并連接到私有化的服務器,現在試試這個命令行版的看看。
下載/編譯
git clone https://github.com/AsamK/signal-cli
.\gradlew clean && .\gradlew build && .\gradlew installDist
如果出現以下提示,大概率是未使用 JDK 21 所致:
org.gradle.internal.exceptions.LocationAwareException: Build file 'D:\dev\signal\code\signal-cli\build.gradle.kts' line: 1
Plugin [id: 'org.graalvm.buildtools.native', version: '0.10.6'] was not found in any of the following sources:
如果出現以下錯誤提示,多數為網絡下載錯誤,留意可能需要配置好網絡環境,然后直接重試即可:
> Could not get resource 'https://repo.maven.apache.org/maven2/com/squareup/okio/okio-jvm/3.10.2/okio-jvm-3.10.2.jar'.
> Could not get resource 'https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter/5.12.0/junit-jupiter-5.12.0.pom'.
直接編譯完成,使用命令: build\install\signal-cli\bin\signal-cli --help 測試運行:

私服配置修改
接下來修改配置,連接到前幾天部署的 私服環境 。有兩個地方需要修改:
-
代碼 lib/src/main/java/org/asamk/signal/manager/config/LiveConfig.java 這里為主要配置所在,修改點分兩方面:
- 服務器域名地址
URL,CDN_URL,CDN2_URL,CDN3_URL,STORAGE_URL,SIGNAL_SVR2_URL - 密鑰方面,修改
UNIDENTIFIED_SENDER_TRUST_ROOT,zkGroupServerPublicParams,genericServerPublicParams,backupServerPublicParams
- 服務器域名地址
-
資源 lib/src/main/resources/org/asamk/signal/manager/config/whisper.store 這個文件存儲著服務器證書,客戶端連接時會主動校驗服務器證書,必須修改 否則無法連接 會有下面的提示
Failed to register: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target (PushNetworkException)
首先需要 下載 bks 證書的支持程序 jar 包,下載地址 下載 bcprov-jdk18on-1.80.jar 。完成后,再下載服務器證書,可以考慮直接使用 acme.sh 合成的 fullchain.cer, 或者也可以 chrome 瀏覽器的證書導出功能。完成后,使用下面的命令轉換到 bks 格式:
# 留意,密碼要使用 whisper 這部分已經固定到代碼里了
keytool -importcert -alias signal -file .\fullchain.cer -keystore .\whisper.store -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath .\bcprov-jdk18on-1.80.jar -storepass whisper -noprompt
>證書已添加到密鑰庫中
完成后,替換 whisper.store,然后重新編譯:
.\gradlew clean && .\gradlew build && .\gradlew installDist
使用測試
這里有文檔可供參考,但只有用戶注冊與發信息,不過其他指令也都在 man 文檔里寫了 https://github.com/AsamK/signal-cli/wiki/Quickstart ,這里是 man 文檔:https://github.com/AsamK/signal-cli/blob/master/man/signal-cli.1.adoc
首先,嘗試登錄:
build\install\signal-cli\bin\signal-cli -u +8613311111111 register
上面的命令敲完,無任何提示 即正常
驗證:
build\install\signal-cli\bin\signal-cli -u +8613311111111 verify 123-456
查找一下好友:
build\install\signal-cli\bin\signal-cli -u +8613311111111 getUserStatus +8613111111111
>Unable to check if users are registered: HTTP error: 401 Unauthorized (NetworkProtocolException)
提示失敗,好友查找未實現..._ 先試試用戶名查找:
build\install\signal-cli\bin\signal-cli -u +8613311111111 getUserStatus --username s131.01
>s131.01: true
很好,用戶名可以正常查找。再試試給模擬器里的賬號發個消息:
build\install\signal-cli\bin\signal-cli -u +8613311111111 send -m hello -u s131.01

馬上就彈出消息請求了,很快啊,沒法閃~
在模擬器上,找到這個會話,點進去接受:

防止別人找不到我們,給自己加一個用戶名:
build\install\signal-cli\bin\signal-cli -u +8613311111111 updateAccount -n cli.01
# 為避免自己只配叫「未知」
build\install\signal-cli\bin\signal-cli -u +8613311111111 updateProfile --name cli
在模擬器上回復一下,然后signal-cli這邊接收:
build\install\signal-cli\bin\signal-cli -u +8613311111111 receive
表情包在終端上也可以完美展示:

明兒再試試其提供的 JSONRPC 服務,然后寫個 MCP Server 試試~ _

浙公網安備 33010602011771號