Asterisk: Ввод данных счетчиков по телефону DTMF

[data-sent]
;вызов из модуля Freepbx "Custom Destinations"

exten => s,1,GoTo(verification_bill,s,1)

;ввод  и подтверждение номера лицевого счета

[verification_bill]
exten => s,1,Set(CHANNEL(language)=ru)
exten => s,n,Playback(ru/custom/pers_acc_enter_ru) ;"Введите номер лицевого счета после звукового сигнала, по завершении ввода нажмите решетку"
;голосовые сообщения в примере, записаны через модуль "System Recordings" во FreePBX 13, что влияет на специфическое расположение файлов

exten => s,n,Read(checkb,beep,,,6,15)
exten => s,n,SayDigits(${checkb}) ;проговаривается введенный номер
exten => s,n,Background(ru/custom/pers_acc_confirm_ru) ;"для подтверждения номера ЛС наберите "1", для повторного ввода номера ЛС наберите "2" "
exten => s,n,WaitExten(10)
exten => 2,1,Goto(s,1)
exten => 1,1,Goto(db_acc_check,s,1)
;читаем БД
[db_acc_check]
exten => s,1,MYSQL(Connect connidbill localhost user password db_name utf8)
exten => s,n,MYSQL(Query resultidbill ${connidbill} SELECT * FROM Counters WHERE PERSACC LIKE '%${checkb}%')
exten => s,n,MYSQL(Fetch fetchid ${resultidbill} PERSACC DATAB COUNTER)
exten => s,n,Set(_account=${PERSACC})
exten => s,n,Set(_countern=${COUNTER})
exten => s,n,Set(_count=ru/custom/count_num) ;Вспомогательное сообщение:"номер счетчика"

; проверка наличия Лицевого Счета  в Базе Данных

exten => s,n,GotoIf($["${PERSACC}" = ""]?notexist,s,1:dst1)


;если ЛС есть в БД, подрузамевается, что есть хотя бы один счетчик, принимаем данные для счетчика номер 1
;называем порядковый номер счетчика и просим ввести данные

exten => s,n(dst1),Playback(${count}&ru/digits/1&ru/custom/data_count2)
exten => s,n,Read(datavar1,beep,,,6,15)
exten => s,n,SayDigits(${datavar1})

;помещаем введенные данные в текстовый файл с именем: 'номерЛС' в директорию /var/log/asterisk/

exten => s,n,System(echo "Счечик 1" - "${STRFTIME(${EPOCH},,%d-%m-%Y)}" - "${account}" - "${datavar1}" >> /var/log/asterisk/${account})

; далее если кол-во счетчиков на ЛС больше 1, принимаем данные для счетчика номер 2, если меньше кладем трубку, и отключаемся от MYSQL.

exten => s,n,GotoIf($["${COUNTER}" > "1"]?dst2:endandclear)

exten => s,n(dst2),Playback(${count}&ru/digits/2&ru/custom/data_count2)
exten => s,n,Read(datavar2,beep,,,6,15)
exten => s,n,SayDigits(${datavar2})
exten => s,n,System(echo "Счетчик 2" - "${STRFTIME(${EPOCH},,%d-%m-%Y)}" - "${account}" - "${datavar2}" >> /var/log/asterisk/${account})

; далее если кол-во счетчиков на ЛС больше 2, принимаем данные для счетчика номер 3, если меньше кладем трубку, и отключаемся от MYSQL.

exten => s,n,GotoIf($["${COUNTER}" > "2"]?dst3:endandclear)

exten => s,n(dst3),Playback(${count}&ru/digits/3&ru/custom/data_count2)
exten => s,n,Read(datavar3,beep,,,6,15)
exten => s,n,SayDigits(${datavar3})
exten => s,n,System(echo "Счетчик 3" - "${STRFTIME(${EPOCH},,%d-%m-%Y)}" - "${account}" - "${datavar3}" >> /var/log/asterisk/${account})

;повторяем цикл до 6-го счетчика

exten => s,n,GotoIf($["${COUNTER}" > "3"]?dst4:endandclear)

exten => s,n(dst4),Playback(${count}&ru/digits/4&ru/custom/data_count2)
exten => s,n,Read(datavar4,beep,,,6,15)
exten => s,n,SayDigits(${datavar4})
exten => s,n,System(echo "Счетчик 4" - "${STRFTIME(${EPOCH},,%d-%m-%Y)}" - "${account}" - "${datavar4}" >> /var/log/asterisk/${account})

exten => s,n,GotoIf($["${COUNTER}" > "4"]?dst5:endandclear)

exten => s,n(dst5),Playback(${count}&ru/digits/5&ru/custom/data_count2)
exten => s,n,Read(datavar5,beep,,,6,15)
exten => s,n,SayDigits(${datavar5})
exten => s,n,System(echo "Счетчик 5" - "${STRFTIME(${EPOCH},,%d-%m-%Y)}" - "${account}" - "${datavar5}" >> /var/log/asterisk/${account})


exten => s,n,GotoIf($["${COUNTER}" > "5"]?dst6:endandclear)

exten => s,n(dst6),Playback(${count}&ru/digits/6&ru/custom/data_count2)
exten => s,n,Read(datavar6,beep,,,6,15)
exten => s,n,SayDigits(${datavar6})
exten => s,n,System(echo "Счетчик 6" - "${STRFTIME(${EPOCH},,%d-%m-%Y)}" - "${account}" - "${datavar6}" >> /var/log/asterisk/${account})

;отключаемся от БД
exten => s,n(endandclear),Noop(***ENDandCLEAR***)
exten => s,n,MYSQL(Clear ${resultidbill})
exten => s,n,MYSQL(Disconnect ${connidbill})

;отправляем данные на емайл

exten => h,1,System(mail -s "Данные счетчиков лицевой счет номер ${account}"  info@asterisk-pbx.ru <  /var/log/asterisk/${account})

;перемещаем файл с данными в архив /var/log/asterisk/datac/

exten => h,3,System(mv -f  /var/log/asterisk/${account}  /var/log/asterisk/datac/${account}-${STRFTIME(${EPOCH},,%H:%M-%d-%m-%Y)})
exten => h,n,hangup()

;сообщение: лицевой счет не существует

[notexist]
exten => s,1,Playback(ru/custom/pers_acc_not_exist_ru)
exten => s,n,Hangup
  • asterisk/dialplan/dtmf_data_receive.txt
  • Последние изменения: 2016/10/28