Jafucong's Blog - 2022年4月
type: channel
link: http://clx.fun/index.php/2022/04/
description: dotnet，FreeSWITCH，WEB，WPF，Linux，呼叫中心，SIP，软件开发技术交流
items: 0408.WebRTC通信
items: 0407.网关配置
items: 0406.外部配置文件(external.xml)
items: 0405.配置SIP相关
items: 0404.请求头和通道变量
items: 0403.其他设置
items: 0402.Sofia 命令
items: 0401.Sofia SIP
items: 0302.Switch.conf.xml
items: 0301.配置文件

0408.WebRTC通信
type: item
date: 2022-04-28T14:08:00+08:00
description: WebRTC 直接从更好的 Web 浏览器和设备提供实时通信，无需 Adob​​e Flash 或 Silverlight 等插件。WebRTC始终在安全模式下运行。FreeSWITCH 为其公共会议桥提供了一个WebRTC 门户，以展示通过网页处理电话的可能性；加入我们的每周电话会议。无论是用于经典 WebRTC 还是 FreeSWITCH Verto 端点，使用 WSS 证书配置 FreeSWITCH 的过程都是相同的。Debian 7最小化安装 Debian 7。mkdir -p /usr/local/freeswitch/certs edit /usr/local/freeswitch/conf/sip_profiles/internal.xml # Set these params and save the file: 如果在 NAT 之后，请确保将 vars.xml 中的ext-sip-ip和ext-rtp-ip设置为 FreeSWITCH 的公共 IP 地址。 如果与 NAT 内外的客户端通信，您必须设置local-network-acl为rfc1918.auto，并将ext-sip-ip和ext-rtp-ip前缀为autonat:XXXX安装证书/usr/local/freeswitch/certs/wss.pem的布局:Cert, Key and Chain(s) are all contained in a single file in this order: -----BEGIN CERTIFICATE----- <cert> -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- <key> -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- <chain> -----END CERTIFICATE-----启动 FreeSWITCH其他方法# Create certificates: wget http://files.freeswitch.org/downloads/ssl.ca-0.1.tar.gz tar zxfv ssl.ca-0.1.tar.gz cd ssl.ca-0.1/ perl -i -pe 's/md5/sha256/g' *.sh perl -i -pe 's/1024/4096/g' *.sh ./new-root-ca.sh ./new-server-cert.sh self.bkw.org ./sign-server-cert.sh self.bkw.org cat self.bkw.org.crt self.bkw.org.key > /usr/local/freeswitch/certs/wss.pem # Setup Apache: # default-ssl: SSLCertificateFile /usr/local/freeswitch/certs/wss.pem SSLCertificateKeyFile /usr/local/freeswitch/certs/wss.pem SSLCertificateChainFile /usr/local/freeswitch/certs/wss.pem # Setup Sofia TLS: cat self.bkw.org.crt self.bkw.org.key > /usr/local/freeswitch/certs/agent.pem cat ca.crt > /usr/local/freeswitch/certs/cafile.pem # vars.xml: <X-PRE-PROCESS cmd="set" data="internal_ssl_enable=true"/> <X-PRE-PROCESS cmd="set" data="external_ssl_enable=true"/> # Restart FreeSWITCH. ## Now make sure your system has ca.crt imported so it will trust your new found hotness. # TEST: openssl s_client -connect self.bkw.org:443 openssl s_client -connect self.bkw.org:5061 openssl s_client -connect self.bkw.org:5081 openssl s_client -connect self.bkw.org:8082 # Dependi…

