I don’t claim this is a perfect code (and un-tested) but you can do something like below. Treat this as a hint and work on to improve it.
;Accepts call for *000 to *009
exten => _*00X,1,NoOp(${CALLERID(num)} login/logout)
Same => n,ExecIf($[“${CALLERID(num)}” = “${EXTEN:1}”]?NoOp(Accepts call):HangUp())
same => n,GotoIf({REGEX("SIP/${CALLERID(num)}",{DB(Queue/PersistentMembers/support)})}?logout,1:login,1)
exten => logout,1,NoOp(SIP ${CALLERID(num)} exists, logout)
same => n,RemoveQueueMember(support,SIP/${CALLERID(num)})
same => n,Playback(beeperr)
same => n,Hangup
exten => login,1,NoOp(SIP ${CALLERID(num)} doesn’t exist, login)
same => n,AddQueueMember(support,SIP/${CALLERID(num)})
same => n,Playback(beep)
same => n,Hangup