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.

Running ViciDial, FreeSWITCH, or plain Asterisk instead? Use the ViciDial guide, the FreeSWITCH guide, or the Asterisk guide. This page is specific to the Issabel integration path.

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.

ParameterValue
WebSocket endpointws://api.amdy.io:2700
Audio format8 kHz, 16-bit, mono, raw PCM (signed little-endian)
AuthenticationX-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 formatamd_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.

VariableValuesDescription
AMDSTATUSHUMAN, MACHINE, HANGUP, NOTSUREDetection result
AMDCAUSEHUMAN, MACHINE, CONNECTION_ERROR, PROCESSING_ERROR, NO_AUDIO, AUDIO_TIMEOUT, NO_AUDIO_TIMEOUT, FATAL_ERRORReason code for the result
AMDSTATSRaw response stringFull 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.

ItemStatus
Issabel-specific installer scriptNot published. Use the generic Asterisk installer.
Issabel dialplan snippetContact us for integration access.
TLS / wss:// WebSocket endpointOnly ws:// (port 2700) is verified. Contact us for TLS.
Issabel version compatibility matrixContact 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].