Asterisk рдореЗрдВ рдПрдХ BLF рдХреБрдВрдЬреА рдкрд░ DnD рдореЛрдб рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рдВрдХреЗрдд

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

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

1. /etc/asterisk/extensions_override_freepbx.conf рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдмрдирд╛рдПрдВред рдпрд╣ Extension.conf рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
рдореИрдХреНрд░реЛ рдЯреЗрдХреНрд╕реНрдЯ:

[ext-dnd-hints] exten => *761000,1,Goto(app-dnd-toggle,*76,1) exten => *761000,hint,Custom:DEVDND1000 


рдЗрд╕ рдореИрдХреНрд░реЛ рдореЗрдВ, рдЯреНрд░реИрдХ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЛрди рдирдВрдмрд░ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди 1000 рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред * 76 рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЛрдб рд╣реИред
рд╕рд╛рджреГрд╢реНрдп рд╕реЗ, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдбреАрдПрдирдбреА рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 [app-dnd-toggle] include => app-dnd-toggle-custom exten => *76,1,Answer exten => *76,n,Wait(1) exten => *76,n,Macro(user-callerid,) exten => *76,n,GotoIf($["${DB(DND/${AMPUSER})}" = ""]?activate:deactivate) exten => *76,n(activate),Set(DB(DND/${AMPUSER})=YES) exten => *76,n,Set(STATE=RINGING) exten => *76,n,Gosub(app-dnd-toggle,sstate,1) exten => *76,n,Playback(do-not-disturb&activated) exten => *76,n,Macro(hangupcall,) exten => *76,n(deactivate),dbDel(DND/${AMPUSER}) exten => *76,n,Set(STATE=NOT_INUSE) exten => *76,n,Gosub(app-dnd-toggle,sstate,1) exten => *76,n,Playback(do-not-disturb&de-activated) exten => *76,n,Macro(hangupcall,) exten => sstate,1,Set(DEVICE_STATE(Custom:DND${AMPUSER})=${STATE}) exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${AMPUSER}/device)}) exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return) exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)}) exten => sstate,n,Set(ITER=1) exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVDND${CUT(DEVICES,&,${ITER})})=${STATE}) exten => sstate,n,Set(ITER=$[${ITER} + 1]) exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin) exten => sstate,n(return),Return() 


рдпрд╣ рдореИрдХреНрд░реЛ рд╣реА рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕реНрдЯреЗрдЯреНрд╕ рд╣реИ, рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

2. рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреВрд░реНрд╡-рдбрд╛рдВрдб-рд╕рдВрдХреЗрдд рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ:

 [from-internal] include => ext-dnd-hints exten => h,1,Hangup 


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

3. рдлрд╝реЛрди рдкрд░ рдХреБрдВрдЬреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ: рдЗрд╕ рдкрд░ рд╕рдВрдЦреНрдпрд╛ * 761000 рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдмреАрдПрд▓рдПрдл рдореЛрдб рдЪрд╛рд▓реВ рдХрд░реЗрдВред рдпрджрд┐ рдмреАрдПрд▓рдПрдл рдореЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рд╖рдп рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╛рда рдХреЛ рдЗрдЯреИрд▓рд┐рдХ рдореЗрдВ рдкрдврд╝реЗрдВред

4. CLI рдореЗрдВ, рдбрд╛рдпрд▓рдкреНрд▓рд╛рди рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░рд╛ рд╕рдВрдХреЗрдд рдкреНрд░рдХрдЯ рд╣реБрдЖ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ, рджреГрд╢реНрдп рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:

 xtelekom*CLI> core show hint *761000 *761000@ext-dnd-hints : Custom:DEVDND1000 State:Idle Watchers 1 


рдпрджрд┐ рдлреЛрди рдбреАрдПрдирдбреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡реЙрдЪрд░реНрд╕ 0 рд╣реЛрдЧрд╛ред

