我正在尝试使用基于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] Set(“SIP / 8785-00000058”,“CHANNEL(language)= en”)
- 在新堆栈中执行[119 @ internal:2]系统(“SIP / 8785-00000058”,“check.sh 8785”)
- 在新筹码中执行[119 @ internal:3] VoiceMailMain(“SIP / 8785-00000058”,“8785 @ VoiceMail”)
使用查询我只想检查是否大于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中的EXIST调用时,我得到了无限循环...根据我的理解,我应该在控制台输出中看到上下文[test]
,对吧?我在这里搞砸了什么?
- 在新堆栈中执行[119 @ internal:1] Set(“SIP / 8785-00000061”,“CHANNEL(language)= en”)
- 在新堆栈中执行[119 @ internal:2] GotoIf(“SIP / 8785-00000061”,“0?,1:,1”)
- 转到(内部,119,1)
- 在新堆栈中执行[119 @ internal:1] Set(“SIP / 8785-00000061”,“CHANNEL(language)= en”)
- 在新堆栈中执行[119 @ internal:2] GotoIf(“SIP / 8785-00000061”,“0?,1:,1”)
- 转到(内部,119,1)
- 在新堆栈中执行[119 @ internal:1] Set(“SIP / 8785-00000061”,“CHANNEL(language)= en”)
- 在新堆栈中执行[119 @ internal:2] GotoIf(“SIP / 8785-00000061”,“0?,1:,1”)
- 转到(内部,119,1)
答案 0 :(得分:1)
系统命令不会向星号返回任何内容。
您已使用AGI接口或(更好)使用func_ODBC来检查用户。