DND status indication
System:
Centos 5 (AsteriskNow)
Asterisk 1.6.2.17.2
FreePBX 2.8.1.4
FOP2 2.20
Hello,
so far my FOP2 installation is running fine. Login and call status is indicated without any big trouble. Unfortunately the Do not Disturb status of the users does not reach the FOP. What I checked so far:
Manager permissions:
extensions_override_freepbx.conf in /etc/asterisk (from FOP 2.20, no changes made):
log during DND dial via *78 my phone is 1007 my user exten is 9666
what else can I check to make this working?
btw. while reading I also found that some have trouble with the Pause/Unpause status not getting updated. I seem to have that too, but it's a feature we didn't use so far.
Thanks in advance
Simon
Centos 5 (AsteriskNow)
Asterisk 1.6.2.17.2
FreePBX 2.8.1.4
FOP2 2.20
Hello,
so far my FOP2 installation is running fine. Login and call status is indicated without any big trouble. Unfortunately the Do not Disturb status of the users does not reach the FOP. What I checked so far:
Manager permissions:
read = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
write = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
extensions_override_freepbx.conf in /etc/asterisk (from FOP 2.20, no changes made):
[app-dnd-on]
include => app-dnd-on-custom
exten => *78,1,Answer
exten => *78,n,Wait(1)
exten => *78,n,Macro(user-callerid,)
; added for fop2
exten => *78,n,Set(DB(DND/${AMPUSER})=YES)
exten => *78,n,Set(CHAN=${CUT(CHANNEL,-,1)})
exten => *78,n,Set(DB(fop2state/${CHAN})=Do not Disturb)
exten => *78,n,UserEvent(FOP2ASTDB,Family: fop2state,Channel: ${CHAN},Value: Do not Disturb)
; end fop2 addition
exten => *78,n,Set(DB(DND/${AMPUSER})=YES)
exten => *78,n,Set(STATE=BUSY)
exten => *78,n,Gosub(app-dnd-on,sstate,1)
exten => *78,n,Playback(do-not-disturb&activated)
exten => *78,n,Macro(hangupcall,)
exten => sstate,1,Set(DEVSTATE(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(DEVSTATE(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()
[app-dnd-off]
include => app-dnd-off-custom
exten => *79,1,Answer
exten => *79,n,Wait(1)
exten => *79,n,Macro(user-callerid,)
; added for fop2
exten => *79,n,Set(CHAN=${CUT(CHANNEL,-,1)})
exten => *79,n,dbDel(fop2state/${CHAN})
exten => *79,n,UserEvent(FOP2ASTDB,Family: fop2state,Channel: ${CHAN},Value: )
; end fop2 addition
exten => *79,n,dbDel(DND/${AMPUSER})
exten => *79,n,Set(STATE=NOT_INUSE)
exten => *79,n,Gosub(app-dnd-off,sstate,1)
exten => *79,n,Playback(do-not-disturb&de-activated)
exten => *79,n,Macro(hangupcall,)
exten => sstate,1,Set(DEVSTATE(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(DEVSTATE(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()
[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(CHAN=${CUT(CHANNEL,-,1)})
exten => *76,n,Set(DB(fop2state/${CHAN})=Do not Disturb)
exten => *76,n,UserEvent(FOP2ASTDB,Family: fop2state,Channel: ${CHAN},Value: Do not Disturb)
exten => *76,n,Set(STATE=BUSY)
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(CHAN=${CUT(CHANNEL,-,1)})
exten => *76,n,dbDel(fop2state/${CHAN})
exten => *76,n,UserEvent(FOP2ASTDB,Family: fop2state,Channel: ${CHAN},Value: )
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(DEVSTATE(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(DEVSTATE(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()
[app-cf-off]
include => app-cf-off-custom
exten => *73,1,Answer
exten => *73,n,Wait(1)
exten => *73,n,Macro(user-callerid,)
exten => *73,n,dbDel(CF/${AMPUSER})
exten => *73,n,Set(CHAN=${CUT(CHANNEL,-,1)})
exten => *73,n,UserEvent(FOP2CUST,Family: astdbcust,Channel: ${CHAN},Value: )
exten => *73,n,Playback(call-fwd-unconditional&de-activated)
exten => *73,n,Macro(hangupcall,)
exten => _*73.,1,Answer
exten => _*73.,n,Wait(1)
exten => _*73.,n,Set(fromext=${EXTEN:3})
exten => _*73.,n,dbDel(CF/${fromext})
exten => _*73.,n,Set(CHAN=${DB(DEVICE/${fromext}/dial)})
exten => _*73.,n,UserEvent(FOP2CUST,Family: astdbcust,Channel: ${CHAN},Value: )
exten => _*73.,n,Playback(call-fwd-unconditional&for&extension)
exten => _*73.,n,SayDigits(${fromext})
exten => _*73.,n,Playback(cancelled)
exten => _*73.,n,Macro(hangupcall,)
[app-cf-on]
include => app-cf-on-custom
exten => *72,1,Answer
exten => *72,n,Wait(1)
exten => *72,n,Macro(user-callerid,)
exten => *72,n,Playback(call-fwd-unconditional)
exten => *72,n,Playback(please-enter-your&extension)
exten => *72,n,Read(fromext,then-press-pound,,,,)
exten => *72,n,Set(fromext=${IF($["foo${fromext}"="foo"]?${AMPUSER}:${fromext})})
exten => *72,n,Wait(1)
exten => *72,n(startread),Playback(ent-target-attendant)
exten => *72,n,Read(toext,then-press-pound,,,,)
exten => *72,n,GotoIf($["foo${toext}"="foo"]?startread)
exten => *72,n,Wait(1)
exten => *72,n,Set(DB(CF/${fromext})=${toext})
exten => *72,n,Set(CHAN=${DB(DEVICE/${fromext}/dial)})
exten => *72,n,UserEvent(FOP2CUST,Family: astdbcust,Channel: ${CHAN},Value: ${toext} )
exten => *72,n,Playback(call-fwd-unconditional&for&extension)
exten => *72,n,SayDigits(${fromext})
exten => *72,n,Playback(is-set-to)
exten => *72,n,SayDigits(${toext})
exten => *72,n,Macro(hangupcall,)
exten => _*72.,1,Answer
exten => _*72.,n,Wait(1)
exten => _*72.,n,Macro(user-callerid,)
exten => _*72.,n,Set(DB(CF/${AMPUSER})=${EXTEN:3})
exten => _*72.,n,Set(CHAN=${DB(DEVICE/${AMPUSER}/dial)})
exten => _*72.,n,UserEvent(FOP2CUST,Family: astdbcust,Channel: ${CHAN},Value: ${EXTEN:3} )
exten => _*72.,n,Playback(call-fwd-unconditional&for&extension)
exten => _*72.,n,SayDigits(${AMPUSER})
exten => _*72.,n,Playback(is-set-to)
exten => _*72.,n,SayDigits(${EXTEN:3})
exten => _*72.,n,Macro(hangupcall,)
[fop2-park]
exten => _X.,1,Set(ARRAY(RETURN_EXTENSION,RETURN_CONTEXT)=${CUT(EXTEN,:,1)}\,${CUT(EXTEN,:,2)})
exten => _X.,n,ParkAndAnnounce(PARKED,,Console/dsp,${RETURN_CONTEXT},${RETURN_EXTENSION},1)
exten => _X.,n,Goto(${RETURN_CONTEXT},${RETURN_EXTENSION},1)
exten => _X.,n,Hangup
[fop2-dummy]
exten => dummy,1,Answer
exten => dummy,2,Wait(1)
exten => dummy,3,Hangup
;[fop2-park]
; Alternative fop2-park for asterisk 1.6 and up, using parkinglots and Park application
;exten => _X.,1,Set(ARRAY(RETURN_EXTENSION,RETURN_CONTEXT)=${CUT(EXTEN,:,1)},${CUT(EXTEN,:,2)})
;exten => _X.,n,Set(PARKINGLOT=parkinglot_${RETURN_CONTEXT})
;exten => _X.,n,Park(,${RETURN_CONTEXT},${RETURN_EXTENSION},1,s)
log during DND dial via *78 my phone is 1007 my user exten is 9666
127.0.0.1 <- Event: VarSet
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Variable: MACRO_DEPTH
127.0.0.1 <- Value: 1
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: Newexten
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Context: macro-hangupcall
127.0.0.1 <- Extension: s
127.0.0.1 <- Priority: 4
127.0.0.1 <- Application: GotoIf
127.0.0.1 <- AppData: 1?skipblkvm
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: VarSet
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Variable: MACRO_DEPTH
127.0.0.1 <- Value: 1
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: Newexten
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Context: macro-hangupcall
127.0.0.1 <- Extension: s
127.0.0.1 <- Priority: 7
127.0.0.1 <- Application: GotoIf
127.0.0.1 <- AppData: 1?theend
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: VarSet
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Variable: MACRO_DEPTH
127.0.0.1 <- Value: 1
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: Newexten
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Context: macro-hangupcall
127.0.0.1 <- Extension: s
127.0.0.1 <- Priority: 9
127.0.0.1 <- Application: Hangup
127.0.0.1 <- AppData:
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: VarSet
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Variable: MACRO_DEPTH
127.0.0.1 <- Value: 0
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: VarSet
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Variable: RTPAUDIOQOS
127.0.0.1 <- Value: ssrc=164155281;themssrc=1923237859;lp=0;rxjitter=0.000215;rxcount=152;txjitter=0.000000;txcount=179;rlp=0;rtt=0.000000
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: VarSet
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Variable: RTPAUDIOQOSJITTER
127.0.0.1 <- Value: minrxjitter=0.000001;maxrxjitter=0.009601;avgrxjitter=0.001482;stdevrxjitter=16831570662546681178158623672130372778864813544777170415896070931141270497851246435101681526382304928610904811525591468605440.000000;reported_minjitter=0.000000;reported_maxjitte
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: VarSet
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Variable: RTPAUDIOQOSLOSS
127.0.0.1 <- Value: lost=0;expected=152;
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: VarSet
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Variable: RTPAUDIOQOSRTT
127.0.0.1 <- Value: minrtt=0.000000;maxrtt=0.000000;avgrtt=0.000000;stdevrtt=0.000000;
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: VarSet
127.0.0.1 <- Privilege: dialplan,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Variable: RTPAUDIOQOS
127.0.0.1 <- Value:
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: Hangup
127.0.0.1 <- Privilege: call,all
127.0.0.1 <- Channel: SIP/1007-00003937
127.0.0.1 <- Uniqueid: 1305630186.72219
127.0.0.1 <- CallerIDNum: 9666
127.0.0.1 <- CallerIDName: Simon
127.0.0.1 <- Cause: 16
127.0.0.1 <- Cause-txt: Normal Clearing
127.0.0.1 <- Server: 0
127.0.0.1 <- Event: ExtensionStatus
127.0.0.1 <- Privilege: call,all
127.0.0.1 <- Exten: 9666
127.0.0.1 <- Context: ext-local
127.0.0.1 <- Hint: SIP/1007&Custom:DND9666
127.0.0.1 <- Status: 0
127.0.0.1 <- Server: 0
what else can I check to make this working?
btw. while reading I also found that some have trouble with the Pause/Unpause status not getting updated. I seem to have that too, but it's a feature we didn't use so far.
Thanks in advance
Simon
Comments
Unfortunately your manager capture does not have relevant information to tracking the problem down (all the varsets are just noise, the meat is on the newchannel and newexten events that come before , the ones traversing your app-dnd macros).
You can do a quick test by adding ",all" at the end of both read and write in /etc/asterisk/manager.conf (in some asterisk implementations user events are not being sent even if you have the user permission set).
Perhaps it is not a dialplan/context issue but just a manager permission thing.
Best regards,
thanks for your reply. Unfortunately this does not do the trick. There are quite many calls already running, so I obviously didn't extract the right informartion. here's for you all newchannel and and newexten and everything else I though which might be useful
Cheers,
Simon
are we talking about the manager "admin" account? this is where I set the permissions and it's the one entered in fop2.conf
The permissions is for the user that you set in fop2.cfg. The events look fine and permissions too, you had the two actions that are being injected for fop2 (setting an astdb entry and fire a userevent).
With this events, DND should be reflected in the fop2 display. Are you using the automatic freepbx configuration? Are you using device&user mode in FreePBX?
thanks for your help!
SIP/1007
and because user&device mode fop2 will look for
USER/1007
instead...
I have not tried this, just writing it here, try changing the line:
to
If it works, you should do a similar change in all the related macros in extensions_override_freepbx.conf
Best regards,
Thanks again!
I did the changes in the dnd macros and it works excellent!
As I see for call forwarding similar changes need to be done.
you just won a new customer!
Don't want to hijack but don't want to start another thread if not necessary as well.
I upgraded (licensed version) from 2.11 to 2.26. Great that you provided the /usr/local/fop2/generate_override_contexts.pl script to adjust freepbx number plans (running trixbox 2.8)!
It seems that the script makes adjustments that are not in line with those necessary for Device&User mode. So I followed the steps in this thread again, like I did when I installed 2.11.
However, only those extensions cashed in the database with keys SIP/<ext> are shown as DND, others are not updated.
DND status updates work by setting status through FOP2 (FOP2 server is running OK), and ringing/call/queue status is showed correctly as well (manager connection and flash-FOP2 connection OK as well).
To be sure I followed the steps in http://www.fop2.com/documentation-confi ... server.php another time, but still no luck. Any help would be appreciated
The modifications to the standard macros from FreePBX are kind of agnostics, the DND key is just the extension number:
DND/xxxxx
not sure where you see the SIP/xxx key. In any case, the question is: how are you setting phones in dnd? The override contexts are for making the fop2 presence state react to the DND/xxx changes in FreePBX, in both directions. So if you dial the dnd feature codes from freepbx, it should signal the presence change in fop2, and viceversa (you change in fop2, it will set the dnd/xxxx astdb entry).
If you use your phone dnd button it will not work as it does not signal asterisk at all. So, what astdb entry is set if you change presence in FOP2? What is exactly the problem? You do not see dnd states in fop2 for extensions that were set to dnd via *78 feature code in freepbx?
Best regards,
/usr/local/fop2/generate_override_contexts.pl -w
You must do that in order to fix the freepbx macros and include the special fop2 tidbits.
Like I described I saw that it made adjustments that did not reflect Device and User mode, so I adjusted the lines according to your suggestions in this thread on the forum (hence why I posted here instead of starting a new thread).
We were having really bad luck lately: several strong storms took down our network, power and hardware twice in a little over a month, so lately I am not much on the live help but trying to fix our network.
Best regards,
Thanks for the offer. I need to await the VPN access to be available to set up the troubleshooting session.