рдХреБрдЫ рдлреЛрди, рдЬрдм BLF рдЕрдиреБрдкрд▓рдмреНрдз (рдмреНрд▓рд┐рдВрдХрд┐рдВрдЧ рд░реЗрдб) рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ ** рдХреЛ рдЙрд╕ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ *** *** 761000 рд╣реИред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП, рдореИрдХреНрд░реЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рд░рдЦреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓рд╛ рдореИрдХреНрд░реЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ:
рдПрдХ рдФрд░ рдореИрдХреНрд░реЛ
 [ext-dnd-hints] exten => *761000,1,Goto(app-dnd-toggle,*76,1) exten => ***761000,1,Goto(app-dnd-toggle,***76,1) exten => *761000,hint,Custom:DEVDND1000 [app-dnd-toggle] include => app-dnd-toggle-custom exten => *76,1,Answer exten => *76,n,Wait(1) exten => *76,n,Macro(user-callerid,) exten => *76,n,GotoIf($["${DB(DND/${AMPUSER})}" = ""]?activate:deactivate) exten => *76,n(activate),Set(DB(DND/${AMPUSER})=YES) exten => *76,n,Set(STATE=RINGING) exten => *76,n,Gosub(app-dnd-toggle,sstate,1) exten => *76,n,Playback(do-not-disturb&activated) exten => *76,n,Macro(hangupcall,) exten => *76,n(deactivate),dbDel(DND/${AMPUSER}) exten => *76,n,Set(STATE=NOT_INUSE) exten => *76,n,Gosub(app-dnd-toggle,sstate,1) exten => *76,n,Playback(do-not-disturb&de-activated) exten => *76,n,Macro(hangupcall,) exten => sstate,1,Set(DEVICE_STATE(Custom:DND${AMPUSER})=${STATE}) exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${AMPUSER}/device)}) exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return) exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)}) exten => sstate,n,Set(ITER=1) exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVDND${CUT(DEVICES,&,${ITER})})=${STATE}) exten => sstate,n,Set(ITER=$[${ITER} + 1]) exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin) exten => sstate,n(return),Return() exten => ***76,1,Answer exten => ***76,n,Wait(1) exten => ***76,n,Macro(user-callerid,) exten => ***76,n,GotoIf($["${DB(DND/${AMPUSER})}" = ""]?activate:deactivate) exten => ***76,n(activate),Set(DB(DND/${AMPUSER})=YES) exten => ***76,n,Set(STATE=) exten => ***76,n,Gosub(app-dnd-toggle,sstate,1) exten => ***76,n,Playback(do-not-disturb&activated) exten => ***76,n,Macro(hangupcall,) exten => ***76,n(deactivate),dbDel(DND/${AMPUSER}) exten => ***76,n,Set(STATE=UNAVAILABLE) exten => ***76,n,Gosub(app-dnd-toggle,sstate,1) exten => ***76,n,Playback(do-not-disturb&de-activated) exten => ***76,n,Macro(hangupcall,) exten => sstate,1,Set(DEVICE_STATE(Custom:DND${AMPUSER})=${STATE}) exten => sstate,n,Set(DEVICES=${DB(AMPUSER/${AMPUSER}/device)}) exten => sstate,n,GotoIf($["${DEVICES}" = "" ]?return) exten => sstate,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)}) exten => sstate,n,Set(ITER=1) exten => sstate,n(begin),Set(DEVICE_STATE(Custom:DEVDND${CUT(DEVICES,&,${ITER})})=${STATE}) exten => sstate,n,Set(ITER=$[${ITER} + 1]) exten => sstate,n,GotoIf($[${ITER} <= ${LOOPCNT}]?begin) exten => sstate,n(return),Return() 



рдЕрдЧрд▓реА рдмрд╛рд░ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХрддрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЙрд╕реА рддрд░рд╣ рдХреИрд╕реЗ рдореЙрдирд┐рдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред

PS рдХрднреА-рдХрднреА рдЧреНрд░реИрдВрдбрд╕реНрдЯреНрд░реАрдо рдкрд░ рдлреЛрди рдХрд╛ рд░рд┐рдмреВрдЯ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдмрдЯрди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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


All Articles