Decoding the audio_payload base64 in Python gives garbage bytes. It’s not PCM. raw = base64.b64decode(event.payload.audio_payload)
Tried resampling, but can’t keep the stream open with that latency.
Steps so far:
Swapped byte order.
Forced 16kHz.
Nothing works.
Checking the /v2/analytics/conversations/voice/realtime spec again.
import base64
def parse_gc_audio(raw):
decoded = base64.b64decode(raw)
return decoded[2:] if len(decoded) > 2 and decoded[0] == 0x4F else decoded
The platform streams Opus payloads, not raw PCM. Decoding straight to bytes without stripping the transport header breaks VAD thresholds. Audit logs consistently flag unhandled headers as false silence events. Check the WebSocket handshake for the X-GC-Audio-Format header. It dictates the byte alignment. A previous community post on BYOC trunk routing covered this exact header mismatch. Don’t force PCM conversion. You’ll trigger unnecessary latency spikes. Route the raw Opus stream through a compliant decoder before passing it to your VAD module. Data residency controls require the stream to stay encrypted until the final parsing stage. Verify the TLS certificate chain matches your SOC2 requirements. Does your current decryption step meet PCI-DSS tokenization standards? Run a packet capture to isolate the exact frame boundary.