fitwxc2009-08-26 05:29:22
這里雖然講的是打電話,實際上是如何利用最新的電腦和網絡技術的一個實例。

你不需要任何VOIP設備比如ATA,當然有的話更好,你只要有一個電話就行,比如手機,家里已有的電話,或辦公室里的電話都行。傳統的電話,VOIP、IP電話都行。

你的親友使用時也很簡單,只要撥一個你給的號碼,然后又掛掉就是了,過一會電話會自動打過去。因為電話不會接通,所以打電話的人只要是接電話是免費的,就不會要付任何費用。

所有你所需要的只是一個SIP供應商,比如CallCentric(CC)。賬上需要有些credit,能夠打國際長途。也需要有一個DID(網絡電話號碼),用于這個Callback用途。

先到CC申請一個免費帳號。如果沒有free的credit送你的話,加上5塊錢,打中國是一分鐘不到2分錢。然后再買一個DID,一個月才兩塊錢,注意e911是要加費費的,所以不要加(除非你真需要)。

然后到SipSorcery.com,建立一個新帳戶,進行一點很簡單的設置。在”SIP Account“里,Out和in Dial Plan都要選用”default“。 在“Sip Provider”里加上一個新帳號,取名“CC”,使用CC的用戶名(1777xxxxxxx)和密碼,Server是“callcentric.com”,并選上注冊(Register)。然后在Dial Plans里點一下“default”,把下面的內容復制進去并update:

-----------------------------------------------------
if sys.In then
cid = req.Header.From.FromURI.User
case cid
when /^86/ then nb = "00"
when /^0086/ then nb = ""
else
nb = "0086"
end
sys.Callback("16265551212@CC","#{nb}#{cid}@CC",15)
end
-----------------------------------------------------

這段Ruby小程序很簡潔(我的一貫風格),很好理解:如果有電話打進來了(sys.In),先獲得來電的CID,并根據CID的具體情況,確定需要添加的字頭,保證字頭是“0086”,因為CC的撥號要求這個格式。然后不接通便掛斷,等待15秒,好讓對方有時間掛機。15秒后,它先撥你的號碼(16265551212),然后撥來電者的號碼(字頭 + CID),這樣雙方就被接通了。你的號碼可以是任何電話,比如手機,辦公室座機,或你的GoogleVoice號碼等。

可見,來電者撥這個Callback DID號碼時,電話沒有被接通過,所以不會有任何費用的問題,你的DID也不會被收費。打回去和打到你都是通過CC,很便宜,加起來約3分錢一分鐘。

就是這么簡單。下面再做一些更多的說明。

如果你想省掉DID的月費,可以不用CC的,到SipGate(SG)申請一個免費的DID。然后把SG加到“SIP Providers”里,并register。CC不再必須register,因為不再用它接入,只是打出。IPKall的DID不行,因為不能顯示中國來電的CID。

當然,CC除了用在這里之外,還可以用到別處打VOIP電話。

如果你只想把來電接到你的ATA,那么把“16265551212”換成:
“UserID@sip.voipdiscount.com"或”1747xxxxxxx@proxy01.sipphone.com“等。如果你的ATA也是接到SipSorcery的話(最好另立一個賬戶,除非你以后對SS很熟悉了),那就是”UserID@sipsorcery.com"。好處是,這樣CC打到你是通過SIP而不是PSTN,因而是免費的,每通電話下來,能節省一半的錢。

注意在這里不要用VoipDiscount(VD)取代CC。不是所有的SIP provider都支持這個”Callback“功能,CC是我試過的幾個中唯一沒有問題的。尤其是VD,有許多SIP兼容性問題,比如如果”16265551212“是你的手機的話,你又沒接的話,一旦走到語音信箱里,VD不知道怎么掛掉,一下子就會用掉60分鐘。所以,VoipDiscount最好只用來老老實實打便宜電話,不要做其它復雜的用途。

這里也就解決了一個許多人都碰到的問題:取消iTalkBB后,如何再讓國內的親友免費打過來?當然,這個辦法不只限于中國大陸,其它國家只要把相應的國家代號加到上面的dial plan里就是了。接電話的人可以在任何一個國家里,只要把”16265551212“改成”00+國家代號+號碼“。

