Skip to content
Docs · Install

Install AMDelete on a VICIdial dialer

About ten minutes per dialer. The installer checks everything first and changes nothing if a check fails.

Before you start

  • VICIdial with Asterisk 13 or newer (ViciBox and scratch installs both work)
  • Root shell on each dialer (every server that places outbound calls for the campaigns you'll use)
  • Python 3.6 or newer (preinstalled on ViciBox, AlmaLinux and Rocky)
  • Outbound HTTPS from the dialer to api.amdelete.com and amdelete.com

1. Get your install command

In the console, open Installations and click Get the install command. You get one line, made for your account:

curl -fsSL https://amdelete.com/install.sh | sudo bash -s -- --code ams_…

The same command works on up to 10 dialers for 24 hours, so a whole cluster takes one copy. There are no API keys to copy: each dialer exchanges the code for its own keys. Account admins get an email whenever a dialer connects. When you've finished, click I'm done: turn it off. Dialers already installed keep working.

2. Run it on each dialer

Paste the command as root on every server that places outbound calls for your AMDelete campaigns. In order, the installer:

  1. runs a read-only preflight (Asterisk, VICIdial, Python, dialplan shape, route collisions, clock, network latency);
  2. connects the dialer to your account over HTTPS. It sends the dialer's profile and receives keys made for this dialer: a classify key, an unbilled test key and a signing secret. They are tied to the dialer's public address and written only to root-readable files in /etc/amdelete/. The dialer appears in your console under its hostname;
  3. backs up everything it will touch to /var/backups/amdelete/;
  4. installs two AGI scripts, the extensions-de-amdelete.conf dialplan include and /etc/amdelete/, then reloads the dialplan;
  5. runs a self-test call through the real dialplan (free);
  6. starts the amdelete-agent timer, which reports health to your console every minute.

The dialer now appears as Healthy in the console. No calls use AMDelete yet. Running the command again on the same dialer re-installs it and replaces its keys.

Reading the script first

curl -fsSLo install.sh https://amdelete.com/install.sh
less install.sh
sudo bash install.sh --code ams_…

It's a short shell script. It downloads the signed AMDelete kit, checks the kit's SHA-256 against the value printed inside the script, and hands over to amdelete-ctl. It passes the code in a file only root can read, and deletes that file when it finishes.

3. Switch a campaign

sudo amdelete-ctl configure-vicidial --campaign SALES1

This adds AMDelete's statuses (ADMAC, ADVM…) and its status map to VICIdial. It shows you what it will add and changes nothing until you re-run it with --yes. It refuses if a status or map with the same name already means something else. It never edits the campaign itself: it prints the two campaign settings to change in VICIdial's admin screens, and your console's page for each dialer shows them too.

Install on every dialer first. A campaign on AMDelete can place calls from any active dialer in your cluster. The console warns you if one doesn't have AMDelete.

4. Watch, then widen

Give the campaign a day. Analytics → What your agents found compares it with your campaigns still on VICIdial AMD, from your agents' own dispositions. Then switch more campaigns the same way.

What your dialer reports

Besides the call audio it sends for classification, the agent on your dialer reports:

WhatWhenContains
HealthEvery minuteCheck results, routing switches, campaigns on AMDelete routes, and hourly decision counts and timings
Dialer profileAt install, then dailyCPU, memory and load; OS, Asterisk and VICIdial versions; VICIdial AMD settings; counts of servers, agents and campaigns; settings of campaigns on an AMD route; carrier protocols and codecs
Call outcomesEvery 5 minutes, about 30 minutes after each callPer AMDelete call: our decision, whether an agent took it, VICIdial's meaning of the disposition (human answered, customer contact, answering machine), a call-length range and who hung up
VICIdial AMD countsHourlyOn your campaigns still using VICIdial AMD: how many calls it passed or closed, and what agents found on the ones it passed

None of it carries call ids, phone numbers, lead or list data, agent names, carrier hosts or credentials. Calls are identified only by the one-way hash the service already keeps for billing. Look before it's sent:

sudo amdelete-ctl profile              # the profile, exactly as sent
sudo amdelete-ctl outcomes preview     # the next batch of call outcomes
sudo amdelete-ctl outcomes off         # stop outcome reporting on this dialer

An account owner can also turn outcome reporting off for every dialer in Settings. Either switch stops it at the next report, and calls from a period when it was off are never sent later.

Turning it off

sudo amdelete-ctl kill        # every call back to VICIdial AMD, now
sudo amdelete-ctl resume      # undo
sudo amdelete-ctl uninstall   # switch campaigns back to their previous AMD first

kill takes effect on the next call with no dialplan reload. uninstall refuses while a campaign still uses AMDelete, or while AMDelete calls are in progress. It removes only what AMDelete added: its files and its one include line, never the rest of your dialplan.

If a preflight check fails

Run sudo amdelete-ctl preflight again at any time; it only reads. Blockers stop the install, warnings don't.

CheckKindWhat to do
Running as rootBlockerRun the installer with sudo.
Asterisk 13 or newerBlockerStart Asterisk (systemctl start asterisk), or upgrade it if it's older than 13.
VICIdial installedBlockerRun on a VICIdial dialer: the installer reads /etc/astguiclient.conf to find the server and database.
Local fallback is completeBlockerBy default, route 8369 must be stock VICIdial AMD (call_log, then AMD()). To use another fallback, define both precheck and postcheck in a customer-owned [de-amdelete-fallback] context. AMDelete reads that context locally and never creates, reports or changes its destination.
A free extension for AMDelete's routeBlockerThe installer picks an extension nothing in your dialplan or campaigns uses. This fails only if every candidate is taken; contact support.
No unloaded dialplan editsBlockerSomeone edited the dialplan files since Asterisk last loaded them. Installing reloads the dialplan, which would apply those edits too, so reload or revert them yourself first.
No AMDelete setup from another installerBlocker/etc/amdelete already holds a configuration the installer didn't create. Contact support; it won't overwrite it.
AMDelete's file paths are freeBlockerAnother product's file sits where AMDelete would write. The installer lists it and leaves it alone.
Clock within a minute of the consoleBlocker over 5 minutesEnable time sync (chronyd or ntpd). Requests from the dialer are signed with a timestamp.
Console reachableBlockerAllow outbound HTTPS to amdelete.com through any firewall or proxy.
VICIdial database readableWarningCampaign checks and cluster alerts need read access. Install the mysql client, or check the credentials in astguiclient.conf.
AMDelete service reachableWarningAllow outbound HTTPS to api.amdelete.com. A slow path (p95 over 150 ms) works but delays decisions.
At least 1 GB free in /var/logWarningFree space so decision logs and logrotate keep working.
Self-test prompt availableWarningInstall Asterisk's core sounds (demo-congrats) so the self-test has audio to play.

Still stuck? Run sudo amdelete-ctl support-bundle and send the file it prints to support. It holds versions, the dialer profile, check results and the last 500 decision-log lines (Asterisk call ids, outcomes and timings). It never contains call audio, phone numbers or keys.