2017-03-06 28 views
1

我試圖使用基於mysql響應的條件進行撥號方案。我想要實現的是當用戶撥打他的語音郵件腳本來檢查是否有任何留言留給他/她。如果沒有消息轉到其他菜單或其他菜單。星號 - 如果用戶不存在於mysql中,轉到撥號方案的不同步驟

所以我有這個簡單的shell腳本check.sh

#!/bin/bash 
# Check if user has any messages left to him 

count=$(mysql -u mysql -pMYPASS -h xxx.xxx.xxx.xxx asterisk -se "select count(mailboxuser) from voicemessages where mailboxuser=8785;") 

if [ $count -gt 0 ] 
then 
    //echo " greater that 0 " 
else 
    //echo " lower than 0 " 
fi 

到目前爲止

[internal] 
exten => 119,1,Set(CHANNEL(language)=en) 
same => n, System(check.sh ${CALLERID}) 
same => n,VoicemailMain(${CALLERID(num)}@VoiceMail) 
same => n,Hangup 

當我打電話給119我在控制檯中看到撥號方案這個

- - 執行[119 @ internal:1]在新堆棧中設置(「SIP/8785-00000058」,「CHANNEL(language)= en」)

- 執行[119 @內部:2]系統( 「SIP/8785-00000058」, 「8785 check.sh」)在新的堆棧

- 執行[119 @內部:3] VoiceMailMain(」 SIP/8785-00000058" ,‘8785 @語音郵件’)在新的堆棧

與查詢我只是想檢查是否大於0。如果是較大的,這意味着用戶有1+消息。問題是如何在此撥號方案中獲取響應並正確構建if/then/gotoif條件。第一次處理這個,我不知道如何做到這一點。

當我在控制檯中運行它,我已經得到了響應這樣這是正確的

*CLI> !/var/lib/asterisk/agi-bin/check.sh 
lower than 0 

而且這是這樣做的正確的方式或者有一些其他的方式?

更新

現在我有這個在我的func_odbc.conf

[EXIST] 
dsn=asterisk 
readsql=SELECT COUNT(mailboxuser) FROM voicemessages WHERE mailboxuser='${SQL_ESC(${ARG1})}' 

然後這在我的擴展

[internal] 

exten => 119,1,Set(CHANNEL(language)=en) 
same => n,GotoIf($[${ODBC_EXIST(${CALLERID(num)})}]?${test:4},1:${MAINMENU:3},1) 
same => n,VoicemailMain(${CALLERID(num)}@VoiceMail) 
same => n,Hangup 


[test] 
exten => _[a-z].,1,Set(SAFE_EXTEN=${FILTER(0-9,${EXTEN})}) 

當我和號碼打電話給存在於DB我已經根據我的理解,我應該在控制檯ou中看到上下文[test]輸,對不對?我弄錯了什麼?在新的堆棧

集( 「SIP/8785-00000061」, 「CHANNEL(語言)= EN」) - 執行[119 @內部: -

執行[1 119 @內部]: 2] GotoIf( 「SIP/8785-00000061」, 「0,1:?,1」)在新的堆棧

- 後藤(內部,119,1)

- 執行[119 @內部:1]在新堆棧中設置(「SIP/8785-00000061」,「CHANNEL(language)= en」)

- 執行[119 @ internal:2] GotoIf(「SIP/8785-00000061「,」0?,1:,1 「)在新的堆棧

- 後藤(內部,119,1)

- 執行[119 @內部:1]集(」 SIP/8785-00000061" ,「信道(語言)= EN 「在新的堆棧

) - 執行[119 @內部:2] GotoIf(」 SIP/8785-00000061" , 「0,1:在新的堆棧,1」)

- Goto(internal,119,1)

回答

1

系統命令不會返回任何內容到星號

你有使用AGI接口或(更好)使用func_ODBC來檢查用戶。

+0

感謝您的回答。你的意思是直接在dialplan中使用查詢更好嗎? – VLS

+0

在func_odbc.conf中有一個例子'如果我嘗試使用這個命令'readsql = SELECT location FROM presence WHERE id ='$ {SQL_ESC($ {ARG1})}''你可以給我看一個goto不同上下文的例子,這取決於結果? – VLS

+0

https://www.voip-info.org/wiki/view/Asterisk+func+func_odbc請參閱gotoIF示例。 – arheops