2015年9月3日 星期四

sip: 自由開放的免費網路電話 [通訊協定]

家人或好友常跑外國嗎? 小孩在外國留學嗎? 看外勞在手機上打字跟家裡聯絡覺得很辛苦嗎? 趕快在 android 手機上安裝 CSipSimple 自由的網路電話、 雙方都申請免費 sip 帳號 (看起來像 e-mail) 不論分隔天涯海角, 兩人都可以用 wifi 打免費電話講到飽。

[2016/2/28 重新整理全文]

沒錯, 從 Skype ( 後半段跟 type 的唸法一樣; 請不要唸 Sky屁!) 到 Line,再到最新的鴻海 xone, 網路電話已經流行很久了。 但是因為我重視 (資訊科技) 轉換跑道的成本 更甚於軟體功能, 不願被任何一家公司綁死, 又因為 (特別在 Snowden 爆料之後) 不信任沒有原始碼的程式, 所以一直沒追隨主流。 最近發現 VoIP 的自由軟體已經很成熟、 對於開放的 sip 通訊協定 (Session Initiation Protocol) 的支援已經很好。 而且自己已經享受了好幾個月 手機打市話便宜打, 超爽 der, 一定要分享給大家。

Sip 之於 VoIP, 就像 odf 檔案格式之於文書/試算/簡報, 或是 svg 檔案格式之於向量繪圖。 通訊協定/檔案格式是否開放, 比軟體功能更重要。 開放的通訊協定/檔案格式允許任何人跳進來開發相容的 VoIP/辦公軟體、 促成合作與公平競爭。 在這樣多元選擇的環境下, 廠商不敢拿蹺; 用戶甚至可以拿不同的競爭對手的 (軟硬體) 產品或 (通話) 服務來截長補短。 例如我從 sip 電話得到的 「市話節費」 「私密通訊」 這兩項好處, 就分別來自不同的服務供應者。

首先你需要註冊一個 sip 帳號。 搜尋 「sip account」 可以找到很多提供免費註冊的伺服器。 但如果你是朋友群當中 (讀本文玩 sip) 的先驅者, 沒有人跟你測試, 那麼建議先申請 ekiga ostel, 等一下比較好測試, 而且最能夠 保護隱私。 不論在哪個網站註冊, 大致上你需要在服務提供者 (provider) 的網頁上填入 (1) 自選的帳號名稱, 例如 ckhung (2) 自選的密碼 (3) 聯絡 e-mail (忘記密碼時可收 e-mail 重設)。 另外, 網頁上會告訴你未來 server 該如何設定, 請抄下來。 [2017/8/16: ostel 已經掛掉一兩個月了, 好像不會回來了。 不過 OSTN 的 Hosted VoIP Services 清單還有其他服務。 改天若試出來, 再補在這裡。]

再來你需要安裝某個支援 sip 的通話 app。 請到 f-droid 市集 ( 為什麼?) 或是 google play 搜尋 「sip」。 有很多可以選。 本文介紹的是 CSipSimple

CSipSimple 新增帳號 初次打開 CSipSimple 初次打開 CSipSimple 時, 你需要做一點簡單設定。 網路電話的流量大約每分鐘1MB左右, 所以 3G/4G 數據上網吃不飽的人, 可以考慮勾選 「Available on WiFi」。 「I am allowed to use mobile」 也是數據上網時才用得到, 只用 wifi 者可以不必勾選。 但打勾是主張消費者權益, 也是表達主張 網路中立性 的立場。

新增帳號時, 有三或四大類方式可選:

  1. Generic Wizards
  2. World Wide Providers
  3. Other Country Providers
  4. 某個國家的 providers (臺灣或美國或... 根據你在 android 所設定的語言而定)

基本上它把全球所有的 providers 窮舉列出分置於後面的三大類當中, 如果你所註冊的網站有出現在其中, 恭喜! 那就直接從三個窮舉列表當中挑選, 一切的參數都直接幫你設定好了, 比較不會出錯。 如果窮舉列表當中找不到你註冊帳號的網站, 那就只好採用 「Generic Wizards」 底下的 「Basic」。 以本文所推薦的帳號為例, Ekiga 跟 Ostel 都可以在 World Wide Providers 裡面找到。