0407.网关配置
type: item
date: 2022-04-27T14:11:00+08:00
description: 每个配置文件可以有多个网关：<gateways> <gateway> elements... </gateway> <gateway> elements... </gateway> </gateways>网关具有可以引用它的属性“名称”。网关描述了如何使用不同的 UA 到达目的地。例如，网关可以提供对 PSTN 或专用 SIP 网络的访问。定义网关的原因大概是因为网关需要某些信息才能接受来自 FreeSWITCH 用户代理的调用。变量可以在网关上定义。入站变量设置在从网关接收到的呼叫的通道上，出站变量设置在发送到网关的呼叫的通道上。示例:<gateway name="gateway012"> <variables> <variable name="verbose_sdp" value="true"/> <variable name="absolute_codec_string" value="PCMU,PCMA" direction="outbound"/> <variable name="customer_id" value="3532" direction="inbound"/> </variables> </gateway>要从拨号计划访问特定网关,请使用sofia/gateway/<gateway_name>/<dialstring>网关参数以下是作为 gateway 元素的子元素的 param 元素列表：register true或false （例如当您不想注册但想对网关进行身份验证时）schema （目前应留空，默认为摘要）realm （在某些情况下您可能需要设置授权领域）username （这是注册中的授权和来自用户名，除非设置了 from-user。）auth-username （这将是出站注册的身份验证用户名）password （以及密码）caller-id-in-from （当遥控器不执行 rpid 或 p-asserted 时，callerid 位于 from 中）extension （这是遥控器要联系的联系人分机号）extension-in-contact （这将在 SIP Contact 标头中发送扩展名）proxy （默认为网关名称，除非您设置此参数）context （此网关所在的上下文）expire-seconds （如果留空，默认注册多少秒为 3600）retry-seconds （设置重试注册的秒数）from-user （在 from 字段中使用的用户名默认为用户名，如果留空）from-domain （在 from 字段中使用的域）register-proxy （在那些时候你有一个你注册的代理和一个不同的代理来发送调用到默认网关名称或代理，如果留空）contact-params （额外的联系人参数，即 tport=tcp）register-transport （udp、tcp 或 tls，如果您启用了它） 注意：网关的用户名参数不要与配置文件设置配置中的用户名参数混淆！ 注意：扩展参数影响通道变量Caller-Destination-Number和destination_number的内容。如果为空，Caller-Destination-Number将始终设置为网关的用户名。如果它有一个值，Caller-Destination-Number将始终设置为此值。如果它的值为auto_to_user，则Caller-Destination-Number将填充值为${sip_to_user}，这意味着在呼入电话的情况下真实拨打的号码。 ping-min 的意思是“在宣布网关启动之前我们必须有多少成功的 ping”。ping-min和ping-max之间的间隔是网关标记为 UP 的“安全区域”。因此，例如，如果我们有 min 3 和 max 6，如果网关启动并且我们在 3、4、5、6 之间移动计数器，则网关将启动。如果从 6 开始，我们连续释放 4 个（所以计数器 == 2）ping，则网关将被宣布关闭。请注意，在 sofia 启动时，网关始终以 UP 启动，因此即使 ping-min > 1 也会启动。当网关关闭时，“正确”的方式就开始了。 当此配置文件充当另一个 UA 的客户端时，使用参数“注册”。通过注册，FreeSWITCH 通知其他 UA 其下落。这通常在 FreeSWITCH 希望其他 UA 发送 FreeSWITCH 调用，而其他 UA 期望这种注册时使用。如果 FreeSWITCH 仅将其他 UA 用作网关（例如，到 PSTN），则通常不需要注册。当您希望 FS 为标头 To 使用 distict AOR 注册时，使用参数“distinct-to”。需要正确设置相关参数。例如，如果您希望…

