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:
Pablo Ois Lagarde
2026-03-20 16:37:53 -03:00
parent d8af4447ff
commit bc0e7130b8
3 changed files with 10 additions and 3 deletions

7
changelog/0000.fixed.md Normal file
View 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.

View File

@@ -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

View File

@@ -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."""