AsterConnector v2.0
Интеграция Asterisk FreePBX/Issabel с Битрикс24. Единый PHP файл-демон с встроенным HTTP сервером, AMI клиентом и OAuth2.
Что умеет модуль
- Регистрация входящих и исходящих звонков в Битрикс24
- Автоматическое создание лидов, контактов и сделок
- Click-to-Call из карточки Битрикс24
- Загрузка записей разговоров в Битрикс24
- Маршрутизация входящих на ответственного менеджера
- Создание задач при пропущенных звонках
- Автозакрытие задач при успешном перезвоне
- Повторные сделки для существующих клиентов
- Поддержка нескольких DID с разными воронками
- Нормализация номеров телефонов
Системные требования
Сервер
| Компонент | Минимум | Рекомендуется |
|---|---|---|
| ОС | Ubuntu 20.04 / CentOS 7 | Ubuntu 22.04 |
| PHP | 8.0 | 8.1+ |
| RAM | 256 МБ | 512 МБ |
| Asterisk | 16+ | 18+ |
PHP расширения
php-cli php-curl php-pdo_sqlite php-pcntl php-mbstring
Сеть
- Порт 8080 должен быть доступен для Битрикс24 (для C2C)
- Сервер должен иметь доступ в интернет (OAuth и биллинг)
- Битрикс24 должен иметь доступ к IP сервера
Установка
Ubuntu / Debian (FreePBX)
apt install -y php-cli php-curl php-sqlite3 php-mbstringcp asterconnector.php /opt/asterconnector.php
chmod 644 /opt/asterconnector.phpcat > /etc/systemd/system/asterconnector.service << 'EOF'
[Unit]
Description=AsterConnector v2.0
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/php /opt/asterconnector.php
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
systemctl enable asterconnector
systemctl start asterconnectorhttp://IP_СЕРВЕРА:8080 · Логин: admin · Пароль: adminIssabel / CentOS 7
yum install -y epel-release
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install -y php81 php81-php-cli php81-php-curl php81-php-pdo php81-php-mbstring
В systemd сервисе используйте ExecStart=/usr/bin/php81 /opt/asterconnector.php
Удаление
systemctl stop asterconnector && systemctl disable asterconnector
rm -f /etc/systemd/system/asterconnector.service && systemctl daemon-reload
rm -f /opt/asterconnector.php && rm -rf /etc/asterconnector/ /var/log/asterconnector/
Настройка AMI
Добавьте в /etc/asterisk/manager.conf:
[general]
enabled = yes
port = 5038
bindaddr = 127.0.0.1
[asterconnector]
secret = ВАШ_ПАРОЛЬ
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.0
read = all
write = all
asterisk -rx "manager reload"
Параметры в панели
| Поле | По умолчанию | Описание |
|---|---|---|
| Хост | 127.0.0.1 | IP адрес Asterisk |
| Порт | 5038 | Порт AMI |
| SIP стек | Авто | PJSIP, chan_sip или автоопределение |
Подключение Битрикс24
http://IP:8080/oauth/callbackПрава: CRM, Телефония, Пользователи, Сообщения, Задачи
Настройки звонков
Контексты
| Параметр | По умолчанию | Описание |
|---|---|---|
| Входящие контексты | from-trunk,from-pstn | Через запятую |
| Контекст исходящих | from-internal | Звонки из этого контекста — исходящие |
| Префикс набора | — | Добавляется перед номером при исходящем |
Нормализация номеров
Автоматически добавляет код страны: 901234567 → +998901234567
Создание CRM объектов
| Настройка | Описание |
|---|---|
| Создавать контакт при входящем | При звонке от нового клиента |
| Создавать сделку при входящем | Требует создания контакта |
| Повторная сделка | Если у контакта нет открытых сделок |
Ответственный за пропущенный
- Первый агент — первый кому позвонило
- Последний агент — последний кому позвонило
- Все агенты — уведомляются все
- Ответственный за сделку — ищется по номеру в CRM
Маршрутизация на ответственного
Автоматически направляет входящий звонок на менеджера ответственного за клиента в Битрикс24.
Контекст ac-transfer (FreePBX/PJSIP)
[ac-transfer]
exten => _.,1,NoOp(AsterConnector Transfer: ${CALLERID(num)})
same => n,Set(AC_EXT=)
same => n,Set(CURLOPT(httptimeout)=3)
same => n,Set(CURLOPT(conntimeout)=3)
same => n,Set(AC_EXT=${CURL(http://127.0.0.1:8080/forward?phone=${CALLERID(num)}&ts=${EPOCH})})
same => n,GotoIf($["${AC_EXT}"=""]?queue)
same => n,Set(AC_RESPONSIBLE=${AC_EXT})
same => n,Dial(PJSIP/${AC_EXT},20,tTg)
same => n,GotoIf($["${DIALSTATUS}"="ANSWER"]?done)
same => n(queue),Goto(ext-queues,1000,1)
same => n(done),NoOp(Answered by ${AC_EXT})
Контекст ac-transfer (Issabel/chan_sip)
[ac-transfer]
exten => _.,1,NoOp(AsterConnector Transfer: ${CALLERID(num)})
same => n,Set(AC_EXT=)
same => n,Set(CURLOPT(httptimeout)=3)
same => n,Set(CURLOPT(conntimeout)=3)
same => n,Set(AC_EXT=${CURL(http://127.0.0.1:8080/forward?phone=${CALLERID(num)}&ts=${EPOCH})})
same => n,GotoIf($["${AC_EXT}"=""]?queue)
same => n,Set(AC_RESPONSIBLE=${AC_EXT})
same => n,Dial(SIP/${AC_EXT},20,tTg)
same => n,GotoIf($["${DIALSTATUS}"="ANSWER"]?done)
same => n(queue),Goto(ext-queues,1000,1)
same => n(done),NoOp(Answered by ${AC_EXT})
asterisk -rx "dialplan reload"
FreePBX → Connectivity → Inbound Routes → Set Destination → Custom Destinations → ac-transfer,s,1
Тест маршрутизации
curl -s "http://127.0.0.1:8080/forward?phone=998901234567"
Запись разговоров
| Параметр | По умолчанию | Описание |
|---|---|---|
| Директория записей | /var/spool/asterisk/monitor | Путь к файлам |
| Макс. размер файла | 50 МБ | Файлы больше не загружаются |
| Загружать в Битрикс24 | Да | Автозагрузка каждые 30 секунд |
| Удалять после загрузки | Нет | Удалять файл после успешной загрузки |
tail -f /var/log/asterconnector/asterconnector.log | grep RECORD
Click-to-Call (C2C)
Позволяет звонить клиентам прямо из Битрикс24 одним кликом на номер.
Требования
- Порт 8080 доступен из интернета
- В Битрикс24 → Телефония выбрано приложение AsterConnector
- У сотрудника заполнен внутренний номер в Битрикс24
Ручная регистрация обработчика
TOKEN=$(cat /etc/asterconnector/tokens.json | php -r "echo json_decode(file_get_contents('php://stdin'))->access_token;")
curl -s "https://ДОМЕН.bitrix24.ru/rest/event.bind.json" \
-d "auth=$TOKEN" -d "event=ONEXTERNALCALLSTART" \
-d "handler=http://ВАШ_IP:8080/c2c"
Задачи при пропущенных звонках
При пропущенном звонке создаётся задача «Перезвонить: НОМЕР» с привязкой к контакту и сделке.
| Параметр | Описание |
|---|---|
| Создавать задачу при пропущенном | Включить/выключить |
| Исполнитель задачи | Ответственный за пропущенный / сделку / по умолчанию / конкретный |
| Срок выполнения (часы) | Через сколько часов задача должна быть выполнена |
| Автозакрытие задач | Закрывать при успешном звонке с клиентом |
Сделки и контакты
Повторные сделки
- Ищем контакт по номеру телефона
- Проверяем есть ли открытые сделки
- Если нет — создаём новую сделку
- Если есть — новую не создаём
Несколько DID с воронками
Для каждого DID номера можно указать свою воронку и этап. Звонки с разных DID попадают в разные воронки Битрикс24.
Лицензия
Активация: панель → Лицензия → введите ключ → Активировать.
Лицензия привязана к домену Битрикс24 и проверяется автоматически раз в час.
| Файл | Описание |
|---|---|
| /etc/asterconnector/license.key | Лицензионный ключ |
| /etc/asterconnector/license.json | Кэш (подписан HMAC, не редактировать) |
Ошибки и решения
Проверьте enabled=yes в manager.conf и правильность логина/пароля.
asterisk -rx "manager show settings"Номер передаётся некорректно (например <unknown>). Включите нормализацию номеров в настройках.
Переподключите Битрикс24: панель → Битрикс24 → Отозвать → Подключить.
Причина 1: У сотрудника не заполнен внутренний номер в Битрикс24. Синхронизируйте сотрудников.
Причина 2: Обработчик не зарегистрирован. Переподключите Битрикс24.
Причина 3 (Issabel): Неверный SIP стек. Выберите chan_sip вручную.
yum install -y asterisk16-curl
asterisk -rx "module load res_curl.so"
asterisk -rx "module load func_curl.so"
echo "load => res_curl.so" >> /etc/asterisk/modules.conf
echo "load => func_curl.so" >> /etc/asterisk/modules.confСтарая версия SQLite на CentOS 7. Используйте актуальную версию модуля — в ней исправлен синтаксис.
1. Проверьте что ac-transfer подключён к входящему маршруту в FreePBX.
2. На Issabel — проверьте что func_curl загружен.
3. Включите автораспределение в панели модуля.
curl -s "http://127.0.0.1:8080/forward?phone=НОМЕР"
Файл кэша лицензии повреждён. Удалите и перезапустите:
rm -f /etc/asterconnector/license.json
systemctl restart asterconnectorОбщая диагностика
# Статус сервиса
systemctl status asterconnector
# Ошибки в логе
tail -50 /var/log/asterconnector/asterconnector.log | grep ERROR
# Проверка панели
curl -s http://127.0.0.1:8080/health
# Проверка AMI
asterisk -rx "manager show connected" | grep asterconnector
Часто задаваемые вопросы
Можно ли использовать с несколькими DID?
Да. В настройках → Номера компании добавьте все номера. Каждый можно привязать к своей воронке.
Как посмотреть историю звонков?
Панель → История звонков. Или напрямую:
sqlite3 /etc/asterconnector/asterconnector.db "SELECT * FROM calls ORDER BY id DESC LIMIT 20"
Звонок регистрируется дважды
Убедитесь что входящие контексты настроены правильно и DID номера компании указаны в настройках модуля.
Как изменить порт панели?
Панель → Система → Порт панели. После сохранения модуль перезапустится.
Как обновить модуль?
- Сделайте бэкап: панель → Система → Бэкап
systemctl stop asterconnectorcp новый_файл.php /opt/asterconnector.phpsystemctl start asterconnector
Нужен ли интернет для работы?
Да — для OAuth и лицензии. При отключении до 7 дней модуль работает через кэш.
История изменений
v2.0.0 Текущая
- Единый PHP файл-демон без зависимостей
- Встроенный HTTP сервер и веб-панель управления
- Поддержка PJSIP и chan_sip (FreePBX и Issabel)
- OAuth2 подключение к Битрикс24
- Маршрутизация входящих на ответственного менеджера
- Click-to-Call через событие ONEXTERNALCALLSTART
- Загрузка записей разговоров в Битрикс24
- Автосоздание задач при пропущенных звонках
- Автозакрытие задач при успешном перезвоне
- Повторные сделки через crm.item.update
- Поддержка нескольких DID с отдельными воронками
- Два метода поиска ответственного: по лиду и по контакту
- Защита лицензии с привязкой к домену Битрикс24
- Совместимость с Issabel/CentOS 7