DND synchronisation between Asterisk and SNOM

We have synchronisation issues when using DND functionality on our SNOM phones. We currently have our DND on/off codes set to *76 on the phones, which invokes the following functionality:

– Executing [*76@from-internal:1] Answer(“SIP/427-b45cde10”, “”) in new stack
– Executing [*76@from-internal:2] Wait(“SIP/427-b45cde10”, “1”) in new stack
Extension Changed 427[ext-local] new state InUse for Notify User 419
Extension Changed 427[ext-local] new state InUse for Notify User 491
Extension Changed 427[ext-local] new state InUse for Notify User 413
Extension Changed 427[ext-local] new state InUse for Notify User 424
Extension Changed 427[ext-local] new state InUse for Notify User 435
Extension Changed 427[ext-local] new state InUse for Notify User 417
– Executing [*76@from-internal:3] Macro(“SIP/427-b45cde10”, “user-callerid|”) in new stack
– Executing [s@macro-user-callerid:1] Set(“SIP/427-b45cde10”, “AMPUSER=427”) in new stack
– Executing [s@macro-user-callerid:2] GotoIf(“SIP/427-b45cde10”, “0?report”) in new stack
– Executing [s@macro-user-callerid:3] ExecIf(“SIP/427-b45cde10”, “1|Set|REALCALLERIDNUM=427”) in new stack
– Executing [s@macro-user-callerid:4] Set(“SIP/427-b45cde10”, “AMPUSER=427”) in new stack
– Executing [s@macro-user-callerid:5] Set(“SIP/427-b45cde10”, “AMPUSERCIDNAME=MyName”) in new stack
– Executing [s@macro-user-callerid:6] GotoIf(“SIP/427-b45cde10”, “0?report”) in new stack
– Executing [s@macro-user-callerid:7] Set(“SIP/427-b45cde10”, “AMPUSERCID=427”) in new stack
– Executing [s@macro-user-callerid:8] Set(“SIP/427-b45cde10”, "CALLERID(all)=“MyName <427>”) in new stack
– Executing [s@macro-user-callerid:9] Set(“SIP/427-b45cde10”, “REALCALLERIDNUM=427”) in new stack
– Executing [s@macro-user-callerid:10] ExecIf(“SIP/427-b45cde10”, “0|Set|CHANNEL(language)=”) in new stack
– Executing [s@macro-user-callerid:11] GotoIf(“SIP/427-b45cde10”, “0?continue”) in new stack
– Executing [s@macro-user-callerid:12] Set(“SIP/427-b45cde10”, “__TTL=64”) in new stack
– Executing [s@macro-user-callerid:13] GotoIf(“SIP/427-b45cde10”, “1?continue”) in new stack
– Goto (macro-user-callerid,s,20)
– Executing [s@macro-user-callerid:20] NoOp(“SIP/427-b45cde10”, “Using CallerID “MyName” <427>”) in new stack
– Executing [*76@from-internal:4] GotoIf(“SIP/427-b45cde10”, “1?activate:deactivate”) in new stack
– Goto (from-internal,*76,5)
– Executing [*76@from-internal:5] Set(“SIP/427-b45cde10”, “DB(DND/427)=YES”) in new stack
– Executing [*76@from-internal:6] Set(“SIP/427-b45cde10”, “STATE=BUSY”) in new stack
– Executing [*76@from-internal:7] Gosub(“SIP/427-b45cde10”, “app-dnd-toggle|sstate|1”) in new stack
– Executing [sstate@app-dnd-toggle:1] Set(“SIP/427-b45cde10”, “DEVSTATE(Custom:DND427)=BUSY”) in new stack
– Executing [sstate@app-dnd-toggle:2] Set(“SIP/427-b45cde10”, “DEVICES=427”) in new stack
– Executing [sstate@app-dnd-toggle:3] GotoIf(“SIP/427-b45cde10”, “0?return”) in new stack
– Executing [sstate@app-dnd-toggle:4] Set(“SIP/427-b45cde10”, “LOOPCNT=1”) in new stack
– Executing [sstate@app-dnd-toggle:5] Set(“SIP/427-b45cde10”, “ITER=1”) in new stack
– Executing [sstate@app-dnd-toggle:6] Set(“SIP/427-b45cde10”, “DEVSTATE(Custom:DEVDND427)=BUSY”) in new stack
– Executing [sstate@app-dnd-toggle:7] Set(“SIP/427-b45cde10”, “ITER=2”) in new stack
– Executing [sstate@app-dnd-toggle:8] GotoIf(“SIP/427-b45cde10”, “0?begin”) in new stack
– Executing [sstate@app-dnd-toggle:9] Return(“SIP/427-b45cde10”, “”) in new stack
– Executing [*76@from-internal:8] Playback(“SIP/427-b45cde10”, “do-not-disturb&activated”) in new stack
– <SIP/427-b45cde10> Playing ‘do-not-disturb’ (language ‘au’)
– <SIP/427-b45cde10> Playing ‘activated’ (language ‘au’)
== Parsing ‘/etc/asterisk/manager.conf’: Found
== Parsing ‘/etc/asterisk/manager_additional.conf’: Found
== Parsing ‘/etc/asterisk/manager_custom.conf’: Found
– Executing [*76@from-internal:9] Macro(“SIP/427-b45cde10”, “hangupcall|”) in new stack
– Executing [s@macro-hangupcall:1] ResetCDR(“SIP/427-b45cde10”, “w”) in new stack
– Executing [s@macro-hangupcall:2] NoCDR(“SIP/427-b45cde10”, “”) in new stack
– Executing [s@macro-hangupcall:3] GotoIf(“SIP/427-b45cde10”, “1?skiprg”) in new stack
– Goto (macro-hangupcall,s,6)
– Executing [s@macro-hangupcall:6] GotoIf(“SIP/427-b45cde10”, “1?skipblkvm”) in new stack
– Goto (macro-hangupcall,s,9)
– Executing [s@macro-hangupcall:9] GotoIf(“SIP/427-b45cde10”, “1?theend”) in new stack
– Goto (macro-hangupcall,s,11)
– Executing [s@macro-hangupcall:11] Hangup(“SIP/427-b45cde10”, “”) in new stack
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on ‘SIP/427-b45cde10’ in macro ‘hangupcall’
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on ‘SIP/427-b45cde10’

The issue is, if the user presses the DND button on the SNOM phone before this processing is complete, the DND status display on the phone toggles even though the Asterisk functionality hasn’t been invoked, leaving it out of sync with Asterisk. It obviously doesn’t wait for a response from Asterisk. We can’t rely on users waiting for the Asterisk processing to complete before they toggle their DND status again.

Does anyone know of a solution to this issue other than disabling the DND button and using a function key?

We’re using SNOM320’s and SNOM370’s V7.3.10a

Regards