0406.外部配置文件(external.xml)
type: item
date: 2022-04-27T09:12:00+08:00
description: 外部配置文件(external.xml)概述默认情况下，FreeSWITCH 提供在端口 5080 上运行的外部配置文件。外部配置文件处理到 SIP 提供商的外部或出站注册。SIP 提供商向您发送呼叫，您通过外部配置文件向您的提供商发送呼叫。外部配置文件允许匿名呼叫，这是必需的，因为您的提供商永远不会向您进行身份验证以向您发送呼叫。随 FreeSWITCH 提供的 external 配置文件 (conf/sip_profiles/external.xml) 是了解有助于 NAT 穿越的两个非常重要的变量的一个很好的起点。这些都是： external_ 变量在 conf/vars.xml中配置。外部配置文件很重要，因为如果要设置端口转发则必须借助此文件。这使您可以方便的突破 NAT。如果您希望进行这种性质的通信，那么您应该考虑复制外部配置文件并创建特定于您的目的的专用配置文件并设置端口转发，以便该配置文件可以与外部实体发送和接收。除了更改使用的端口外，复制的外部配置文件版本几乎不需要修改。请参阅 一般 NAT 示例方案。请记住，当您更改此引用时，所有希望使用此上下文的设备都必须相应地引用它。例如，如果您创建一个名为 external5090 的配置文件并希望从中拨打电话，那么您应该将其引用为：/sofia/external5090/1234@blah.com参数配置参数包括关于配置文件的其他更一般的信息，包括 STUN 是否在使用中。请注意，配置参数在单词之间使用连字符“-”，而通道变量在单词之间使用下划线“_”。每个配置文件都有自己的设置元素。这不仅方便——可以设置一个配置文件使用 STUN，另一个配置文件使用不同的网关或在防火墙后面工作，而不使用 STUN——但它也很重要。这是因为每个配置文件都定义了一个 SIP 用户代理，并且每个 UA 都必须有自己唯一的“sip-port”。按照惯例，5060 是默认端口，但可以调用例如foo@sip.example.com :5070，因此您可以为每个单独的配置文件定义您喜欢的任何端口。Vanilla 配置包含 sofia.conf.xml 的完整示例以及注释：internal，external基本参数alias 别名 使 SIP 配置文件绑定到此 IP 和端口以及您的 SIP/RTP IP 和端口。shutdown-on-fail 故障关机 如果设置为 true 并且配置文件无法加载，FreeSWITCH 将关闭。如果您正在运行诸如 Pacemaker 和 OpenAIS 之类的管理一对 FreeSWITCH 节点并自动监控、启动、停止、重新启动和待机失败的节点，这将非常有用。它将确保特定节点不能在“部分启动”的情况下使用。user-agent-string 用户代理这会在您的服务器发送的所有 SIP 消息中设置 User-Agent 标头。默认情况下，这可能类似于“FreeSWITCH-mod_sofia/1.0.trunk-12805”。如果您不想宣传详细的版本信息，您可以简单地将其设置为“FreeSWITCH”甚至“Asterisk PBX”作为一个笑话。设置此值时要小心，因为某些字符（例如“@”）可能会导致其他 SIP 代理将您的消息视为无效而拒绝。 log-level 日志级别 debug 调试 sip-trace SIP跟踪 context 拨号方案上下文从 ip:port 来的呼叫将被发送到 此 配置文件 sip-port SIP端口为 SIP 流量绑定的端口： sip-ip SIP IP地址为 SIP 流量绑定的 IP 地址。不要使用主机名，只使用 IP 地址。 或者，从 1.6 版开始，可以指定接口和可选地址族而不是 IP，对于 rtp-ip 也是如此。 rtp-ip rtp流IP地址为 RTP 流量绑定的 IP 地址。不要使用主机名，只使用 IP 地址 多个 rtp-ip 支持：如果添加了更多 rtp-ip 参数，它们将随着新呼叫的进行而循环使用。在撰写本文时，Windows不支持IPv6 地址ext-rtp-ip rtp流公网IP这是从 Internet 上看到 FreeSWITCH 背后的 IP，所以如果 FreeSWITCH 在 NAT 之后，这基本上是应该用于 RTP 的公共 IP。允许的值为：ext-rtp-ip描述例子$${variable}vars.xml 中的任何变量 w.x.y.z特定数字 IP 地址 autonat:w.x.y.z用于 LAN 和 WAN，以避免发送到 LAN 设备的 SIP CONTACT 错误 auto猜测IP（通过查看IP路由表猜测哪个接口是默认路由） auto-natFS 使用 uPNP 或 NAT-PMP 来发现它应该…