CSipSimple 的 Basic Wizard 編輯 ekiga 的帳號 CSipSimple 編輯 ekiga 的帳號 有三個欄位要填。 第二、三欄就是先前註冊免費帳號時的帳號/密碼/主機。 第一欄是顯示給自己看的。 比方說你可能用不同的暱稱來接/打不同帳號的電話。 我的帳號名稱到處都填 ckhung, 所以喜歡用網站名稱來當顯示名稱。 當你採用窮舉列表方式輸入帳號時, CSipSimple 自動就這麼命名。 如果是用 Generic Wizards 底下的 Basic, 那麼還多一個欄位要填: server。 當初註冊時, provider 的網頁會告訴你這個資訊。

CSipSimple 新增帳號 儲存之後回到帳號清單 (帳號管理畫面), 看到每個帳號左側圖示最下面都有一橫。 若是綠色的, 就表示帳密輸入正確、 登入成功 (registered), 可以打電話。 (不需要手動登入; 每次啟動 CSipSimple, 它會自動試著去登入每個帳號。) 另外, 若想改變 「預設撥號」 的帳號, 也可從這個畫面進入選單, 找到 "redorder", 調整眾帳號優先順序。

網路電話連線失敗很難除錯, 因為錯誤訊經常不太足夠。 多個帳號有助於除錯: 如果所有帳號的底橫線都變成黃色(正在嘗試連線)或紅色(連線失敗), 那就表示並非哪個帳號有問題, 而可能是你這頭的 wifi 連線 (忘了設定 防火牆 開放 CSipSimple 通行了嗎?) 或手機軟硬體版本有問題。 這時光是從 task manager 刪掉 CSipSimple 可能還不夠; 可能需要強制停止再重新啟動, 甚或重新開機。 又或者需要換一個 sip 軟體或換一部手機試試看。

如果有些帳號綠燈, 有些帳號紅燈, 那就是個別帳號設定的問題。 請見 [專家] 那一段。

CSipSimple 操作畫面 CSipSimple 的操作畫面跟原來 android 手機打電話的畫面一樣。 最大的不同是: 如果你像我一樣到處註冊了很多個 sip 帳號, 那麼它會用哪個帳號往外撥電話呢? 右上角所顯示的就是預設外撥的帳號。 也可以點它, 改選其他帳號撥號。

登入成功之後, 如果並沒有兩位朋友同時讀這篇, 那要打給誰呢? ekiga 用戶可以打 500 聽自言自語 (查詢 lag 是否嚴重), 或打 520, 它會自動掛斷然後馬上回撥讓你自言自語。 (不要怕英文, 英文出現的意思就是通了, 耶!) 這裡列的號碼 很多都不存在了, 但會有英文告訴你撥錯號碼, 照樣表示成功! 根據 這一篇, ostel 用戶的 echo test 號碼是 9196。

其他免費 sip 服務的用戶就要搜尋自家的 「echo test」。 我試著打別家的 echo test 結果發現: 用 ostel 的帳號打 500@ekiga.net 接不通; 用 ekiga 的帳號打 9196@ostel.co 也接不通。 用 linphone 的帳號打 520@ekiga.net 可以聽到對方聲音, 但無法發話。 用 linphone 的帳號打 9196@ostel.co 出現 503 service unavailable 的錯誤, 有可能是 ostel 只接受 加密電話

哦對了, 想打給朋友的 sip 帳戶 (例如 ckhung@ekiga.net) 時, 要先點畫面下方的 「txt」 然後再點畫面上方空白處, 才可輸入英文字母與小老鼠等等。 但是我不曾成功地測試不同 provider 帳號之間的通話。

[11/13] 補充一些心得:

  1. 按下 「撥號」 (go 或電話圖示) 之後, 請耐心地等待約三五秒鐘。 它可能需要繞地球一兩圈找到收話人所在的伺服器之後, 才會出現撥號聲。 如果沒耐性連點幾次, 等一下會出現好幾個 (接不通的) 「通話中」 畫面, 欲速則不達。
  2. 發話者與受話者在同一個區域網路裡面 (例如我一個人在家用左手的舊手機甲帳號打給右手的新手機乙帳號) 好像很容易失敗。 建議先在不同的兩地測試通話。
  3. 建議不要同時在兩部 (或更多) 手機上面登入同一個帳號。 先暫時停用 (點一下, 讓綠色變灰色) 其他手機上的同一個帳號, 伺服器才不會錯亂。 (「到底該把來電訊息傳給哪一支手機啊?」)
  4. 網路速度慢的那一方, 聽話可能 ok; 但他講的話進入對方手機時, 可能斷斷續續。 可以理解, 因為 ADSL 通常上傳比下載先遇到速度瓶頸。
  5. [2016/8/27] 臺灣大哥大及遠傳電信的 4G 數據上網拿來打 sip 電話都成功。 其他家呢?

