Applications currently have no way to observe a mid-call hold/un-hold.
The feature-server handles the in-dialog re-INVITE internally (re-modifies
the endpoint, returns 200) but never notifies the app, so a transcription
or agent-assist app can't pause/resume when a caller is held or retrieved.
This detects the hold state transition on a re-INVITE and delivers it over
the existing sipRequestWithinDialogHook channel as a verb:hook, plus emits
a local 'hold'/'unhold' event so in-process tasks (e.g. transcribe) can react.
- call-session.js: ordinary calls — reuse isOnhold() (a=sendonly/a=inactive).
- siprec-call-session.js: SIPREC overrides _onReinvite, so a separate handler
is required. SIPREC recording streams are sendonly by nature, so a stream
flipping to a=inactive is treated as the hold signal; the full multipart
body (SDP + rs-metadata) is always forwarded. Fires on transition only;
other re-INVITEs are delivered as event:"reinvite".
Delivery uses requestor.request('verb:hook', ...) — the same channel
_handleRefer uses — rather than a task-bound performHook, so events are not
dropped if the current task has ended. Enable per call with:
{"verb":"config","sipRequestWithinDialogHook":"/hold-events"}
Confirmed live against Cisco CUBE (Cisco-SIPGateway/IOS-17.12.7b) over SIPREC:
both recording streams flip sendonly<->inactive on hold/resume, each
transition emitted correctly.
The whole feature is opt-in behind the JAMBONES_HOLD_UNHOLD_EVENTS env var;
when it is unset, _notifyHoldState / _notifySipRecReinvite are no-ops (neither
the local event nor the hook fires).
Reinstates the feature previously reverted in #1563. The revert was due to the
unit test failing in the full suite: lib/config.js captures the env var once at
load time, and earlier suite files require config/session modules (flag unset)
before this test could set it, so the enabled-path assertions saw a disabled
feature. The test now force-reloads config + the session modules with the flag
set (and restores the module cache afterward), so it is robust to suite load order.
Applications currently have no way to observe a mid-call hold/un-hold.
The feature-server handles the in-dialog re-INVITE internally (re-modifies
the endpoint, returns 200) but never notifies the app, so a transcription
or agent-assist app can't pause/resume when a caller is held or retrieved.
This detects the hold state transition on a re-INVITE and delivers it over
the existing sipRequestWithinDialogHook channel as a verb:hook, plus emits
a local 'hold'/'unhold' event so in-process tasks (e.g. transcribe) can react.
- call-session.js: ordinary calls — reuse isOnhold() (a=sendonly/a=inactive).
- siprec-call-session.js: SIPREC overrides _onReinvite, so a separate handler
is required. SIPREC recording streams are sendonly by nature, so a stream
flipping to a=inactive is treated as the hold signal; the full multipart
body (SDP + rs-metadata) is always forwarded. Fires on transition only;
other re-INVITEs are delivered as event:"reinvite".
Delivery uses requestor.request('verb:hook', ...) — the same channel
_handleRefer uses — rather than a task-bound performHook, so events are not
dropped if the current task has ended. Enable per call with:
{"verb":"config","sipRequestWithinDialogHook":"/hold-events"}
Confirmed live against Cisco CUBE (Cisco-SIPGateway/IOS-17.12.7b) over SIPREC:
both recording streams flip sendonly<->inactive on hold/resume, each
transition emitted correctly.
The whole feature is opt-in behind the JAMBONES_HOLD_UNHOLD_EVENTS env var;
when it is unset, _notifyHoldState / _notifySipRecReinvite are no-ops (neither
the local event nor the hook fires).
* fix say verb does not close streaming when finish say
* wip
* wip
* ttsStreamingBuffer reset eventHandlerCount after remove listeners
* only send tokens to module if connected
* wip
* sent stream_open when successfully connected to vendor
* Revert "Update dial.js (#1243)"
This reverts commit 259dedcded.
* add to .gitignore
* when we receive a REFER on the parent leg, after adulting the child the dial task in the parent session should end
* fixed dial transcribe is not able to received final transcribe when close call.
* wip
* fix review comment
* support call session delay detroy ep when current task is transcribe
* wip
* wip
* fixed review comments
* fixed review comments
* fix transcribe fixes for speechmatics
* update to verb-specs with fixes for speechmatics
* add support for speechmatics translation
* add handlers for receiving translations
* call translation hookd
* gather: no need to restart speechmatics after a final transcript during continuous asr
* graceful shutdown
* wip
* wip
* wip
* wip
* wip
* feature server should send USER call to the sbc sip that is connect with the user
* feature server should send USER call to the sbc sip that is connect with the user
* feature server should send USER call to the sbc sip that is connect with the user
* fix review comment
* add env variable to enable the feature
* add env variable to enable the feature
* add env variable to enable the feature
* minor test update
---------
Co-authored-by: Dave Horton <daveh@beachdognet.com>
* fix to be more precise about removing custom event handlers so that when we stop a gather we dont also inadvertently stop a background transcribe as well
* test fixes
* fix: endpointing=false was being ignored for Deepgram
* fix release freeswitch media properly
* if a leg is opus, modify b leg offer opus first
* if a leg is opus, modify b leg offer opus first
* wip
* wip
* fix review comments
* fix review comments
* fix review comments
Add support for sending 'amd' property in createCall REST API and also added support for using any of the speech vendors for STT
---------
Co-authored-by: Dave Horton <daveh@beachdognet.com>
* initial changes for soniox
* changes to gather for soniox
* parse soniox stt results
* handle <end> token for soniox
* soniox: handle empty array of words
* support for soniox hints
* add soniox storage options
* update to verb specs
* add support for transcribe
* compile soniox transcripts
* gather: kill no input timer for soniox when we get interim results
* fix buffering of soniox transcripts
* fix for compiling soniox transcript
* another fix for compiling soniox transcript
* another fix
* handling of <end> token
* fix soniox bug
* gather: fixes for soniox continous asr
* fix undefined variable reference
* fix prev commit
* bugfix: allow verb_status requests
* gather: for soniox no need to restart transcription after final transcription received
* update verb specs
* update verb specs, fixes for continuous asr: