рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ Asterisk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд┐рд╕реНрдб рдХреЙрд▓ рдХреА рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред рдореИрдВ рд╕рд░рд▓ рд╡рд┐рдиреНрдпрд╛рд╕ рдЙрджрд╛рд╣рд░рдг рджреЗрдиреЗ рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛, рдлрд┐рд░ рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рд╡реЗрдХ рдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд░рд╛рдВрдХрди рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╣реА рдХрд╛рд░реНрдп рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЦреНрдп рдкрд░рд┐рдгрд╛рдо рдЖрдкрдХреА рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╕реНрдерд┐рд░ рд╕рдВрдЪрд╛рд▓рди рд╣реИред
рдИрдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдорд┐рд╕реНрдб рдХреЙрд▓ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬрдирд╛
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ:рдХреЙрд▓рд┐рдВрдЧ рдХрддрд╛рд░ рдореЗрдВ +7 (495) 1234567, IVR, 4 рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реА рдорд▓реНрдЯреА-рдЪреИрдирд▓ рд▓рд╛рдЗрдиред
рдЙрджреНрджреЗрд╢реНрдпреЛрдВ:1. рдорд┐рд╕реНрдб рдХреЙрд▓ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬреЗрдВ, рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреА рд╕рдВрдЦреНрдпрд╛, рдХреЙрд▓ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХрд╛ рд╕рдордп рдФрд░ рд▓рд╛рдЗрди рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рдХрд╛ рд╕рдВрдХреЗрддред
2. рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ 10 рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рд▓рд╛рдЗрди рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдлреЛрди рд▓рдЯрдХрд╛ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдорд┐рд╕реНрдб рдХреЙрд▓ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬрддреЗ рд╣реИрдВред
3. рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ (рд╡рд░реНрддрдорд╛рди MySQL рдЙрджрд╛рд╣рд░рдг рдореЗрдВ) рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ рдЬрд┐рд╕ рдкрд░ рдХрддрд╛рд░ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдиреЗ рдХреЙрд▓ рдХрд╛ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдФрд░ рдЙрд╕ рд╕рдордп рдХреЛ рдареАрдХ рдХрд░реЗрдВ рдЬрд┐рд╕ рдкрд░ рдмрд╛рддрдЪреАрдд рдкреВрд░реА рд╣реБрдИ рдереАред
рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдиреНрдпрд╛рд╕ (рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ) рджреВрдВрдЧрд╛, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрд╖рдгреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рдеред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХреЗ рдШрдВрдЯреЗ + рдХреЙрд▓ рдХрддрд╛рд░ рдХрд╛ рдЖрдИрд╡реАрдЖрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
[globals] CIDFILE=/etc/asterisk/inc-calls/call-noanswer SQLHOST=db.domain.ru SQLUSER=asterisksql SQLPASS=Gt6Rju8FkS SQLDB=asteriskdb IVRWORK=custom/IVR_company_wav [incoming-74951234567] exten => h,1,Set(WAITTIME=10) exten => h,n,Set(CTALL=$[${CDR(duration)}]) exten => h,n,Set(CTANSWER=$[${CDR(billsec)}]) exten => h,n,Set(CTDTIME=$[${CTALL}-${CTANSWER}]) exten => h,n,NoOP(${CDR(disposition)}) exten => h,n,NoOP(${CTDTIME}) exten => h,n,GotoIf($["${CDR(disposition)}" = "NO ANSWER"]?timecheck:n1) exten => h,n(n1),GotoIf($["${CDR(disposition)}" = "BUSY"]?timecheck:n2) exten => h,n(n2),GotoIf($["${CDR(disposition)}" = "FAILED"]?timecheck:n3) exten => h,n(n3),GotoIf($["${CDR(disposition)}" = "ANSWERED"]?n4:misscall) exten => h,n(n4),MYSQL(Connect connid ${SQLHOST} ${SQLUSER} ${SQLPASS} ${SQLDB}) exten => h,n,MYSQL(Query resultid ${connid} UPDATE office_calls SET active=0 WHERE asterisk_id='${QID}') exten => h,n,MYSQL(Clear ${resultid}) exten => h,n,MYSQL(Disconnect ${connid}) exten => h,n(hang),Hangup() exten => h,n(timecheck),GotoIf($[${CTDTIME} > ${WAITTIME}]?misscall:hang) exten => h,n(misscall),Goto(noanswer,s,1) exten => s,1,NoOp(${CALLERID(num)}) exten => s,n,Set(CALLID=74951234567) exten => s,n,Set(CALLER=${CALLERID(num)}) exten => s,n,Set(__QID=${CDR(uniqueid)}) exten => s,n(begin),GotoIfTime(10:00-22:00,mon-sat,*,*?workdays:outofoffice) exten => s,n(workdays),NoOp(Incoming CALL from ${CALLERID(num)} to ${EXTEN}) exten => s,n,Answer() exten => s,n,ResetCDR(w) exten => s,n,Wait(1) exten => s,n,Background(${IVRWORK}) exten => s,n,Queue(operators,t,,,300,,startflag1) exten => s,n,NoOp(${DIALSTATUS}) exten => s,n,Goto(noanswer,s,1) exten => s,n,Hangup()
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдИрд╡реАрдЖрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд▓рд╛рдЗрди рдкрд░ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рд╕рдЯреАрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЕрдиреНрдпрдерд╛, рдЖрдк рдЙрд╕ рд╕рдордп рдХреА рднреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдиреЗ рд╡реЙрдпрд╕ рдореЗрдиреНрдпреВ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ), рддреЛ рдЙрддреНрддрд░ рдХреЗ рдмрд╛рдж () рд░реЗрд╕рд╕реЗрдЯ рдХрд▓реЗрдХреНрдЯрд░ (рдбрдмреНрд▓реНрдпреВ) рдЬреЛрдбрд╝реЗрдВред рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ - рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣реА рдХрддрд╛рд░ рдореЗрдВ рдПрдЬреЗрдВрдЯ рдХреЙрд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ - рдпрд╣рд╛рдВ startflag1 рдореИрдХреНрд░реЛ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛, рдЬреЛ рдХрд┐ рдХрддрд╛рд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд╛ рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдпрджрд┐ рдЖрдкрдиреЗ рдХреЙрд▓ рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдиреЛрдПрдЖрд░ рд╕рдВрджрд░реНрдн рдкрд░ рдЬрд╛рдПрдВ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
[noanswer] exten => s,1,NoOp(UID CALL: ${UNIQUEID} / DATE: ${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})) exten => s,n,Set(RANDOM=${RAND(1000,9999)}) exten => s,n,Set(COUNT=${DB(fwcid2/count)}) exten => s,n,GotoIf($[${ISNULL(${COUNT})}]?:nextstep) exten => s,n,Set(DB(fwcid2/count)=1) exten => s,n,NoOp() exten => s,n,NoOp(UNIQID = ${COUNT}) exten => s,n,Set(COUNT=$[${COUNT} + 1]) exten => s,n,Set(DB(fwcid2/count)=${COUNT}) exten => s,n,System(echo " +7${CALLERID(NUM)} ${STRFTIME(${EPOCH},,%H:%M)}" > ${CIDFILE}-${CALLERID(NUM)}-${COUNT}) exten => s,n,System(echo "" >> ${CIDFILE}-${CALLERID(NUM)}-${COUNT}) exten => s,n,System(echo " ${CTDTIME} " >> ${CIDFILE}-${CALLERID(NUM)}-${COUNT}) exten => s,n,System(echo "hello" | mutt -x -s "+74951234567: ${STRFTIME(${EPOCH},,%d.%m.%Y)} ${STRFTIME(${EPOCH},,%H:%M)}" -e "set from="voip@domain.ru"" -e 'set realname='Asterisk'' voip@domain.ru < ${CIDFILE}-${CALLERID(NUM)}-${COUNT}) exten => s,n,System(/bin/rm -f ${CIDFILE}-${CALLERID(NUM)}-${COUNT}) exten => s,n,Hangup()
$ {STRFTIME ($ {┬й},% H:% M)} - рдЖрдЧрдорди рдХрд╛ рд╕рдордпред
$ {CALLERID (NUM)} - рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреА рд╕рдВрдЦреНрдпрд╛ред
$ {COUNT} - рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, ASTBD рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг, рдЪрд░ рдХрд╛ рдорд╛рди рдЗрд╕реЗ рдЕрджреНрд╡рд┐рддреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╣реА рдирдВрдмрд░ рд╕реЗ рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм MySQL рдЯреЗрдмрд▓ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
$ {SQLHOST / SQLUSER / SQLPASS / SQLD} - рдореИрдВрдиреЗ рдЧреНрд▓реЛрдмрд▓реНрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЗрди рдЪрд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред
$ {QID} - рдЖрдиреЗ рд╡рд╛рд▓реА рдХреЙрд▓ 'рд╕реЗрдЯ (__ QID = $ {CDR (uniqueid))') рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЪрд░ рдЬрд┐рд╕реЗ рд╣рдо рдореИрдХреНрд░реЛ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рджреЛ рдкреНрд░рдореБрдЦ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рджреЗрдЦреЗрдВ, рдЬреЛ рдЖрдкрдХреЛ рдореИрдХреНрд░реЛ рдореИрдХреНрд░реЛ- startflag1 рдореЗрдВ рд╡реИрд░рд┐рдПрдмрд▓ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрддреЗ рд╣реИрдВред
[macro-startflag1] exten => s,1,Set(CALLID=74951234567) exten => s,n,MYSQL(Connect connid ${SQLHOST} ${SQLUSER} ${SQLPASS} ${SQLDB}) exten => s,n,MYSQL(Query resultid ${connid} INSERT INTO office_calls VALUES (NULL,'${STRFTIME(,GMT,%G-%m-%d %H:%M:%S)}',1,'${CALLID}','${CDR(src)}','${CDR(dstcha nnel):0:9}','${STRFTIME(,GMT,%G-%m-%d %H:%M:%S)}','${STRFTIME(,GMT,%G-%m-%d %H:%M:%S)}','${QID}')) exten => s,n,MYSQL(Clear ${resultid}) exten => s,n,MYSQL(Disconnect ${connid}) exten => s,n,Hangup()
рдЖрдЗрдП рдПрдХ рдФрд░ рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдорд┐рд╕реНрдб рдХреЙрд▓ рдХреЗ рд╕рд╛рде XML рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
<?xml version="1.0" encoding="UTF-8"?> <callback_request> <id>100XXXX</id> --- XXX - <name></name> --- , <phone>123456</phone> --- , <comment> </comment> <completed>false</completed> <created_at>11.12.2012 - 17:19</created_at> --- <updated_at>11.12.2012 - 17:19</updated_at> --- <no_answer/> </callback_request>
рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ, рдореИрдВ рд╕рд┐рд╕реНрдЯрдо () рдХрдорд╛рдВрдб рдФрд░ рдкрд░реНрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
XML :: рд▓реЗрдЦрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
yum install perl-XML-Writer
рд╕реНрдХреНрд░рд┐рдкреНрдЯ /etc/asterisk/scripts/genxml.pl рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рд╣реИ:
exten => s,n,System(/usr/bin/perl /etc/asterisk/scripts/genxml.pl "100${RANDOM}" "74951234567" "${CALLERID(NUM)}" "${STRFTIME(${EPOCH},,%d.%m.%Y - %H:%M)}" > /srv/www/domain.ru/xml/REQUEST.${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)}.xml)
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред