I have posted the dialplan below, but its just the default creation that FREEPBX13 does for custom extensions. I already show hints (and that my test phones have subscribed to them).
Since the hints already exist, I’m assuming these lines (hints, below) in your example aren’t necessary to add to my dialplan (since they are essentially already there).
[hints]
exten => _10XXX,hint,Custom:${EXTEN}@hints
exten => _7XXXX,hint,Custom:${EXTEN}@hints
Here’s the current status of one of those hints:
1011@ext-local : CUSTOM/1011&Custom:D State:Unavailable Presence:not_set Watchers 2
You’ll note the state remains Unavailable, and is ignoring my devstate commands, even though devstate shows “state changed to x” when I issue it.
Here’s one of the test custom extensions (1011):
exten => FM1011,1,Goto(1011,FM1011)
exten => 1011,1,GotoIf($[ “${DB(AMPUSER/1011/followme/ddial)}” = “EXTENSION” ]?ext-local,1011,1)
exten => 1011,n(FM1011),Macro(user-callerid,)
exten => 1011,n,Set(DIAL_OPTIONS=${DIAL_OPTIONS}I)
exten => 1011,n,Set(CONNECTEDLINE(num,i)=1011)
exten => 1011,n,Gosub(sub-presencestate-display,s,1(1011))
exten => 1011,n,Set(CONNECTEDLINE(name)=${DB(AMPUSER/1011/cidname)}${PRESENCESTATE_DISPLAY})
exten => 1011,n,Set(FM_DIALSTATUS=${EXTENSION_STATE(1011@ext-local)})
exten => 1011,n,Set(__EXTTOCALL=${EXTEN})
exten => 1011,n,Set(__PICKUPMARK=${EXTEN})
exten => 1011,n,Macro(blkvm-setifempty,)
exten => 1011,n,GotoIf($["${GOSUB_RETVAL}" = “TRUE”]?skipov)
exten => 1011,n,Macro(blkvm-set,reset)
exten => 1011,n,Set(__NODEST=)
exten => 1011,n(skipov),Set(RRNODEST=${NODEST})
exten => 1011,n(skipvmblk),Set(__NODEST=${EXTEN})
exten => 1011,n,GosubIf($[${DB_EXISTS(AMPUSER/1011/followme/changecid)} = 1 & “${DB(AMPUSER/1011/followme/changecid)}” != “default” & “${DB(AMPUSER/1011/followme/changecid)}” != “”]?sub-fmsetcid,s,1())
exten => 1011,n,Set(RecordMethod=Group)
exten => 1011,n(checkrecord),Gosub(sub-record-check,s,1(exten,1011,))
exten => 1011,n(skipsimple),Set(RingGroupMethod=ringallv2-prim)
exten => 1011,n,Set(_FMGRP=1011)
exten => 1011,n(DIALGRP),GotoIf($[("${DB(AMPUSER/1011/followme/grpconf)}"=“ENABLED”) | ("${FORCE_CONFIRM}"!="") ]?doconfirm)
exten => 1011,n,Macro(dial,$[ ${DB(AMPUSER/1011/followme/grptime)} + ${DB(AMPUSER/1011/followme/prering)} ],${DIAL_OPTIONS},${DB(AMPUSER/1011/followme/grplist)})
exten => 1011,n,Goto(nextstep)
exten => 1011,n(doconfirm),Macro(dial-confirm,$[ ${DB(AMPUSER/1011/followme/grptime)} + ${DB(AMPUSER/1011/followme/prering)} ],${DIAL_OPTIONS},${DB(AMPUSER/1011/followme/grplist)},1011)
exten => 1011,n(nextstep),Set(RingGroupMethod=)
exten => 1011,n,GotoIf($[“foo${RRNODEST}” != “foo”]?nodest)
exten => 1011,n,Set(__NODEST=)
exten => 1011,n,Set(__PICKUPMARK=)
exten => 1011,n,Macro(blkvm-clr,)
exten => 1011,n,Set(DIALSTATUS=${IF($["${FM_DIALSTATUS}"=“NOT_INUSE”&"${DIALSTATUS}"!=“CHANUNAVAIL”]?NOANSWER:${IF($["${DIALSTATUS}"=“CHANUNAVAIL”|"${FM_DIALSTATUS}"=“UNAVAILABLE”|"${FM_DIALSTATUS}"=“UNKNOWN”|"${FM_DIALSTATUS}"=“INVALID”]?CHANUNAVAIL:BUSY)})})
exten => 1011,n,Goto(ext-local,1011,dest)
exten => 1011,n(nodest),Noop(SKIPPING DEST, CALL CAME FROM Q/RG: ${RRNODEST})