freeswitch - FreeSwitch 请求 DTFM 并执行 CURL 请求。然后连接到会议
问题描述
我有以下拨号方案:
<extension name="public_did">
<condition field="destination_number" expression="^({{ $externalNumber }})$">
<action application="sleep" data="1000"/>
<action application="play_and_get_digits" data="9 9 3 5000 # welcome.wav error.wav ${confid}" />
<action application="event" data="Event-App-Type=READ-EXECUTED,Read-Result=${read_result}"/>
<action application="log" data="Read-Result=${read_result}"/>
<action application="play_and_get_digits" data="5 5 3 5000 # pin.wav pin-error.wav ${pin}" />
<action application="curl" data="https://example.com/do-freeswitch-dialin?id=${confid}&pin=${pin}" inline="true"/>
<condition field="${curl_response_code}" expression="500">
<anti-action application="set" data="conf=${curl_response_data}"/>
<action application="speak" data="There was an error! Please try again later!" />
<action application="hangup" data="500"/>
</condition>
<action application="conference" data="${conf}{{ '@' }}default"/>
</condition>
</extension>
这里的问题是 curl 在用户通过 DTFM 输入他的凭据之前被执行。正确的方法是什么?在此解决方案中,在加入之前执行 cURL 请求很重要。
解决方案
我通过LUA管理它。这是我的 XML 配置:
<extension name="public_did">
<condition field="destination_number" expression="^(12345)$">
<action application="answer" />
<action application="set" data="dtmf_type=rfc2833"/>
<action application="start_dtmf" />
<action application="lua" data="basic.lua"/>
</condition>
</extension>
在 /usr/share/freeswitch/scripts/basic.lua
session:sleep(500)
session:execute("playback", "ivr/ivr-douche_telecom.wav");
digits = session:playAndGetDigits(4, 10, 3, 3000, "#", "ivr/ivr-please_enter_the_number_where_we_can_reach_you.wav", "ivr/ivr-invalid_extension_try_again.wav", "\\d+", "digits_received", 1000,
"5000 XML default");
session:execute("playback", "ivr/ivr-thank_you.wav");
api = freeswitch.API();
get_response = api:execute("curl", "https://example/freeswitch-dialin?id=" .. digits);
api:execute("log", get_response);
api:execute("log", digits);
为我工作。重要的是设置 dtmf_type 以便来自 SIP 中继的来电也得到应答!
推荐阅读
- flutter - Stateful Widget 上的提供程序 - 参数类型问题
- c++ - 当 std::move 使用 c 样式数组或不可移动对象时会发生什么
- python - 从文本中删除 html,但
在 Python 中保留标签 - java - Picasso 无法在 android 10 中运行。为什么?
- dart - Dart 中用于非参数方法的 then() 语法
- c# - 为什么字符串没有转义?
- c# - 减去两个日期时间(TimeStamp)并与 lambda 查询中的时间间隔(int)进行比较
- c - C 预处理器宏扩展自身
- reactjs - 模拟 useState 挂钩以测试组件/将数据传递给我的测试
- ios - 定时器运行时为 CAShapeLayer 设置动画