FreeSwitch連線語音閘道器配置及使用場景

2021-09-26 13:19:17 字數 3597 閱讀 6326

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個使用者,你可以隨便選擇乙個使用者進行配置。注意 密碼...