опрос.
нужно сделать опрос 3 вопроса по три ответа с записью ответа и номера звонящего в бд.
Сообщений: 5
|
опрос.
собстввенно все в описании описал, привожу кусок кода, проблема в том, что дальше скрипта, который заносит результаты в бд дело не идет. поэтому больше одного вопроса реализовать не получается, а это не айс.
может ктото скажет как завтавить эту конструкцию работать, или есть какие то стандартные способы решения моей проблемы?
заарнее благодарен всем за помощь!
exten => s,1,Answer
exten => s,2,Set(TIMEOUT(response)=5)
exten => s,3,Background(opros/start)
exten => s,4,Background(opros/v1)
exten => s,5,Background(opros/o1)
exten => s,6,WaitExten(5)
exten => t,1,Goto(1,1)
exten => t,2,Goto(2,1)
exten => t,3,Goto(3,1)
exten => 1,1,System(/etc/asterisk/opros11.sh ${CALLERID(num)} ${EXTEN})
exten => 2,1,System(/etc/asterisk/opros12.sh ${CALLERID(num)} ${EXTEN})
exten => 3,1,System(/etc/asterisk/opros13.sh ${CALLERID(num)} ${EXTEN})
exten => i,1,Playback(opros/repeat)
exten => i,2,Goto(s,5)
exten => s,7,Background(opros/v2)
exten => s,8,Background(opros/o2)
в логах
-- Executing [2@opros:1] System("SIP/311-083489f0", "/etc/asterisk/opros12.sh 311 2") in new stack
== Auto fallthrough, channel 'SIP/311-083489f0' status is 'UNKNOWN'
|
Откуда: Киев
Сообщений: 1096
|
Re: опрос.
используй силу.. (с)
т.е AGI ()
и ваАпще как то код глаза режет, можно все сделать проще и без системных скриптов, как IVR или поочередно задавать вопросы и ловить нажатие клавиш.. ответы складировать в переменную, которую после окончания опроса передавать в базу (тоже множество методов)
|
Откуда: Уфа
Сообщений: 5856
|
Re: опрос.
[vopros]
exten => s,1,Background(opros/start)
exten => s,n,goto(vopros01,s,1)
[vopros01]
exten => s,1,Background(opros/vopros01)
exten => s,n,wait(exten)
exten => s,n,goto(vopros03,s,1)
exten => 1,1,System(/etc/asterisk/opros11.sh ${CALLERID(num)} ${EXTEN})
exten => 2,1,System(/etc/asterisk/opros12.sh ${CALLERID(num)} ${EXTEN})
[vopros02]
exten => s,1,Background(opros/vopros02)
exten => s,n,wait(exten)
exten => s,n,goto(vopros03,s,1)
exten => 1,1,System(/etc/asterisk/opros11.sh ${CALLERID(num)} ${EXTEN})
exten => 2,1,System(/etc/asterisk/opros12.sh ${CALLERID(num)} ${EXTEN})
[vopros03]
exten => s,1,Background(opros/vopros03)
exten => s,n,wait(exten)
exten => s,n,goto(vopros04,s,1)
exten => 1,1,System(/etc/asterisk/opros11.sh ${CALLERID(num)} ${EXTEN})
exten => 2,1,System(/etc/asterisk/opros12.sh ${CALLERID(num)} ${EXTEN})
[vopros04]
exten => s,1,Background(opros/vopros04)
exten => s,n,wait(exten)
exten => s,n,goto(vopros05,s,1)
exten => 1,1,System(/etc/asterisk/opros11.sh ${CALLERID(num)} ${EXTEN})
exten => 2,1,System(/etc/asterisk/opros12.sh ${CALLERID(num)} ${EXTEN})
|
Откуда: SPb
Сообщений: 1307
|
Re: опрос.
Используйте Read() и Gotoif()
вот
macro opros () {
Answer;
TIMEOUT(response)=5;
Background(opros/start);
begin:
Read(answ,opros/v1&opros/o1,1,,,5);
if($[${EXISTS(${answ})} = 1]) {
switch ("${answ}") {
case "1": System(/etc/asterisk/opros11.sh ${CALLERID(num)} ${answ}) ;
case "2": System(/etc/asterisk/opros12.sh ${CALLERID(num)} ${answ}) ;
case "3": System(/etc/asterisk/opros13.sh ${CALLERID(num)} ${answ}) ;
default: Playback(opros/repeat); goto begin;
}
} else for (z=0; ${z} < 3; z=${z} + 1) { System(/etc/asterisk/opros1${z}.sh ${CALLERID(num)} ${answ}); };
Background(opros/v2&opros/o2);
}
|
Откуда: Москва
Сообщений: 3421
|
Re: опрос.
Используй магию.
Скрипт с фиксацией ответов должен принимать:
arg1: название опроса
arg2: номер абонента
arg3: номер вопроса
В звуковых файлах также в названии закодирован вопрос.
Набранный номер отвечает за выбор опроса.
Тогда все просто и универсально, можно дать FTP пользователям, чтобы сами заливали опросы и вопросы, а также работать с DB из CLI (database put/del), не трогая диалплан, чтобы менять опросы (либо юзерам интерфейс прикрутить)
[macro-poll]
exten => s,1,Read(choice,questions/${ARG1}/q${ARG3},1);
exten => s,n,GotoIf($["${choice}" = ""]?1); repeat. TODO: no more than 3 times.
exten => s,n,System(poll.sh "${ARG1}" ${ARG2} ${ARG3} ${choice})
[poll]
exten => _X.,1,Answer
exten => _X.,n,Wait(0.5)
exten => _X.,n,Set(poll_name=${DB(poll_by_exten/${EXTEN})})
exten => _X.,n,Set(num=${DB(poll_q/${poll_name})})
exten => _X.,n,Set(q=1)
exten => _X.,n,While($[${num} > 0])
exten => _X.,n,Macro(poll,"${poll_name}",${CALLERID(num)},${q})
exten => _X.,n,Set(q=${MATH(${q}+1)})
exten => _X.,n,Set(num=${MATH(${num}-1)})
exten => _X.,n,EndWhile
exten => _X.,n,Playback(thank-you)
|
Сообщений: 1573
|
Re: опрос.
Макс, с год назад "открыл" для себя конструкцию:
q=$[${q}+1] (вместо такой: q=${MATH(${q}+1)} )
раньше тоже пользовася MATH. Вроде попроще ) ... IMHO!
Пардон за оффтоп ...
|
Сообщений: 5
|
Re: опрос.
Всем спасибо! реализовал.
возникла мысль расширить функционал и прикрутить ещё автообзвон, но это уже позже....
|
Откуда: Москва
Сообщений: 3421
|
Re: опрос.
cron333: Макс, с год назад "открыл" для себя конструкцию:
q=$[${q}+1] (вместо такой: q=${MATH(${q}+1)} )
Я знал про прямое сложение еще до того, как MATH появилась :-)
Просто чревато ошибками. Пробел поставил - и уже цифры принимаются за текст. В общем, с MATH надежнее.
|
Сообщений: 1573
|
Re: опрос.
litnimax: cron333: Пробел поставил - и уже цифры принимаются за текст.
Нет такого ... :)
litnimax: В общем, с MATH надежнее.
Понял твое IMHO. Уважаю ... ;)
|
|