PLXY AI Call Center voice gateway โ call control between a SIP trunk and a 3CX agent pool
121
Call manager of the PLXY AI Call Center. It drives the telephony engine over FreeSWITCH's Event Socket, opens one AI session per call, plays back rendered speech, collects DTMF, and hands the caller to a 3CX agent when the scenario asks for a transfer.
Part of a five-image platform that answers calls from a SIP trunk, runs an AI conversation, and transfers to a 3CX agent when the flow says so.
๐ Deployment guideโ ยท Configuration referenceโ
This image runs on the DMZ host, beside plxy-voice-gateway-media, in a Swarm of its own โ
separate from the internal cluster that runs the control plane.
SIP trunk โโโถ plxy-voice-gateway-media โโโถ 3CX agents
โฒ ESL 127.0.0.1:8021
plxy-voice-gateway โโโ media spool (rendered speech)
โ
โโโ DMZ boundary โโโโโชโโโ exactly three ports cross โโโ
โผ
plxy-callbot-worker (WebSocket) ยท plxy-callbot-api (REST)
| Port | Purpose |
|---|---|
8080 | Control API โ called by the control plane to originate outbound calls |
Host-networked in the production stack, because it must reach FreeSWITCH's ESL on 127.0.0.1.
The bearer token is defence in depth; the firewall is the control. Nothing but the internal
cluster should be able to reach this port.
| Variable | Required | What it is |
|---|---|---|
CALLBOT_WORKER_WS_URL | โ | Worker WebSocket, as reached from the DMZ โ a routable address, not a service name |
CALLBOT_API_URL | โ | Control plane URL, same rule |
FS_ESL_HOST / FS_ESL_PORT | The media container. Default 127.0.0.1:8021 | |
SPOOL_DIR | Shared media spool. Default /var/spool/plxy-media | |
SERVER_PORT | Default 8080 | |
TRUNK_CONF_DIR | Trunk definitions written for the media container | |
JAVA_OPTS | Default -XX:MaxRAMPercentage=75 |
The two cross-boundary URLs are explicit configuration precisely because the two halves are separate Swarms โ joining the DMZ host to the internal cluster would mean opening Swarm's control and data planes across the boundary.
Read from mounted files, never the environment:
FS_ESL_PASSWORD_FILE ยท VGW_WORKER_TOKEN_FILE ยท VGW_CONTROL_TOKEN_FILE ยท
INTERNAL_API_TOKEN_FILE
The two token secrets are shared with the internal cluster and must be created identically on
both Swarms โ deploy/swarm/secrets-init.sh prints the handoff.
This image is one service of the gateway stack and needs plxy-voice-gateway-media beside it.
On the DMZ host:
git clone https://github.com/SengPhirum/PLXY_AICC.git && cd PLXY_AICC
deploy/swarm/secrets-init.sh gateway prod
TAG=0.1.0 deploy/swarm/deploy.sh gateway prod
Firewall table, the shared-token handoff, and why the gateway is host-networked: https://sengphirum.github.io/PLXY_AICC/setup-guideโ
latest tracks the newest release. Pin the version tag (0.1.0) in production, and use the
same tag for all five images โ they ship as one set.
plxy-voice-gateway-mediaโ ยท
plxy-callbot-apiโ ยท
plxy-callbot-uiโ ยท
plxy-callbot-workerโ
Content type
Image
Digest
sha256:4d2ffb842โฆ
Size
115.8 MB
Last updated
about 1 month ago
docker pull phirumseng/plxy-voice-gateway