永发信息网

如何向通话的另一方号码发送dtmf

答案:1  悬赏:80  手机版
解决时间 2021-01-19 07:45
如何向通话的另一方号码发送dtmf
最佳答案
解决方法:
通过执行FreeSWITC的API命令,可以获取另一条信道的信息,如下:
show channels like 66903@ as xml

在该命令的返回值中抽取sent_callee_num,即为另一方的号码。
下面是具体的实现方法:
[plain] view plaincopy--根据一方号码获取另一条腿的UUID function getOtherLegUUID(api,num) local uuid; local res=api:executeString("show channels like "..num.."@ as xml") ----判断获取的channel信息是否为空 --fslog("debug","show channels res",res); --如果channel信息不为空 if res and string.len(res) >0 then local _,_, sendCalleeNum = string.find(res,"(.-)<%/sent_callee_num>"); if sendCalleeNum then uuid = getUUIDByNum(api,sendCalleeNum); end end return uuid; end

2、如何向另一方号码发送dtmf?
解决方法:
该问题比较容易处理,只需要调用uuid_send_dtmf方法即可。前提条件是获取到那个信道的UUID。
具体代码
下面是完整的脚本代码,仅供参考:
[plain] view plaincopy-- --脚本名称:send_dtmf_toleg.lua --脚本参数: -- argv[1] 当前通话的号码 -- argv[2] 待发送的dtmf信息 --脚本功能: -- 根据当前通话的号码,查出另一条腿的uuid,然后向该uuid发送dtmf --作者: 默言 2013-11-24 -- --输出freeeswitch日志 function fslog(loglevel,logtitle, logbody) loglevel = loglevel or "debug"; logtitle = logtitle or ""; logbody = logbody or ""; freeswitch.consoleLog(loglevel, "\n" .. argv[0] .. " : " .. logtitle .. "{" .. logbody .. "}\n"); end --获取号码对应的uuid --参数:num, 待查询号码 --返回:号码对应的通道的uuid function getUUIDByNum(api, num) local uuid; local res=api:executeString("show channels like "..num.."@ as xml") if res then --使用正则表达式从字符串中截取uuid --'-'代表最短匹配 _,_,uuid = string.find(res,"(.-)<%/uuid>") end fslog("debug","getUUID:" .. num, uuid); return uuid; end --根据一方号码获取另一条腿的UUID function getOtherLegUUID(api,num) local uuid; local res=api:executeString("show channels like "..num.."@ as xml") ----判断获取的channel信息是否为空 --fslog("debug","show channels res",res); --如果channel信息不为空 if res and string.len(res) >0 then local _,_, sendCalleeNum = string.find(res,"(.-)<%/sent_callee_num>"); if sendCalleeNum then uuid = getUUIDByNum(api,sendCalleeNum); end end return uuid; end do local legNum=argv[1]; --待发送的dtmf信息 local dtmfs = argv[2]; fslog("debug","start to send dtmf, legnum",legNum); fslog("debug","need send dtmfs", dtmfs); if legNum and tonumber(legNum) then api=freeswitch.API(); uuid=getOtherLegUUID(api, legNum); if uuid then local cmd = "uuid_send_dtmf " .. uuid .. " " .. dtmfs; fslog("debug","send_dtmf cmd", cmd); api:executeString(cmd); else fslog("warning","cannot get another leg uuid",""); end else fslog("warning","invalid parameters",""); end end
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
谁看电影看得最多
联通3G卡怎么老是跳网
维坊有高铁吗?
原型验证系统,什么是原型验证系统
健身房七月份销售工作计划书
用自己的身份证去证券公司开户,当充场人员,
现在银行秋季招聘开始了么,公告哪里去看?
川丁鱼怎么做如何做好吃
从键盘上输入若干个学生的成绩,当成绩小于等
两山居是什么意思
单选题家鸽在啄食时,常吃进一些砂粒,其作用
在检测锁阳中黄酮的含量时,做加标回收实验时
求类似《我的徒弟又挂了》的长篇女主小说,急
云有哪些组词?
器官交易合法化的支持观点
推荐资讯
大库高通物流地址在什么地方,我要处理点事!
龙高L2的品种介绍
《目标职业分析怎么写》
直径4毫米钢丝绳一米多重
从江西景德市到宁夏银川最近的火车路线
自吸和涡轮哪个耐用
有个很忙的男票,在他心里工作永远第一位,怎
二战期间为什么能卷入那么多的国家参战
你们好实达nx-510打印机安装驱动后无法使用请
单选题近几年中央电视台《百家讲坛》掀起了一
材料一:变法之本,在育人才;人才之兴在开学
潍柴336是什么发动机
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?