CSipSimple 專家設定模式 如上所述, 因為網路電話除錯困難, 又因為 sip 提供多元選擇, 所以非常需要大家分享成功經驗。 CSipSimple 有一個 「專家」 設定模式: 在編輯某個帳號時, 點一下右上角的選單, 再點 「Choose wizard」 然後挑選 「Generic Wizards」 底下的 「Expert」, 可以針對這個帳號更詳細地做其他設定。 如果你跟朋友成功測試通話, 請留言分享一下你採用的 OS版本/app及版本/服務網址, 還有其他特殊注意事項吧! (分享不同 app 不同環境的教學文的網址更讚啊!)

12 則留言:

  1. Android 版本 4.3.1
    CyanogenMod 版本 10.2.1 ( 好,好,我會趕快安全更新 ^_^||| )
    CSipSimple 版本 1.02.03-2459

    以下 sip 帳號皆成功與朋友通話:
    sip:[密]@ekiga.net
    sip:[密]@sip.linphone.org

    另外, sip:[密]@ostel.co 曾經成功過, 現在失敗當中 :-(

    哈哈, 我的帳號很好猜啦。 也歡迎讀者打來測試。
    [密] 只是要提醒大家記得保護隱私而已。

    回覆刪除
  2. play商店 package name是com.csipsimple
    引述//新功能
    * Hot fix for android 5.0//

    所以代表已經支持5.0了是吧?!
    連結 https://play.google.com/store/apps/details?id=com.csipsimple

    回覆刪除
  3. Android 版本: 5.1
    CyanogenMod 版本: 12.1
    CSipSimple 版本: 1.02.03-2459

    經過測試不論是從Play Store下載還是從 F-Droid下載
    都能夠正常輸入帳號密碼也可以與其他人通話

    回覆刪除
  4. Android 版本: 5.0.2
    HTC Sense版本: 7.0(1.41.709.10)
    CSipSimple 版本: 1.02.03-2459

    完全運作正常OwO
    CSipSimple真的支援5.0喔~

    回覆刪除
  5. zenfone 2 ZE551ML
    Android 版本 5.1.1
    Cyanogenmod 版本 12.1-2015xxxx-UNOFFICIAL-Z00A
    CSipSimple 版本: 1.02.03-2459

    正常運作!

    回覆刪除
  6. 這個週末已經整篇重新順過, 希望比較容易懂、 容易成功。

    回覆刪除
  7. 台哥大3G/4G打 sip 電話通了!

    原先不通;但 sip over openvpn over 3G/4G 就通。 打電話去反應,沒有結果。 隔一陣子再試,CSipSimple 已能向網站報到上線;但電話還是打不通。 前幾天再試,就可以正常 sip over 3G/4G 了!

    請大家分享一下你用不同電信業者 3G/4G 撥打 sip 電話的經驗吧!

    回覆刪除
  8. 我用遠傳4G手機可撥打給別人,但是別人無法撥打給我,用遠傳4G手機上顯示已註冊,但是伺服器上沒顯示我上線,我手機改用家裡WIFI一切就可以,這是什麼問題?

    回覆刪除
  9. 不知道耶。 echo test 成功嗎? 換不同的伺服器註冊再試試看呢? 用各種不同的排列組合試試看, 大概就可找出是誰的問題。 至於如果是電信業者的問題... 那也沒辦法囉~~

    回覆刪除
  10. 看完了此文辦完了一個ekiga 帳號
    然後用jitsi通訊軟體來測試

    跳出此錯誤訊息 "http://i.imgur.com/KleOUep.png"
    不知道ckhung大 有沒有對此軟體有所研究

    回覆刪除
    回覆
    1. 沒用過耶。 這個問答有幫助嗎? https://desktop.jitsi.org/Documentation/FAQ#ekiga.net

      刪除