0405.配置SIP相关
type: item
date: 2022-04-26T09:21:00+08:00
description: SIP 配置在三个不同的配置文件中进行。vars.xml在此文件中，您只需指定一个参数。该参数是 $${domain}。此参数应包含电话/用户代理在注册时使用的域名（或类似 IP 地址的文本字符串）。此外，您可以将“hold_music”频道变量设置为波形文件路径或“indicate_hold”（在保持时发送重新邀请）。sip_profiles/internal.xml此文件包含 SIP 特定信息，例如您拥有哪些提供商（用于拨打外部电话）以及注册过程应如何工作。默认情况下，所有电话都可以注册。由于我们只想允许注册的手机使用我们的通信能力，我们需要更改名为“accept-blind-reg”的参数。(?) directory/default.xml最后要做的是指定哪些用户可以注册自己。这是在“目录”目录中完成的。密码可以以明文或 A1 哈希（“用户名：域：密码”的 MD5 字符串）形式发送。密码也是可选的，但请注意始终必须指定 params 标签，否则将找不到用户。<domain name="$${domain}"> <user id="arne"> <params></params> </user> <user id="arnepw"> <params> </params> </user> </domain>另请注意，我已将域名更改为 $${domain} 以匹配 FreeSwitch.xml 中的字符串。这样，只需要在更改域时更改FreeSwitch.xml即可。高级用法您可以为 FreeSWITCH 提供您自己的目录（由网络服务器动态生成）。这是通过使用 mod_xml_curl 模块完成的。有关其他信息，请查看此处： mod_xml_curl

0404.请求头和通道变量
type: item
date: 2022-04-25T14:05:00+08:00
description: 添加请求标头您可以通过将字符串sip_h_添加到任何通道变量的前缀来向出站 SIP 呼叫添加任意标头，例如：<action application="set" data="sip_h_X-Answer=42"/> <action application="bridge" data="sofia/mydomain.com/1000@example.com"/>请注意，对于 BYE 请求，您需要在通道变量上使用前缀sip_bye_h_。虽然不是必需的，但您应该在标头前加上“X-”以避免与其他 SIP 堆栈的互操作性问题。所有入站 SIP 呼叫都会将任何 X- 标头安装到本地变量中。这意味着您可以轻松地将任何 X-header 从一个 FreeSWITCH 实例桥接到另一个实例。要访问上面第二个框的标题，请使用通道变量 ${sip_h_X-Answer}重要的是要注意语法 ${sip_h_custom-header}不能用于检索任何不以 X- 开头的自定义标头。这是因为 Sofia 只读取并放入以 X- 开头的自定义标头变量。添加响应标头可以设置三种类型的响应头前缀：响应头sip_rh_临时响应标头sip_ph_Bye响应头sip_bye_h_每个前缀将专门为其给定类型的请求添加标头没有“全局”响应标头前缀将来所有响应消息添加标头。例如：<action application="set" data="sip_rh_X-Reason=Destination Number Not in Footprint"/> <action application="set" data="sip_bye_h_X-Accounting=Some Accounting Data"/>SIP 消息如下：INVITE sip:19099099099@1.2.3.4 SIP/2.0 Via: SIP/2.0/UDP 5.6.7.8:5080;rport;branch=z9hG4bKyg61X9v3gUD4g Max-Forwards: 69 From: "DJB" <sip:2132132132@5.6.7.8>;tag=XQKQ322vQF5gK To: <sip:19099099099@1.2.3.4> Call-ID: b6c776f6-47ed-1230-0085-000f1f659e58 CSeq: 30776798 INVITE Contact: <sip:mod_sofia@5.6.7.8:5080> User-Agent: FreeSWITCH-mod_sofia/1.2.0-rc2+git~20120713T162602Z~0afd7318bd+unclean~20120713T184029Z Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, REGISTER, REFER, NOTIFY Supported: timer, precondition, path, replaces Allow-Events: talk, hold, conference, refer Content-Type: application/sdp Content-Disposition: session Content-Length: 229 P-Charge-Info: <sip:2132132132@5.6.7.8>;npi=0;noa=3 X-FS-Support: update_display,send_info. Remote-Party-ID: "DJB" <sip:2132132132@5.6.7.8>;party=calling;screen=yes;privacy=off剥离单个 SIP 标头有时 SIP 提供商会添加额外的标头信息。大多数时候，他们这样做是为了自己使用（跟踪呼叫）。但是这些额外的信息会导致很多问题。在某些情况下，我们将此呼叫直接桥接到第三方系统时呼叫被丢弃，因为第三方系统不接受此标头，因此我们必须剥离那些 SIP 标头。<action application="unset" data="sip_h_X-voipnow-did"/> <action application="unset" data="sip_h_X-voipnow-extension"/>剥离所有自定义 SIP 标头如果您希望剥离所有自定义标头，同时仅保留拨号方案中定义的标头：<action application="set" data="sip_copy_custom_headers=false"/> <action application="set" data="sip_h_X-…

