Docs / Integrations / Issabel
Integrate AMDY AMD with Issabel
AMDY.IO is an AI-powered answering machine detection (AMD) service that classifies calls as human or machine in real time over WebSocket. Issabel is an open-source PBX built on Asterisk. Because Issabel runs standard Asterisk under the hood, the AMDY detection protocol and the generic Asterisk installer apply to Issabel the same way they apply to any Asterisk-based dialer.
How does the detection connection work?
On every answered call, the AMDY script opens a WebSocket to the AMDY backend, streams raw PCM audio, and receives a classification. The connection details are the same regardless of whether the PBX is Issabel or another Asterisk distribution.
| Parameter | Value |
|---|---|
| WebSocket endpoint | ws://api.amdy.io:2700 |
| Audio format | 8 kHz, 16-bit, mono, raw PCM (signed little-endian) |
| Authentication | X-API-Key header, loaded from /etc/amdy/api-key |
| Config frame | {"config":{"sample_rate":8000,"VID":"<caller ID>"}} |
| End-of-stream signal | {"eof":1} |
| API key format | amd_live_ + 24 or 32 hex chars |
The VID field carries call identity (caller ID name). If it is empty, AMDY records it as Unknown. The config frame is sent as a text frame before any audio.
Which AMDY installer applies to Issabel?
Issabel does not have its own AMDY installer script. Because Issabel runs Asterisk, the generic Asterisk installer is the integration path. It installs the Python EAGI script, registers your server IP, and sets up the API key.
curl -sL https://download.amdy.io/installamd-asterisk.sh | bash -s -- YOUR_API_KEY
The installer:
- Downloads amd.py to /var/lib/asterisk/agi-bin/amdy-amd.py
- Stores the API key at /etc/amdy/api-key (mode 600)
- Installs Python dependencies (pyst2, websocket-client)
- Calls POST /api/v1/ips/register with Bearer auth to activate your account
Verify the install by checking that the script is in place and that the Python imports load:
python3 -c "from asterisk.agi import AGI; from websocket import create_connection; print('OK')"What channel variables control routing?
After the EAGI script runs, Asterisk exposes three channel variables. Your Issabel dialplan reads these to decide whether to bridge the call to an agent, send it to voicemail, or hang up.
| Variable | Values | Description |
|---|---|---|
| AMDSTATUS | HUMAN, MACHINE, HANGUP, NOTSURE | Detection result |
| AMDCAUSE | HUMAN, MACHINE, CONNECTION_ERROR, PROCESSING_ERROR, NO_AUDIO, AUDIO_TIMEOUT, NO_AUDIO_TIMEOUT, FATAL_ERROR | Reason code for the result |
| AMDSTATS | Raw response string | Full AMDY response with timing data |
On any error, the script defaults to HUMAN for call safety. A machine reaching an agent is preferable to hanging up on a real caller.
What does the Issabel dialplan look like?
Issabel-specific dialplan examples are not published in the AMDY installer scripts. The generic Asterisk installer prints a reference example that shows the pattern:
exten => s,1,Answer()
exten => s,n,EAGI(amdy-amd.py)
exten => s,n,GotoIf($["${AMDSTATUS}" = "HUMAN"]?human:machine)Where to place this in your Issabel dialplan depends on your outbound route configuration. For Issabel-specific dialplan integration, contact us for integration access.
What is not yet verified for Issabel?
The following parts of the Issabel integration path are not yet verified from published installer scripts or source code. Contact us before relying on them in production.
| Item | Status |
|---|---|
| Issabel-specific installer script | Not published. Use the generic Asterisk installer. |
| Issabel dialplan snippet | Contact us for integration access. |
| TLS / wss:// WebSocket endpoint | Only ws:// (port 2700) is verified. Contact us for TLS. |
| Issabel version compatibility matrix | Contact us for integration access. |
Frequently asked questions
Does AMDY have a dedicated Issabel installer?
No. Issabel runs Asterisk, so the generic Asterisk installer (installamd-asterisk.sh) is the supported path. There is no Issabel-specific script published today.
Where do I get my API key?
From the AMDY portal. Sign up, navigate to your account settings, and generate a key. Keys follow the format amd_live_ followed by 24 or 32 hex characters.
What if the WebSocket connection fails?
Verify outbound TCP to api.amdy.io:2700 is not blocked by your firewall. The script defaults to AMDSTATUS=HUMAN on connection errors so that calls are not silently dropped.
Is there a TLS-encrypted WebSocket endpoint?
Only ws://api.amdy.io:2700 (unencrypted) is verified in published sources. Contact [email protected] to ask about a wss:// endpoint.
Can I use the same AMDY account on multiple Issabel servers?
Yes. Each server registers its own public IP via POST /api/v1/ips/register. Use the same API key on every server. See the API reference for details.
Ready to start?
Sign up at app.amdy.io to get your API key and run the Asterisk installer on your Issabel server. For Issabel-specific dialplan integration or a TLS endpoint, email [email protected].