Dial plans, extensions, and includes

I have the following:

[200] ; Alice
include => page

[page]
exten => *96,1,Goto(intercom,s,1)

[intercom]
exten => s,1,Answer
  same => n,Playback(beep)
  same => n,SIPAddHeader(Call-Info: answer-after=0)
  same => n,SIPAddHeader(Alert-Info: Ring Answer)
  same => n,Set(TIMEOUT(digit)=5)
  same => n,WaitExten(10)

exten => *,1,NoOp()
  same => n,Page(SIP/200&SIP/201&SIP/202)

exten => _XXX,1,NoOp()
  same => n,Page(SIP/${EXTEN})

This works. I can dial *96, then dial * or an extension to page those phones. The following does not work. I can dial *96, or I can dial *, or I can dial an extension. The * and the extensions are no longer “subsections” of the [intercom] context like they used to be. Is this just how this is supposed to be done? It seems somewhat redundant to have to have the extra goto.

[200] ; Alice
include => intercom

[intercom]
exten => *96,1,Answer
  same => n,Playback(beep)
  same => n,SIPAddHeader(Call-Info: answer-after=0)
  same => n,SIPAddHeader(Alert-Info: Ring Answer)
  same => n,Set(TIMEOUT(digit)=5)
  same => n,WaitExten(10)

exten => *,1,NoOp()
  same => n,Page(SIP/200&SIP/201&SIP/202)

exten => _XXX,1,NoOp()
  same => n,Page(SIP/${EXTEN})

They are not sub-sections of 200, rather than not sub-sections of intercom, although I’m surprised that it doesn’t search includes in WaitExten.

Is there a way to make something like my second example work?

Use a goto to change the context.