0403.其他设置
type: item
date: 2022-04-25T09:32:00+08:00
description: 同一分机多次注册呼叫一个分机并振铃多个电话您必须在conf/sip_profiles/internal-ipv6.xml和conf/sip_profiles/internal.xml中启用多个注册（在 conf/autoload_configs/switch.conf.xml 中的设置无效）。此参数的有效值为 "contact"、"true"、"false"、" call-id"。 将此值设置为“contact”将删除基于 sip_user、sip_host 和联系人字段的旧注册，而不是 call_id。振铃所有注册的分机在您的拨号方案 ( conf/dialplan/default.xml ) 中，您现在可以使用sofia_contact查找函数返回所有已注册的 sip 配置文件；例如，在<extension name="Local_Extension">和<extension name="extension-intercom">部分中的default.xml替换：<extension name="extension-intercom"> <condition field="destination_number" expression="^8(10[01][0-9])$"> <action application="set" data="dialed_extension=$1"/> <action application="export" data="sip_auto_answer=true"/> <!-- <action application="bridge" data="user/${dialed_extension}@${domain_name}"/> --> <action application="bridge" data="${sofia_contact(${dialed_extension})}"/> </condition> </extension>FreeSWITCH 1.0.1 及更高版本可以通过在目录中将变量sip-allow-multiple-registrations设置为“false”来禁用每个用户的多个注册。在这种情况下，将不允许该单个用户使用多个注册。max-registrations-per-extension 可以设置分机最大注册数< param name="max-registrations-per-extension" value="1"/>更多信息请参见Sofia配置文件终止注册。您可以从 CLI 或任何接受 API 命令的地方终止注册，使用类似于以下的命令：sofia profile <profile_name_here> flush_inbound_reg [optional_callid]

0402.Sofia 命令
type: item
date: 2022-04-22T09:44:00+08:00
description: 命令呼叫远程 SIP 服务器上的分机基本形式：sofia/<profile>/<extension>@<remoteserver>示例 1：sofia/$${profile}/$1@example.org示例 2：sofia/foo/0@sipphone.com其中<profile>是 sofia.conf.xml 中定义的配置文件之一的名称。默认情况下，有一个配置文件定义为 name="$${domain}"，其中 $${domain} 变量在 freeswitch.xml 中定义，默认为 mydomain.com。因此，如果您没有更改这些配置文件并且正在拨打远程服务器上的分机，那么配置将是sofia/ mydomain.com / <extension> @ <remoteserver> 要列出所有定义的配置文件，请在 CLI 上键入sofia status 。呼叫本地注册的端点基本形式：sofia/<profile>/<extension>%<localserver>示例 1：sofia/$${profile}/$1%$${domain}示例 2：sofia/foo/101%192.168.1.1其中 foo 是 SIP 配置文件，101 是注册端点的用户 ID，192.168.1.1 是 FreeSWITCH 的 IP 地址。如果您的 SIP 配置文件名称设置为您的域，或者在配置文件中设置了域属性（例如，<profile name="internal" domain="$${domain}">），您可以使用以下内容：sofia/<profile>/<extension>并在拨打本地分机时放弃域。刷新和重新启动注册的端点您可以通过从控制台发出 flush_inbound_reg 命令来刷新注册或重新启动特定的注册端点。sofia profile <profile_name> flush_inbound_reg [<call_id>|<user@host>] [reboot]如果您省略 <call_id> 和/或 <user@host>，您将刷新/重新启动配置文件上的每个注册端点。 您还可以使用 check_sync 命令：sofia profile <profile_name> check_sync <call_id> | <user@domain>创建新配置如果您创建了一个新配置文件，您需要从控制台启动它：sofia profile <new_profile_name> start重新加载配置文件和网关您可以通过从控制台发出 killgw 命令来删除特定网关。如果使用 _all_ 作为网关名称，所有网关都将被杀死sofia profile <profile_name> killgw <gateway_name>重启网关您可以通过从控制台发出 killgw 命令，然后重新扫描配置文件来强制重启网关（适用于强制重新注册或类似操作）。在具有活动呼叫的配置文件上执行此操作是安全的。sofia profile <profile_name> killgw <gateway_name> sofia profile <profile_name> rescan添加/更改现有网关假设您在 /usr/local/freeswitch/conf/sip_profiles/external 目录中拥有所有网关，并且您刚刚创建了一个新条目。您可以通过从控制台发出 rescan reloadxml 命令来将新网关添加到 FreeSWITCH，如下例所示。这将加载新创建的网关，并且不会影响当前启动的任何呼叫。sofia profile external rescan reloadxml您现在意识到您搞砸了新网关中的 IP 地址，需要更改它。因此，您编辑网关文件并进行所需的任何更改。然后，您需要发出以下命令来销毁网关，然后让 FreeSWITCH 重新加载更改，同时影响当前启动的任何现有调用。sofia profile external killgw <gateway_name> sofia profile external rescan reloadxml查看 SIP 注册您可以通过从控制台运行以下命令来查看所有已注册的设备。sofia status profile <profile name> reg sofia status profile default reg sofia status profile outbound reg您还可以使用 xmlstatus 来以 XML 格式检索状态。如果您使用 mod_xml_rpc，这将特别有用。sofia xmlstatus profile <profile name> reg sofia xmlst…

