genesys-connector-go¶
Status: Current | Last reviewed: 2026-10-07
Genesys Cloud AudioHook / AudioConnector WebSocket bridge to ai-orchestrator. AudioHook supplies a live-call audio tap for Copilots; AudioConnector supplies the voicebot path. SIP/BYOC routing is a separate telephony integration.
Source¶
Runtime¶
| Aspect | Value |
|---|---|
| Language | Go |
| Protocol | Genesys AudioHook over WebSocket |
| Capacity | 5k+ concurrent sessions per pod (production-tuned) |
What it does¶
- Genesys Cloud opens a WebSocket when the configured AudioHook or AudioConnector integration runs.
- The connector decodes audio and presents a gRPC session to ai-orchestrator.
- AudioHook can supply both external/caller and internal/agent channels for a Copilot's transcription. AudioConnector voicebots also return synthesized audio.
- The voicebot path supports Genesys hand-off messages.
A transcript-only Copilot needs no active suggestion workers. See Live Genesys transcripts for the call-ID binding, SDK contract, test-phone options and external SIP embed gaps.
Routing (audiohook/copilot mode)¶
Two connection types share the handler, split by URL path (/genesys/{connection_type}/{agent_id}):
audioconnector(voicebot): the path agent id is used directly — no mapping lookup.audiohook(copilot/monitor): the connector calls ai-managerPOST /api/genesys/lookupwith the open message's ANI/DNIS/ANI-name plus anyinputVariablesascustom_properties. ai-manager evaluates the integration's pipeline-mapping rules (field typesani/dnis/ani_name/custom) and returns the winningpipeline_id. Results are cached (AUTH_CACHE_SECONDS, default 300s) keyed onorg:ani:dnis:aniName+ a deterministic serialization of the custom properties.
Custom routing properties (inputVariables)¶
A source connection may send additional properties in the AudioHook open message as inputVariables (top-level or under parameters — same shape as the AudioConnector path). These are optional, so spec-plain Genesys AudioHook monitors are unaffected. When present they:
- Feed the routing lookup as
custom_properties(matched byfield_type='custom'mapping rules with afield_key). - Are forwarded to the orchestrator as gRPC
metadata["session_variables"]— for both connection types (audiohook previously dropped them). The connector-injectedagentId/ani/dnis/callerNamelive inparameters.inputVariablesand win over source-sent top-level keys on collision.
Property definitions (key/label/description) are managed per integration in ai-manager's Pipeline Mapping modal; free-form keys are also accepted in rules.
Dependencies¶
| Service | Purpose |
|---|---|
| ai-orchestrator | Session start + audio gRPC |
| Postgres | Tenant lookup, integration credentials |
| Genesys Cloud | AudioHook + transfer APIs |
Vanguard¶
Started by scripts/start-genesys-connector.sh under Overmind. Public ingress at genesys.<host>.dev.trueserve.deloitte.com.
Production¶
Helm chart at charts/genesys-connector-go. Two paths in production:
- EC2 + GA: Global Accelerator fronts the connector; rtpengine sits behind on the same node pool.
- GKE/EKS: hostNetwork pods on a dedicated media node pool.
SIP/BYOC pairing¶
When the deployment also uses the TrueServe SIP/BYOC path, three things must
line up: Global Accelerator TCP :5065, a per-city Kamailio TLS cert that
Genesys trusts, and a trunk ACL with the shared NAT egress IP. Mismatch can
produce 404 Not Found on transfer. These SIP requirements are separate from
the AudioHook WebSocket tap on a Genesys call.