Asterisk рдФрд░ Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдлрд╝реИрдХреНрд╕ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдирд▓

рдлрд╝реИрдХреНрд╕ рдЙрди рдЪреАрдЬрд╝реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдХрдИ рд▓реЛрдЧ рдПрдХ рддреЗрдЬрд╝ рдореМрдд рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ рдЕрднреА рднреА рдмрд╣реБрдд рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕рдВрдЧрдарди рдореЗрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛред рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд▓реЗрдЦреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рд╕рд┐рд░реНрдл рдХреЙрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдмреБрджреНрдзрд┐рдорд╛рди рдкреНрд░рдгрд╛рд▓реА рдЪрд╛рд╣рддрд╛ рдерд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЕрд╕рдлрд▓ рднреЗрдЬрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╣ рдХрдИ рдмрд╛рд░ рд╡рд╛рдкрд╕ рдмреБрд▓рд╛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд░реНрддрдорд╛рди рд╡рд┐рддрд░рдг рд╕реНрдерд┐рддрд┐ рджреЗрдЦрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХрд┐ рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдиреЛрдб рдореЗрдВ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдореЗрд░реА рдмрд╛рдЗрдХ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдлреИрдХреНрд╕ рд╕рд░реНрд╡рд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдХреНрдпрд╛ рдЖрдпрд╛, рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рддрд╛рд░рд╛рдВрдХрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рддрд╛рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдлреИрдХреНрд╕ рдкреНрд░рдЧрддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд Asterisk рдбрд╛рдпрд▓ рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рднреА рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ:

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд╛рдпрд▓ рдпреЛрдЬрдирд╛ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рде рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдлреИрдХреНрд╕ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рддрд╛рдХрд┐ рдЧрд▓рддреА рд╕реЗ рд╕рднреА рдирд┐рд╢реБрд▓реНрдХ рдЪреИрдирд▓ рдкрд░ рдХрдмреНрдЬрд╛ рди рд╣реЛред

[OutgoingFaxInit] ;        exten => _X.,1,NoOp() same => n,Set(GROUP()=faxout) ;    -   Asterisk, ;  failed       , ;     . same => n,Set(DB(fax_group_count/${UUID})=${GROUP_COUNT(faxout)}) same => n,GotoIf($[${DB(fax_group_count/${UUID})}<=${MAX_PARALLELISM}]?call) same => n,UserEvent(Fax,uuid: ${UUID},Status: CALL SUSPENDED) same => n,HangUp() same => n(call),Dial(Local/${EXTEN}@OutgoingCalls) same => n,HangUp() ;          exten => router,1,NoOp() same => n,Set(__UUID=${UUID}) same => n,Set(__DATA=${DATA}) same => n,Dial(Local/fax@OutgoingFax) same => n,HangUp() exten => failed,1,NoOp() ;  ,     -    UserEvent ;    same => n,GotoIf($[${DB_DELETE(fax_group_count/${UUID})}<=${MAX_PARALLELISM}]?:end) same => n,UserEvent(Fax,uuid: ${UUID},Status: CALL PICKUP FAILED) same => n(end),HangUp() [OutgoingFax] exten => fax,1,NoOp() same => n,UserEvent(Fax,uuid: ${UUID},Status: CALL PICKUP SUCCESS); ;     .  . same => n,Set(DB(fax_sendstatus/${UUID})=0) same => n,Playback(autofax) same => n,Set(FAXOPT(headerinfo)=Company) same => n,Set(FAXOPT(localstationid)=XXX-XX-XX) ;    same => n,Set(DB(fax_sendstatus/${UUID})=1) same => n,SendFax(${DATA}) same => n,HangUp() exten => h,1,NoOp() ;      ,    ;   same => n,GotoIf($[${DB_DELETE(fax_sendstatus/${UUID})}]?sendstatus) same => n,UserEvent(Fax,uuid: ${UUID},Status: FAX SEND FAILED) same => n,Goto(end) ;     ,     ${FAXOPT} same => n(sendstatus),UserEvent(Fax,uuid: ${UUID},Status: FAX SEND ${FAXOPT(status)}) same => n(end),NoOp() 

рд╣рдорд╛рд░реЗ рдлрд╝реИрдХреНрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рдереЛрдХ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдиреЛрдб рдкрд░ рдЪрд▓реЗрдЧрд╛ред js. рд╣рдо рдПрдПрдордЖрдИрдПрд╕ рдкрд░ рдПрд╕реНрдЯрд░рд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВрдЧреЗред рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдХреЙрд▓ рдмрдирд╛рдиреЗ рдФрд░ UserEvents рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдзрд┐рдХрд╛рд░ рд╣реЛрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░ Manager.conf рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 [general] enabled=yes [FAX] secret=password read=user write=originate 

рдПрдПрдордЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЗрдореА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдкрдХрдбрд╝рддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рддрд░реАрдХреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рдкрд╛рд╕ рдЬреЗрдПрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдПрдордЖрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред

рдлреИрдХреНрд╕ рд╕рд░реНрд╡рд░ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рддрдВрддреНрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдХрддрд╛рд░ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Redis рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг рд╕рдВрд░рдЪрдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

рдЯреНрд╡рд┐рдЯрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рд╡реЗрдм рдлрд╝реЙрд░реНрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ jQuery рдбреЗрдЯрд╛рдЯреИрдмрд▓реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдореБрдЭреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХрд┐ jQuery рдбреЗрдЯрд╛рдЯреИрдмрд▓реНрд╕ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк 3 рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЬреАрдердм рдХреЗ рдкрд╛рд╕ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рднрдВрдбрд╛рд░ рдерд╛ред
рдЕрдВрдд рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордиреЗ рдЖрдпрд╛:
рдЫрд╡рд┐
рдЫрд╡рд┐
рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ config.json рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ:
 { "logLevel": "info", "port": 80, //    "FAX": { "uploadDir": "/tmp/faxout", //    "storageDir": "/tmp/faxout", //    TIFF   "gsCommand": "gs", //   Ghostscript (   ) "maxParallelism": 3, //     "maxRetry": 5, //     "retryInterval": 420, //    "delayedProcessingInterval": 5 //      }, "AMI": { //     AMI "host": "192.168.1.1", "port": 5038, "username": "FAX", "secret": "password" } 

рдЖрдк рдЬреАрдердм рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдЕрдВрд╢ рдХреЛ Asterisk рдбрд╛рдпрд▓рд┐рдВрдЧ рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд░реЗрдбрд┐рд╕ рдФрд░ рдиреЛрдб рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдиреЛрдб рдкрд░ тАЬрдореЗрд░рд╛ рдирдорд╕реНрдХрд╛рд░ рджреБрдирд┐рдпрд╛тАЭ (рдЙрд░реНрдл рдлреИрдХреНрд╕ рд╕рд░реНрд╡рд░) рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/In207080/


All Articles