0401.Sofia SIP
type: item
date: 2022-04-21T11:58:00+08:00
description: Sofia 是 FreeSWITCH 使用的 SIP栈。 当您在配置中的任何位置看到“sofia”时，请考虑“这是 SIP 内容”。SIP 是一个疯狂的协议，如果你不小心，它也会让你发疯。继续阅读有关在 FreeSWITCH 配置中设置 SIP/Sofia 的信息。mod_sofia 公开 Sofia API 并设置 FreeSWITCH SIP 端点。端点FreeSWITCH 端点代表一个完整的用户代理，并控制处理呼叫所需的信令协议和媒体流。端点类似于坐在您办公桌上的物理 VoIP 电话。它向外界讲述特定协议，例如 SIP 或 Verto，并为 FreeSWITCH 核心解释该协议。配置文件sofia.conf.xml 包含 mod_sofia 的配置设置调试 Sofia-SIPSofia-SIP 组件可以输出各种调试信息。调试输出的细节由调试级别决定。该级别通常是特定于模块的，并且可以通过特定于模块的环境变量进行修改。所有模块还有一个默认级别，由环境变量#SOFIA_DEBUG 控制。控制日志记录和其他调试输出的环境变量如下：SOFIA_DEBUG 默认调试级别 (0..9)NUA_DEBUG 用户代理引擎 (nua) 调试级别 (0..9)SOA_DEBUG SDP Offer/Answer 引擎 (soa) 调试级别 (0..9)NEA_DEBUG 事件引擎 (nea) 调试级别 (0..9)IPTSEC_DEBUG HTTP/SIP 认证模块调试级别 (0..9)NTA_DEBUG 事务引擎调试级别 (0..9)TPORT_DEBUG 传输事件调试级别 (0..9)TPORT_LOG 如果设置，在传输层打印出所有解析的 SIP 消息TPORT_DUMP 文件名，用于从传输中转储未解析的消息SU_DEBUG su 模块调试级别 (0..9)定义的调试输出级别是：0 SU_DEBUG_0() - 致命错误，1 SU_DEBUG_1() - 严重错误，子系统级别的最小进度2 SU_DEBUG_2() - 非严重错误3 SU_DEBUG_3() - 警告、进度消息5 SU_DEBUG_5() - 信令协议动作（传入数据包，...）7 SU_DEBUG_7() - 媒体协议操作（传入数据包，...）9 SU_DEBUG_9() - 进入/退出函数，非常逐字逐句的进展从 1.0.4 开始，这些参数可以通过以下方式从控制台控制sofia loglevel <all|default|tport|iptsec|nea|nta|nth_client|nth_server|nua|soa|sresolv|stun> [0-9]"all" 将改变每个组件的日志级别日志级别 0 会关闭调试，要将它们全部关闭，您可以这样做sofia loglevel all 0要报告错误，您可以打开更详细的调试sofia global siptrace on sofia loglevel all 9 sofia tracelevel alert console loglevel debug fsctl debug_level 10您还可以在 FreeSWITCH 客户端应用程序 fs_cli 中控制 SIP 调试输出。sofia profile <profilename> siptrace on|off在较新的软件版本上，您现在可以为所有配置文件发出 siptrace：sofia global siptrace [on|off]要将 SIP 调试详细信息放在 /usr/local/freeswitch/log/freeswitch.log 文件中，请使用sofia tracelevel info （或任何其他日志级别名称或编号）要在启动时自动将 SIP 详细信息放入日志文件，请将其添加到 sofia.conf.xml：<global_settings> ... ... </global_settings>以及 sip 配置文件 xml 文件的以下内容：<profiles> ... <profile name="..."> ... ... </profile> ... </profiles>配置文件相关访问控制列表您可以使用 sofia 配置文件中的以下选项，通过 IP 地址限制 REGISTER 或 INVITE（或两者）的访问。<param name="apply-inbound-acl" value="<acl_list|cidr>"/> <param name="apply-register-acl" value="<acl_list|cidr>"/>有关其他访问控制，请参阅ACL 列表配置见acl.conf.xml禁用保持禁止此配置文件上的所有呼叫将呼…

0302.Switch.conf.xml
type: item
date: 2022-04-21T09:57:00+08:00
description: FreeSWITCH 核心配置包含在autoload_configs/switch.conf.xml 中核心参数core-db-dsn允许使用 ODBC 数据库而不是 sqlite3 作为 freeswitch 核心数据库。格式dsn:user:passmax-db-handles同时打开的数据库句柄的最大数量db-handle-timeout失败前等待新数据库句柄的最大秒数disable-monotonic-timing(bool) 禁用单调定时器/时钟支持，如果它在您的系统上损坏。enable-use-system-time使 FreeSWITCH 使用系统时间。events-use-dispatch 布尔值如果设置为 true，则指示 FreeSWITCH 事件分派器使用在 initial-event-threads 中指定的线程数来分派事件。这在负载很重的系统上很有用。如果指定了 initial-event-threads，则在 switch_core.c 中 events-use-dispatch 会自动切换为 trueinitial-event-threads 整数要在核心中分配的事件调度线程数。默认值为 1。如果您在负载较重的服务器上看到警告“创建附加事件调度线程”，您可以增加线程数以防止系统落后。最大值为 runtime.cpu_count / 2loglevel日志中显示的详细信息级别max-sessions限制 FreeSWITCH™ 系统上的最大并发通道数。sessions-per-second节流机制，交换机每秒最多只能创建这么多并发数。rtp-start-portRTP 端口范围开始rtp-end-portRTP 端口范围结束dialplan-timestamps将时间戳添加到拨号计划日志行（对日志相关性和其他统计信息有用）。 min-idle-cpu指定 FreeSWITCH 将拒绝额外调用的最小 CPU 空闲比例。min-idle-cpu 指定为其他进程保留指定百分比的 CPU 空闲值。此设置可避免 FreeSWITCH 进程耗尽 CPU 时间。如果 min-idle-cpu 设置为 25 并且 FreeSWITCH 处理导致 CPU 空闲时间下降到 25% 以下，那么 FreeSWITCH 将拒绝处理额外的通话请求以允许其他进程有足够的 CPU 时间可用。Variables变量变量是在每个通道上自动设置的默认通道变量。示例<configuration name="switch.conf" description="Modules"> <settings> </settings> <variables> <variable name="uk-ring" value="%(400,200,400,450);%(400,2200,400,450)"/> <variable name="us-ring" value="%(2000, 4000, 440.0, 480.0)"/> <variable name="bong-ring" value="v=4000;>=0;+=2;#(60,0);v=2000;%(940,0,350,440)"/> </variables> </configuration>

