Asterisk Автообзвон - Autodialer

Примеры реализации автодайлер (autodialer) на Asterisk.

Роботизированный исходящий колл-центр

Роботизированный Колл-Центр
  • Запуск нескольких кампаний одновременно.
  • Ограничение одновременных вызовов.
  • Предиктивный набор для Колл Центра.
  • Обзвон по базе данных.
  • Экпорт/Импорт csv.
  • Запуск по расписанию.
  • Ограничение временных диапазонов работы кампании, для защиты от неурочных звонков.
  • Запись разговоров и поиск вызовов по базе обзвона.
  • Управление через веб интерфейс или через API.

Реализация автоматического обзвона абонентов (автодозвона) при помощи Asterisk и call файлов. Bash скрипт генерирует 'Call File' на основании списка номеров из текстового файла и копирует в директорию /var/spool/asterisk/outgoing. Asterisk вызывает номер на основании информации из 'call file' и отправляет на обработку в заданный контекст или приложение плана набора.
Все очень просто и эффективно.

Синтаксис Call File:

Логика 'Call File' такая же, как и команды originate.
Сначала инициируется 'Channel', если заданный в данном параметре номер отвечает,
вызывается 'Extension' или 'Application' и соединяются с 'Channel'.
Если 'Channel' не отвечает в течении 'WaitTime', а параметр 'MaxRetries' больше нуля,
предпринимается заданное кол-во попыток 'MaxRetries' с интервалом 'RetryTime'.

Параметры канала
  • Channel: <channel>: инициируемый канал (например Local/${number}/from-autodial )
  • CallerID: «name» <number> Caller ID, требуемый формат: CallerID: «Имя» <1234>
  • MaxRetries: <number> Кол-во попыток набора на каждый номер в списке (По умолчанию 0. Если установлено '0', будет совершена одна попытка, если '1' то две)
  • RetryTime: <number> Время в секундах между попытками. (Seconds between retries, Don't hammer an unavailable phone. По умолчанию 300 (5 min).)
  • WaitTime: <number> Время посылки вызова. (По умолчанию 45.)
  • Account: Аккаунт для вызова.
Параметры расширения:
  • Context: <context-name> Контекст для приема вызова, когда абонент ответил (extensions.conf)
  • Extension: <ext> Extension (расширение например:exten⇒ s,…) в контексте (extensions.conf)
  • Priority: <priority> Приоритет в контексте.
  • Set: Установить переменную канала для вызова (example: file1=/tmp/to );
  • Application: Приложение Asterisk (используется вместо context, extension, priority)
  • Data: Данные приложения (например: PlayBack(data))
  • AlwaysDelete: Yes/No - Удалять файлы по завершении.
  • Archive: Yes/No - Перемещать выполненные файлы в директорию outgoing_done с указанием статуса с которым завершилось задание «Status: value», где возможны значения
    • Completed - Успешно.
    • Expired - Просрочено.
    • Failed - Неудачно.

Expired или Failed отличаются по статусу вызова. Если вызов удался, но на него не ответили в заданное время вызова и кол-во попыток, то Expired. Если вызов не удалось инициировать вообще, то Failed.

пример архивного файла

пример архивного файла

Channel: Local/00089XXXXXXXXX@from-fs-alarm
Callerid:
MaxRetries: 0
RetryTime: 20
WaitTime: 30
Context: alert_mob
Extension: s
Priority: 1
Archive: yes

StartRetry: 3426 1 (1479384177)

DelayedRetry: 3426 0 (1479384177)
Status: Completed

Autodial: пример 1

Вызываются номера по списку и проигрывается сообщение из контекста [outboundmsg1].

dialplan

/etc/asterisk/extensions.conf

/etc/asterisk/extensions.conf

[outboundmsg1]
exten => s,1,Wait(2)
exten => s,n,Playback(/var/lib/asterisk/sounds/custom/you_call_your_friends_are_collectors)
exten => s,n,Hangup
bash script

/var/spool/asterisk/call_list.sh

/var/spool/asterisk/call_list.sh

#!/bin/sh

while read number; do

cat <<EOF  >  /var/spool/asterisk/$number

Channel: SIP/voip_trunk/$number
Callerid: $number
MaxRetries: 200
RetryTime: 20
WaitTime: 30
Context: outboundmsg1
Extension: s
Priority: 1

EOF

    chown asterisk:asterisk /var/spool/asterisk/$number
    mv /var/spool/asterisk/$number  /var/spool/asterisk/outgoing

    echo "$number"

    number=`expr $number + 1`

    while [ "$?" -eq "0" ]

    do
count_files ()

{

    count_f=`ls /var/spool/asterisk/outgoing | wc -l`

        if [ "$count_f" -eq "30" ]; then

            sleep 10

            return 0

        else

            return 1

        fi

}

    count_files

    done

done < /var/spool/asterisk/list.txt

exit 0

Примечания к скрипту:

  • Channel: SIP/voip_trunk/$number - voip_trunk транк через который совершаются вызовы.
  • if [ «$count_f» -eq «30» ]; then - 30 кол-во одновременных вызовов. (фактически это кол-во файлов создаваемых скриптом за один раз, следующие по списку файлы, будут созданы, только по завершению обработки первой группы)

/var/spool/asterisk/list.txt - список обзвона, каждый номер в новой строке.

   101
   102

Tips&Tricks

Если установить параметры файла atime и mtime (access time и modifity time соответственно) в будущем, файл помещенный в директорию outgoing будет выполнен только по наступлении заданного времени.

Изменение меток времени файла командой touch

Изменение меток времени файла командой touch

Модификация time stamp при помощи опций -t и -d

The format for specifying -t is [[CC]YY]MMDDhhmm[.SS]

 $ touch -t [[CC]YY]MMDDhhmm[.SS]

формат:

  • CC – Первые две цифры года.
  • YY – Последние две цифры года CC - 19, YY -16 = 2016
  • MM – Месяц
  • DD – День
  • hh – Часы
  • mm – Минуты
  • SS – Секунды

пример:

 $ touch -a -m -t 203801181205.09 tgs.txt
  • artikle/autodial.txt
  • Последние изменения: 2020/08/08