我知道读取命令获取#已终止的dtmf数字。但是如何读取以星号 "*"
结尾的dtmf数字?
例如,如果我必须输入" 092",请按" 092 *"从键盘。
答案 0 :(得分:1)
你有2种方法
1)不可行,但大部分时间都可以工作。只需使用AGI getdata或dialplan Read命令读取一位数字。
2)创建app_read的fork并在代码中将#更改为*。
答案 1 :(得分:1)
要修改行为,请参阅星号源目录中的 apps / app_read.c 。
if (tmp[x-1] == '#') {
tmp[x-1] = '\0';
status = "OK";
break;
}
将#替换为*。
您只需要重新编译该模块:
rm apps/app_read.o apps/app_read.so
make
cp -f apps/app_read.so /lib/asterisk/modules/
service asterisk restart
答案 2 :(得分:1)
在apps / app_read.c中将tmp[x-1] == '#'
更改为tmp[x-1] == '*'
是必要的,但还不够。
您可以执行以下步骤:
1.在apps / app_read.c中替换#和*:
// if (tmp[x-1] == '#'){
if (tmp[x-1] == '*'){
tmp[x-1] = '\0';
status = "OK";
break;
}
2.在main / app.c中替换#和*:
//res = ast_readstring_full(c, s, maxlen, to, fto, "#", audiofd, ctrlfd);
res = ast_readstring_full(c, s, maxlen, to, fto, "*", audiofd, ctrlfd);
//static const char default_acceptdtmf[] = "#";
static const char default_acceptdtmf[] = "*";
//res = ast_readstring(c, s, maxlen, to, fto, "#");
res = ast_readstring(c, s, maxlen, to, fto, "*");
3.重新编译星号:
sudo make clean
sudo make
sudo make install
我已经完成了这些步骤,它对我有用。