TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南
TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南

Call-me 是開源 WebRTC 一對一視訊工具,輸入暱稱就能上線、按名單即撥。實測發現官方公共站的名單 API 仍收範本預設金鑰:通話媒體層加密是真的,名單層卻停在別人伺服器上,給客戶用建議自架,並一併考量 AGPL 授權與 NAT 穿透成本。
用 AI 摘要這篇文章:
想在網站上放一個「訪客點下去就能跟你視訊」的按鈕,Call-me 這個開源專案看起來是最短的路:不用註冊、不用裝 App,官方文件還直接給一段 iframe 代碼,貼上就生效。一般做法是丟一組視訊會議連結給對方,但那通常要對方有帳號或裝程式,流程也停在約時間;把通話按鈕放進自己網站、來了就講,是另一種需求。我把官方站完整走了一遍,也翻開它的設定範本與 API 文件,結論先講:通話本體走瀏覽器點對點,媒體加密後不落地;但「此刻線上有誰」這份名單住在伺服器上,而官方公共站的名單 API,收的還是範本裡那組任何人都看得到的預設金鑰。換句話說,嵌入官方站五分鐘就能動,但只要場景涉及真實客戶,這條捷徑會繞回自架老家,而且自架要吞下 AGPL 授權與 NAT 穿透這兩筆真正的帳。
打開 cme.mirotalk.com,畫面是一個暱稱欄、攝影機與麥克風的預覽,和一個「加入」按鈕。預覽會直接測你的鏡頭與收音,瀏覽器跳出權限詢問時同意就好,裝置有問題在進房前就會發現。輸入名字按下加入,直接進到名為 public 的房間,左側是線上名單,當時沒有其他人,畫面顯示等待其他人加入。全程沒有註冊流程、沒有 Email 驗證,身分就是你自己填的那個名字。

首頁就是一張風景照背景加登入框,角落掛著語言選單與隱私權、API 文件的連結,沒有多餘的行銷頁。登入框下方另有「立即通話」欄位,填進自己與對方的名字,在對方也上線的狀態下直接撥過去;要產生能貼給客戶的一次性撥接網址,用 README 的 join 網址參數就行,repo 的 integration 目錄也附了一個 widget 範例,示範怎麼把這組參數包成網站上的小按鈕。

