我正在使用 Asterisk IVR 进行组织内调查(我们的员工打电话来并通过按键回答一些问题)。按键会立即转储到数据库中,实际上并没有连接到扩展或 IVR 菜单结构。现在,我在没有任何 AGI 脚本的情况下执行此操作,如果可能的话,我希望保持这种状态。
例子:
[from-internal-custom]
exten => 1234,1,Answer
exten => 1234,2,Wait(1)
exten => 1234,3,Playback(custom/Welcome_message)
exten => 1234,4,Authenticate(0000)
exten => 1234,5,Goto(MyCustomApp,s,1)
[MyCustomApp]
exten => s,1,Set(TIMEOUT(digit)=7)
exten => s,n,Set(TIMEOUT(response)=10)
exten => s,n,Playback(custom/QA1)
exten => s,n,Read(QA1,beep,1,,3,5)
exten => s,n,SayDigits(${QA1})
exten => s,n,MYSQL(Connect connid 127.0.0.1 DB_USER DB_PASS DB_NAME)
exten => s,n,MYSQL(Query r ${connid} Insert Into question_answers SET question_id='0', user_id=${CALLERID(num)}, result=${QA1})
[... more questions and finally hangup ...]
现在的问题是,如果 QA1 的回放指示调用者“按 1 表示是或 2 表示否”,但用户按 3,则将 3 转储到数据库中,这显然没有帮助。如何限制每个问题的允许键?我确实知道“i”扩展名,但我想这不会让我到任何地方。有没有办法精确指定允许哪些键,哪些不允许?最好不用把我的头绕在 AGI 周围?有些问题是是/否问题,但其他一些问题有更多选项(“如果 x 小于 100 按 1,小于 200 按 2,小于 300 按 3”等等……)。
谢谢你的帮助!