fix: always include parameters field in Genesys AudioHook messages
The AudioHook protocol requires every message to carry a `parameters` object. `_create_message` conditionally included it only when parameters were truthy, so pong responses and closed responses without outputVariables were sent without the field. Clients that validate message structure (including the Genesys reference implementation) rejected these messages, which broke server sequence tracking and prevented outputVariables from reaching the Architect flow. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
7
changelog/0000.fixed.md
Normal file
7
changelog/0000.fixed.md
Normal file
@@ -0,0 +1,7 @@
|
||||
- Fixed Genesys AudioHook serializer to always include the `parameters` field in
|
||||
protocol messages. The AudioHook protocol requires every message to carry a
|
||||
`parameters` object (even if empty), but `_create_message` omitted it when no
|
||||
parameters were provided. This caused clients that validate message structure
|
||||
(including the Genesys reference implementation) to reject `pong` and
|
||||
parameter-less `closed` responses, breaking server sequence tracking and
|
||||
preventing `outputVariables` from reaching the Architect flow.
|
||||
@@ -336,8 +336,7 @@ class GenesysAudioHookSerializer(FrameSerializer):
|
||||
if include_position:
|
||||
msg["position"] = self._format_position(self._position)
|
||||
|
||||
if parameters:
|
||||
msg["parameters"] = parameters
|
||||
msg["parameters"] = parameters if parameters is not None else {}
|
||||
|
||||
return msg
|
||||
|
||||
|
||||
@@ -76,6 +76,7 @@ class TestGenesysAudioHookSerializer:
|
||||
|
||||
assert msg["type"] == "pong"
|
||||
assert msg["id"] == serializer.session_id
|
||||
assert msg["parameters"] == {}
|
||||
|
||||
def test_create_closed_response(self):
|
||||
"""Test creating a closed response message."""
|
||||
@@ -86,7 +87,7 @@ class TestGenesysAudioHookSerializer:
|
||||
|
||||
assert msg["type"] == "closed"
|
||||
assert serializer.is_open is False
|
||||
assert "parameters" not in msg # No parameters when no output_variables
|
||||
assert msg["parameters"] == {} # Empty parameters when no output_variables
|
||||
|
||||
def test_create_closed_response_with_output_variables(self):
|
||||
"""Test creating a closed response with custom output variables."""
|
||||
|
||||
Reference in New Issue
Block a user