2016-01-19 73 views
1

我知道讀命令獲取#終止的dtmf數字。但是,我怎樣才能讀取由星號字符終止的DTMF數字"*"? 例如,如果我必須輸入「092」,我按鍵盤上的「092 *」。如何閱讀*星號中的*終止的dtmf數字

+2

它總是3位數的擴展名嗎?如果您必須使用*作爲終止數字,您可以調用Read以循環方式收集1位數字。連接數字串,直到得到'*'。 –

+0

分機號碼不是固定長度,可以是3到6位數字。 – mqacim

回答

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 
+0

當我按照你的建議運行make命令時,所有的星號開始重新編譯。我怎樣才能確保只有app_read被重建? – mqacim

+0

編譯器配置可能已更改。如果讓它編譯一次,那麼只需修改一個文件,只有該文件(以及模塊依賴它)纔會重新編譯。我猜想自上次完整編譯以來,新版本的* -dev/* - devel軟件包已經安裝在操作系統上。 – viktike

1

你有2種方法

1)不明顯,但可以工作大部分時間。只需使用AGI getdata或dialplan Read命令閱讀一位數字即可。

2)創建app_read的分支並在代碼中將#改爲*。

1

在應用程序更改tmp[x-1] == '#'tmp[x-1] == '*'/app_read.c是必要的,但還不夠。

你可以做下列步驟操作:在應用

1.更換#與*/app_read.c:

// if (tmp[x-1] == '#'){ 
if (tmp[x-1] == '*'){ 
    tmp[x-1] = '\0'; 
    status = "OK"; 
    break; 
} 


2.替換#在主/ 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 


我已經完成了這些步驟,它爲我工作。