0301.配置文件
type: item
date: 2022-04-20T09:56:00+08:00
description: 配置文件FreeSWITCH™ 配置数据以 XML 格式存储。这些文件位于 FreeSWITCH™ 安装目录下的 conf 目录中。FolderDescriptionautoload_configs这些配置文件会自动加载到 FreeSWITCH。它们包含几乎所有核心​​模块的配置信息。dialplan这是您设置拨号方案的地方。有一些示例说明如何配置您的拨号方案。directory该目录包含所有可以注册和使用 freeswitch 作为他们的 PBX 的用户。jingle_profilesJingle 是 FS 用来处理 XMPP 的 mod。配置文件告诉 FS 如何使用该协议。每个配置文件都有自己的 IP 端口。lang告诉 FS 如何用不同的语言说货币等mrcp_profilesMRCP 用于允许 FreeSWITCH 使用语音识别和 TTSsip_profiles告诉 FS 如何运行 sip。每个配置文件都有自己的端口。默认值vars.xml/etc/freeswitch/vars.xml 用于定义系统范围的变量。重要变量vars.xml 中定义的重要变量包括：outbound_caller_name - 拨打电话时电话中显示的姓名outbound_caller_number - 拨打外线电话时手机中显示的号码domain - 用户目录中的条目注册的 IP 地址或 DNS 名称。这通常是 FreeSWITCH 本身。external_rtp_ip 和 external_sip_ip - 此 FreeSWITCH 系统的公共 IP 地址。最安全的是使用 IP 地址而不是 DNS，以防设备无法解析域。autoload_configsautoload_configs 是许多 freeswitch 配置所在的目录。该目录位于 conf/autoload_configs 中。默认的 freeswitch.xml 文件将加载 conf/autoload_configs/*.xml 匹配的所有XML文件。modules.conf.xmlmodules.conf.xml 告诉 freeswitch 要加载哪些模块。操作需要某些模块，因此除非您知道要添加或删除特定模块，否则不应编辑此文件。 有关modules.conf.xml 的示例，请参阅 modules。 pre_load_modules.conf.xml 需要配置一些自 FreeSWITCH 1.10 起无法设置的核心模块 modules.conf.xml ，例如 mod_pgsql .例如将核心Core配置为使用pgsql数据库，由于Core启动与modules.conf.xml所有模块加载之前，所以需要单独的预加载模块配置文件。sofia.conf.xmlmod_sofia用于在 FreeSWITCH 中创建 SIP 端点。 该sofia.conf.xml文件包含一个指令，该指令包括定义一个或多个“SIP 配置文件”X-PRE-PROCESS的其他 XML 文件（默认情况下，在conf/sip_profiles/内）。SIP Profile 是一个 SIP UA（用户代理或端点），它与其他 SIP 端点进行通信。 实际上，与您的服务提供商对话的文件应该位于conf/sip_profiles/external/，命名为provider_name.com.xml. “用户代理”（“UA”）是用于运行特定网络协议的应用程序。Sofia 用户代理使用 SIP 协议。 有关示例，请参见 Sofia 配置文件sofia.conf.xml。SIP 配置文件SIP 配置文件允许您定义可能存在于网络内部或外部的设备或运营商的路径。FreeSWITCH 配置文件被定义为 IP 地址和端口号的唯一组合。您可以为内部网络设置 SIP 配置文件，或为内部网络的每个子网设置多个配置文件，甚至可以将完全不同的协议（如 IPv6）作为配置文件定义。这有助于 FreeSWITCH 在必要时确定如何路由不同类型的呼叫，并让您可以灵活地根据呼叫的来源或目的地定制拨号方案。在 Vanilla 示例配置中，有两个默认类别用于 SIP 配置文件可以驻留的位置，名为“内部”和“外部”，每个类别都服务于广泛的通用目的。外部 SIP 配置文件(External SIP profile)通常用于与您的 PSTN 网关或“SIP 中继”服务提供商进行通信，例如 移动、联通 或通过 SIP 向您提供电话服务的落地运营商公司。内部 SIP 配置文件(Internal SIP profile)用于与本地网络上注册 FS 的设备进行通信。配置文件名称“内部”和“外部”纯粹是任意的，仅作为示例提供。您可以将配置文件命名为任何便于管理 Free…