一對一通話的發動方式是按名單上的通話鈕,或者用網址參數直接組出撥接連結,例如 ?user=客服&room=Support 讓名為「客服」的人進 Support 房間,再由訪客端補上 call 參數撥給他。房間的意義只是分組:預設所有人都在同一個 public 房間,加了 room 參數才會分成不同群組,而且 README 原文寫得明白,各房間的名稱與配色差異僅是視覺效果,不是安全功能,不同房間看不見彼此,但不構成權限邊界。
有個細節很多人會在意:介面會跟著瀏覽器語言切換,但中文翻譯只做了簡體版,我在繁中環境實測,拿到的仍是簡體字介面。要對在地訪客上線,得先接受這點,或 fork 專案自己改語言檔;語言檔是 repo 裡 app/locales 目錄的 JSON 檔,改詞不動程式。
Call-me 提供完整的 REST API,可以查線上名單、房間、通話狀態與伺服器統計。我照官方文件對公共站做了三組探測。
先不帶任何憑證去敲統計端點,伺服器回 403 Unauthorized,這是應有的防護。換上 README 範例那組預設金鑰 call_me_api_key_secret 再敲一次,回的仍是 403,但訊息變成 Endpoint disabled by admin,站方主動關掉了統計端點。同一組金鑰最後改敲使用者端點,伺服器回 200,內容是當時的線上名單,空的。
curl -X GET "https://cme.mirotalk.com/api/v1/users" \
-H "authorization: call_me_api_key_secret"
三個回答合起來看,輪廓就出來了:站方主動停用了會洩漏伺服器資訊的端點,這是有意識的收緊;但會列出線上暱稱的 users 端點,收的仍是範本預設金鑰。對照 repo 裡 .env.template 那行原文:
API_KEY_SECRET=call_me_api_key_secret # change me
範本給佔位值、註解提醒你換掉,這是開源專案的標準做法;我的實測只是證明,連作者自己架的公共站,這組值都還在使用。假設你用 iframe 把官方站嵌進自己的網站,讓訪客以「輸入暱稱、等客服撥接」的方式排隊,那麼任何讀過 README 的人,都能用同一組金鑰列出你站上此刻線上有誰,甚至用 room 參數過濾特定房間。名單裡只有自取的暱稱,沒有 IP、沒有媒體內容,嚴重度取決於你的場景;但客戶排隊名單可以被陌生人枚舉這件事本身,就足以讓多數商業用途轉向自架。
順帶一提,這套 API 的文件本身就有線上版,每支端點都能直接試打。除了查名單,還有一支端點會為指定的使用者產生現成的撥接連結,等於把網站上的客服按鈕參數化;webhook 則在使用者加入與離開、通話開始與結束時主動發事件到你的後台,通話結束事件還帶著通話秒數,接客服系統做服務紀錄剛好用。防濫用的速率限制、反向代理場景的信任設定,範本裡也都有對應欄位。
Call-me 的通話架構是瀏覽器之間直接連線(WebRTC 點對點):影像與聲音以 SRTP 加密,聊天與檔案共享走 DTLS 加密的資料通道,金鑰在兩端之間交換;伺服器只在牽線階段當介紹人,幫雙方交換建立連線所需的資訊。官方在 README 與隱私頁都宣稱端對端加密、內容不落地,以架構而言這個說法成立。隱私頁甚至逐項寫清楚:牽線資料只在連線期間存在、不留任何資料庫、不收錄影音與聊天內容、不使用第三方分析服務。牽線用的中介資訊在通話建立後就沒有用處,官方的說法是即用即棄;這與名單狀態常駐在伺服器記憶體裡,是兩件不同的事。
我也把首頁載入的原始碼抓下來核對過:script 清單只有自家檔案與幾個公開 CDN 的介面函式庫(Bootstrap、axios 這類),沒有 GA、沒有 Clarity、沒有任何 tracker。遙測面乾淨的宣稱,行為層對得上,這在同類通訊工具裡並不常見,值得記上一筆。
但線上名單不是媒體,是狀態。每個人的暱稱、房間、媒體開關,都登記在伺服器上;房間名單、REST API、webhook 事件(使用者加入與離開、通話開始與結束)全部建立在這一層。舉個例子,你在 Support 房間放了三位客服的暱稱,這三個名字加房間狀態就在伺服器上,API 查得到,webhook 也發得出去。所以要分兩袋看:通話內容那一袋,點對點加密幫你拎走了;名單與狀態那一袋,放在你連上的那台伺服器,信任邊界就是那台伺服器的管理員。這和自架不等於本地優先是同一個道理,之前在 JadeAI 開源履歷工具的討論裡也碰過:判斷資料邊界,看的是什麼進了伺服器;開源讓你能查證,但不改變東西放在哪裡。在 Mirotalk 家族裡,這套點對點架構的定位是一對一撥接,與之相對的 SFU 版本走伺服器轉發、撐多人會議,選錯邊會把成本花在不需要的地方。
授權是第一關。專案採 AGPL-3.0,授權條款全文就放在 repo 根目錄。對個人與內部使用,AGPL 幾乎無感;但如果你修改原始碼之後對外提供網路服務,AGPL 要求你向使用者公開修改後的原始碼。想在閉源的商業系統裡嵌一份客製化的 Call-me,這條就是紅線。要付費取得閉源整合的授權也有官方出口:作者的家族專案在 CodeCanyon 都設有付費版,官方總覽頁的 Call-me 卡片同樣連到一個付費商品頁;授權範圍與價格以商品頁為準,買之前照商業需求讀清楚條款。
更容易漏算的是 NAT 穿透。範本設定裡 TURN 轉送預設關閉,STUN 只設了 Google 的公共伺服器,附上的 TURN 帳號密碼則是文件共享的示範值。點對點連線在一般家用網路多半能直接打通,但雙方只要有一端在嚴格的防火牆後面(公司網路、部分校園與電信環境),就需要 TURN 伺服器中繼。repo 附了 coturn 的設定範本可以自己架,自架的真實成本在這裡,安裝那一步反而最單純。測試階段要讓外部裝置連到本機實例,可以先搭配 OutRay 這類開源內網穿透工具打通再驗。
部署本身三條路任選。用 Node.js 直接跑:clone 專案、複製設定範本、安裝依賴、啟動,幾個指令內見到畫面;要用背景推播收來電,範本附了產生推播金鑰的指令,跑一次把金鑰填回設定檔就行。用 Docker Compose:官方映像累積 13,779 次拉取,2026 年 8 月中的更新還把容器改為非 root 執行,compose 範本把設定檔與程式目錄以唯讀方式掛進容器,這些都是加分的維護訊號。或用官方一鍵腳本,但腳本要求 Ubuntu 22.04 或 24.04 LTS、root 權限與一個指到伺服器的網域,把 root 交給第三方腳本之前,照自己的安全政策評估一遍。錯誤回報的 Sentry 與隨機配圖的圖庫服務都是預設關閉的選配,需要才打開。
自架完成後的前三件事也很明確:換掉 API 金鑰、限定可嵌入的網域(範本預設任何網站都能把你嵌進 iframe,CORS 也開放所有來源)、視需要打開 host 密碼保護(範本預設關閉,示範密碼是 123456789 這種等於沒設的值)。
一對一之外,它還有螢幕共享、檔案共享、即時文字聊天、通話中切換攝影機與麥克風、背景分頁也能收到來電的 Web Push、範本預設 30 秒未應答就結束的來電逾時,文件都有對應說明。專案本身的體質:2024 年 9 月開源,目前 762 顆星、88 個 fork,沒有開啟中的 issue,最新提交在 2026 年 8 月中,版本 1.4.35。從已結案的 issue 歷史看,修過的問題集中在行動裝置載入、沒有攝影鏡頭的撥出、瀏覽器權限這類相容性坑,量級是個人專案的規模,幾乎每件都有回應與收尾。作者 Miroslav Pejic 一人維護整個 Mirotalk 家族(SFU、P2P、BRO、C2C、WEB、CME、ADM 七個專案),Call-me 是其中負責「按名單就撥」的那一員,多人才開會的場景該看家族裡的 SFU 版本。
幾個會影響採用決策的性質先攤開。畫質與延遲取決於雙方網路與裝置條件,正式上線前值得在實際環境先試打一輪;加密宣稱對應它的 WebRTC 點對點架構(SRTP 與 DTLS),需要第三方密碼學審計等級保證的高敏感場景,個人維護的專案通常給不了這種文件;通話上限是一對一,這是刻意定位出來的分工。
把它當個人快速連絡或內部測試用,iframe 嵌官方站完全成立,五分鐘生效;嵌入用的 allow 屬性值得照官方範例再刪一次,攝影機與麥克風留下,剪貼簿、全螢幕這類用不到的權限拿掉,把授權面積縮到最小。場景一旦涉及客戶,請自架:把名單層收進自己的伺服器,換掉預設金鑰、限定來源,再視網路環境補 TURN。需要客戶先約時段再視訊的完整流程,可以和 CloudMeet 這類自架會議預約系統串在一起想。至於想在閉源產品裡深度客製的人,要嘛走 CodeCanyon 的付費授權出口談清楚條款,要嘛換一個授權更寬鬆的方案,最不該做的是賭自己不會被要求公開原始碼。
一句話收尾:Call-me 把最難的那層做對了,加密的點對點媒體不落地;而它值得你花一個下午自架的原因,恰恰是那層做得太對,讓人容易忘記名單層還停在別人家的伺服器上。