freeswitch連線語音閘道器配置及使用場景
簡介
在學習的過程中需要使用fs和語音閘道器連線,通過sip接入運營商呼到手機或者固話。尤其是在人工催收、電銷外呼中需要在freeswitch中使用sip和運營商對接達到指定號碼落地的效果,簡單描述如下
對接方式
簡單介紹一下,freeswitch裡gateway(閘道器)的概念。閘道器又成協議轉換器,通常都是進行協議轉換。這裡說的閘道器指的是語音閘道器,如常用的sip閘道器,負責sip協議和七号信令或isdn pri(模擬訊號)之間的轉換。freeswitch中的閘道器可以理解成乙個sip**。通過sip**連線語音閘道器裝置或系統,將sip轉換成模擬訊號。簡化一下過程, freeswitch完成號碼的落地工作
其簡化後的過程大致如下:
opensips —-> freeswictch —-> 語音閘道器 —-> 運營商 —-> 手機或固話
對接的最終目的都是為了將通話轉到閘道器上,熟悉sip協議的都知道,其實就是發invite訊息。按照對接方式,分成認證和非認證。非認證又稱ip對接,或者sip中繼對接。簡單理解認證方式就是,freeswitch無法隨意的將呼叫送到閘道器上,需要經過閘道器的認證。非認證方式,只要知道閘道器位址,大家都可以發起invite。這裡可能涉及到安全問題,後面將詳細討論
註冊的sip伺服器
通常sip終端都需要註冊到某台sip伺服器上(就像手機要連線到基站),以實現撥出和呼入的功能
註冊在opensips上的sip終端發起的呼叫請求將傳送到opensips,opensips根據路由指令碼配置使用load_balancer(負載均衡)模組或dispatcher(排程模組)將呼叫請求**到其他sip伺服器或閘道器上。反之當sip伺服器或閘道器呼叫註冊在opensips上的終端時,會呼入到opensips(只有opensips有被叫sip終端的aor資訊),然後opensips再呼叫sip終端。這是就是乙個典型的註冊伺服器。
配置資訊
中繼配置
conf\sip_profiles\external
freeswitch需要建立乙個閘道器並註冊到閘道器裝置上。見下面配置:
簡單的介紹一些這幾個引數:
realm:網域名稱
username:認證的使用者名稱
password:認證的密碼
from-user:指定在sip訊息中的源使用者資訊,沒有配置則預設和username相同
from-domain:是指定域,它們會影響sip中的「from」頭域。
register:是否註冊
expire-seconds:註冊的間隔時間
這樣表示freeswitch作為乙個分機註冊到閘道器172.29.1.8上。
撥號規則
在freeswitch中比較重要的乙個部分就是diaplan了,diaplan撥號計畫簡單的來說就是一種號碼規則,他可以根據自己定義的規則,設定對應did(目標號碼)或者設定匹配的規則,每一步如何實現,都在這裡設定實現的,dialplan有多種方式實現,這裡我們主要使用預設xml dialplan方式。
xml dialplan撥號計畫由多個context組成,每個context中有多個extension。所以context就是多個extension的邏輯集合,它相當於乙個分組。乙個context的extension和其他context中的extension在邏輯上是隔離的
撥號規則:出局目錄
\conf\dialplan\default\
撥號規則:入局目錄
\conf\dialplan\public\
#dialplan的完整結構
<?xml version="1.0" encoding="utf-8"?>
extension
#extension相當於路由表的表項,其中每乙個extension都有乙個name屬性,name可以是任意合法的字串,本身對呼叫流程
#沒有任何影響,但給它取乙個好聽的名字有助於你在檢視log時發現它
continue="true"
#continue預設值是false,在false情況下condition匹配規則找到對應的extension,就執行對應的action,而不會再繼續
#再查詢其他的extension了;若continue="true"則所有滿足condition規則的action都能得到執行
condition
#在extension中可以對一些condition(測試條件)進行判斷,如果滿足測試條件所指定的表示式,則執行對應的action(動作)
#一般來說測試條件不可以巢狀,但可以疊加(疊加是邏輯與的關係),但freeswitch於2023年底加入了巢狀dialplan的支援
condition的break引數,為了方便討論我們假設有兩個條件a和b
break="on-false" #第乙個次匹配失敗時停止(但繼續處理其他的extension),這是預設配置,結果相當於a and b
break="on-true" #在第一次匹配成功時停止(但會完成對應的action,然後繼續處理其他extension)
#不成功則繼續,所以結果相當於((not a)and b)
break="always" #不管是否匹配都停止
break="never" #不管是否匹配,都繼續
action
anti-action
#執行反動作,如下**所示,符合條件就執行action的動作,不符合就執行anti-action動作
inline="true"
#正常情況下在hunting階段是只解析dialplan,不執行action,如果加上inline="true"這一屬性,則在hunting階段就會
#訪問某個變數,並且不能改變當前channel的狀態,當然inline也不是解決所有問題的****,由於它會打亂執行順序
#所以使用不當也可能會產生非預期的效果
在freeswitch中配置如下路由,當外呼時就可以將呼叫送至閘道器上了。然後由閘道器出局
其它情況
有時候會有這樣的場景,使用者會要求送指定的號碼,首先要向運營商申請外呼的號碼,freeswitch上實現外呼呼叫的方式為配置乙個閘道器,指定運營商的接入號和密碼,有呼叫這個號碼時,運營商會接收freeswitch送過來的號碼並指定給被呼叫方
總結
freeswitch的外呼場景主要通過配置閘道器註冊、撥號計畫來實現,實際上外呼中的呼叫、轉接、會議都要用到這兩個技術
閘道器如果在同一網段或者閘道器在freeswitch的外網的話(實際上就是說freeswitch可以直接訪問到閘道器),就採用freeswitch註冊到閘道器或者指向閘道器的方式,這也是常用的方式。 如果閘道器在內網,而freeswitch在外網的話,就只能採用內網閘道器註冊到freeswitch的方式。
撥號計畫是 freeswitch 中至關重要的一部分。它的主要作用就是對**進行路由(從這一點上來說,相當於乙個路由表)。說的簡明一點,就是當乙個使用者撥號時,對使用者所撥的號碼進行分析,進而決定下一步該做什麼。當然,實際上,它所能做的比你想象的要強大的多。
FreeSWITCH新增中文語音包
英文資源的路徑為conf sounds en us callie 與英文類似,中文資源的路徑為conf sounds zh cn set data sound prefix en us callie 可將英文音訊資源關閉 set data sound prefix zh cn sue 修改為中文音訊...
freeswitch連線postgres資料庫
1.安裝postgres資料庫,並啟動。省略安裝過程。2。在freeswitch所在伺服器安裝postgresql devel.3.配置修改和編譯。在modules.conf中開啟pg cdr vim modules.conf event handlers mod cdr pg csv在fs原始碼目...
Freeswitch連線SIP電話
本篇主要介紹如何用freeswitch連線sip freeshswitch最典型的應用是作為乙個伺服器 背靠背的使用者 並用 客戶端軟體 一般叫軟 連線到它。可以通過如下命令看下埠占用情況 freeswitch 預設配置了1000 1019共20個使用者,你可以隨便選擇乙個使用者進行配置。注意 密碼...