在此实现中,我试图通过session.bridge()
命令在入站呼叫和出站呼叫之间调用修补程序。Freeswitch:如何确定是否在桥接入站和出站呼叫时应答呼叫?
我已经收到呼入呼叫,并且正在播放我的Python脚本。在这个脚本中,我试图用number_list(list of numbers)
中的号码逐个修补正在运行的呼叫,直到列表耗尽或者直到呼叫被修补并应答为止。
我的代码:
for cp_num in connObj.cp_list:
ivr_log.debug("Attempting to dial Call Patch Number:%s"%(cp_num['cp_no']))
connObj.patch_uuid = uuid.uuid1()
cmd_str = """{ignore_early_media=true,execute_on_answer=record_session %s/%s_%s.wav,origination_uuid=%s,originate_timeout=45,script_name=gaadi_test}freetdm/wp4/a/%s"""%(connObj.recording_path,connObj.uuid,connObj.caller_id,connObj.patch_uuid,cp_num['cp_no'])
connObj.bridge(cmd_str) #BRIDGE
connObj.hangup_cause = connObj.getVar("last_bridge_hangup_cause")
if connObj.hangup_cause in ['NORMAL_CLEARING', '']:
connObj.cp_status = "SUCCESS"
return True
connObj.cp_status = "FAILED"
connObj.playback(connObj.path_sound + 'all_reps_busy.wav')
return False
多个号码为连续拨号桥命令。 从FreeSWITCH的文档: 连续多个端点 - 没有限制的故障转移数量
bridge <target_endpoint>[|<target_endpoint>]
我实现
cmd1 = """{ignore_early_media=true,originate_timeout=45}[origination_uuid=%s,script_name=gaadi_test]freetdm/wp4/a/%s"""%(connObj.patch_uuid1,connObj.cp_list[0]['cp_no'])
cmd2 = """[origination_uuid=%s,script_name=gaadi_test]freetdm/wp4/a/%s"""%(connObj.patch_uuid2,connObj.cp_list[1]['cp_no'])
cmd = "%s[|%s]"%(cmd3,cmd4)
ivr_log.debug("CMD=%s"%(cmd))
connObj.call_patch_start_time = int(time.time())
connObj.patch_start_datetime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
connObj.bridge(cmd)
P.S:ConnObj.bridge(CMD)仅针对一个目标点的工作完美。
顺序拨号解决方案: 只是在cmd1和cmd2的一些变化。我还没有确认这两个电话的来源uuid是否会有所不同。
cmd1 = """{ignore_early_media=true,originate_timeout=45,script_name=gaadi_test}[origination_uuid=%s]freetdm/wp4/a/%s"""%(connObj.patch_uuid1,connObj.cp_list[0]['cp_no'])
cmd2 = """[origination_uuid=%s]freetdm/wp4/a/%s"""%(connObj.patch_uuid2,connObj.cp_list[1]['cp_no'])
cmd="%s|%s" #removed the brackets and its working now.
connObj.bridge(cmd)
编辑:
最后我解决了斯坦尼斯拉的方法的问题。我使用了api_on_answer。答案是我在磁盘上写了一个文件,然后检查文件是否存在。如果该文件存在,则该呼叫被回答。
我正在使用ESL。我有三个python文件。 ESL.py,其中我将_ESL导入为导入_ESL。 ivrlib.py其中我从ESL.py导入*导入ESL.py,然后导入ivr.py作为导入ivrlib导入ivrlib.py。我在上面的问题中添加了确切的代码。请看一看。 – MYGz
我正在尝试的另一件事是将n个参数传递给桥接命令中的freeswitch以进行顺序拨号,这对我来说只是解决方案,因为我不会在脚本中获得所有已解答呼叫的详细信息,但它仍然可以解决当列表尚未结束时,还存在一个突破问题。根据文档,代码应该可以工作,但不起作用。我在上面的问题中添加了该代码。 – MYGz
这只是解决方案的一半 – MYGz