handleDial published to the calls.track subject keyed by channel.id, while
trackCall registers the client stream keyed by the ref CreateCall returned.
The two identifiers never match, so every dial event was dropped and the
statusStream from Calls.createCall stayed empty for the life of the call.
Resolve the CALL_REF channel variable, which the originate in runCallManager
and the local-ctx-common dialplan both set, and publish under that. Channels
with no call ref have no TrackCall request waiting on them, so the event is
skipped instead of published under an id nothing can match.
Refs #883
The greeting and announcingIdleTimeout states accepted SPEECH_START
unconditionally, so the caller cut the first message and the idle prompt
short even with allowUserBargeIn set to false, unlike processingUserRequest
and waitingForSpeechTimeout which already guard that event.
Guarding the event alone would drop the utterance: idle only listens for
SPEECH_START, so speech produced while the assistant was talking would
never be processed. Both playing states now buffer SPEECH_RESULT without
stopping playback and hand it to waitingForSpeechTimeout when the message
finishes, and idle accepts a SPEECH_RESULT that lands right after playback
ended.
Closes#891