最后再教你一個測試這個Callback的好辦法。如果你還沒有免費的SipGate的DID的話,去申請一個,并得到200分鐘免費credit(只能打美國)。按照上面的介紹,把這個DID設置為Callback的號碼。跟CC的DID相比,不但無費用,而且可以用來進行下面的Callback調試。

首先到你的SG帳號里,把它的CID設置成862161416222(Seagate中國),用它來模擬來自中國的電話。這樣你用SG打出去時,來電顯示是1862161416222(加了1),可是SG在接電話時如果看到有1時,又會把1去掉。這樣SS接到這個電話時,看到的來電是862161416222(沒有1),正合俺意。

這里順便說一句:如果中國來電沒有86或0086打頭的話,而且又是1開頭的話(比如有些手機號),這個1會被SG去掉。碰到這種情況,比如來電號碼實際上是1-234-567-8900的話,就要加這么一行:

when /^2345678900/ then nb = "00861"

然后用一個Softphone(比如X-Lite)連接到SipGate,注意不要Register,因為這個SG已經Register到SS了,否則SS會接不到,又會回到這個Softphone!然后用這個Softphone撥這個DID,撥不通,掛掉。15秒后你的電話(16265551212)就會響鈴,馬上拿起來,你就會聽到Seagate中國上海小姐美麗動聽的歡迎辭:”您好,歡迎致電希捷上海有限公司。現在是非工作時間,請直接撥打分機號,查號請撥零...有關細節請登錄希捷官方網站,www.seagate.com ...“。

恭喜!一切妥當,可以讓你的親友撥001然后接著撥這個10位數的DID。

總之,SIP網絡電話的可能性是無止盡的,只限制與你的想象力和了解程度,這里只是一個活用的例子。大家也可以由此一例看到為什么我極力推薦SipSorcery。

作者:文學城里的fitwxc,不要忘了我其它許多帖子,比如FAX指南,打印機指南,費用幾乎為零的手機,自裝網絡電話系列等。
coorslight9692009-08-26 06:00:50
先顶起来再慢慢研究
lipton3332009-08-26 07:15:54
同意!请“业余初段”等亲传弟子抓紧学习领会,尽快推出实施细节
色大胆小2009-08-26 14:49:06
大顶。就是学不过来,GV+G5+GVout+X-Lite 我都还没调好 :-(
中北2009-08-26 16:25:05
有SG你再提CC会把用户看晕,还有SS运行可靠吗?
fitwxc2009-08-26 19:04:18
你可以下載Sipsorcery V1.1,自己run
fitwxc2009-08-26 19:57:38
其實我不懂SIP內部結構,更沒搞過SIP、VOIP開發,業余愛好之一而已
newpeople2009-08-26 20:10:35
非常感谢
人在北美片反主2009-08-26 22:05:43
我,一个老天使,在看一段天书。没有天图或者天影吗?
色大胆小2009-08-26 23:21:55
把文中的CallCentric,换成Gizmo5,是否依然成立?
fitwxc2009-08-27 03:18:15
除非你有G5的DID,GV的號碼不行,因為一撥就接通
fitwxc2009-08-27 03:47:15
也可以用GoogleVoiceCall,更省錢一些,不需要CC等
fitwxc2009-08-27 04:08:42
注意“16265551212”不能是“1747xxxxxxx”,其它都可以
fitwxc2009-08-27 04:56:26
另一個測試方法是:
色大胆小2009-08-27 13:03:54
是我不懂概念,以为那1747。就是DID。DID应该是个任何电话可拨打的号码。
fitwxc2009-08-28 06:58:22
是的,還要把SG的voicemail關掉,否則會進到那里去,算錢的。
fitwxc2009-08-28 07:01:46
G5的1747號碼不是DID。GV的號碼是DID,只是這個永遠都是一撥就通!
色大胆小2009-08-28 12:57:36
明白多了,再谢。
踢踢踏踏2009-09-06 19:55:38
回复:如何讓親友免費打電話給你
阳光932009-09-08 21:08:42
回复:如何讓親友免費打電話給你
阳光932009-09-08 21:13:02
我买的电话卡,打往大陆每分钟1.2美分,哪一个更划算?
阳光932009-09-08 21:21:39
跟贴“回复:如何讓親友免費打電話給你”标题有误,请版主删除。
chat0922009-09-15 14:57:17
可否用现拥有的电话号码做DID?