Интеграция Asterisk с CRM (Битрикс24, amoCRM) через AMI и Webhook шлюзы
- Всплывающие карточки клиента не отображаются в веб-интерфейсе CRM при входящем звонке.
- Аудиозаписи завершенных вызовов не прикрепляются к сделкам и лидам.
- Ошибки авторизации
Authentication failedили отвал сессии в сокете AMI (TCP порт 5038). - Задержки или зависание транзакций при генерации исходящего звонка по клику (Click-to-Call / Originate).
1. Настройка учетной записи AMI в Asterisk
Отредактируйте конфигурационный файл /etc/asterisk/manager.conf для разрешения удаленных подключений:
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
displayconnects = no
[crm_connector]
secret = StrongCrmSecretPassword2025!
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.255
permit = 192.168.10.0/255.255.255.0
read = system,call,log,verbose,command,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,command,originate,reportingПеречитайте конфигурацию интерфейса AMI:
asterisk -rx "manager reload"2. Проверка связности и тестирование авторизации AMI по TCP
# Подключение к сокету
nc -v 127.0.0.1 5038
# Отправка тестовой команды авторизации
Action: Login
Username: crm_connector
Secret: StrongCrmSecretPassword2025!
# Завершение сессии
Action: Logoff3. Конфигурация диалплана для сохранения записей звонков
В /etc/asterisk/extensions_custom.conf добавьте генерацию переменных для последующей отправки по Webhook:
[from-internal-custom]
exten => _XXXX,1,NoOp(=== Call from ${CALLERID(num)} to ${EXTEN} ===)
same => n,Set(__CRM_RECORD_ID=${UNIQUEID})
same => n,Set(CDR(recordingfile)=${CRM_RECORD_ID}.wav)
same => n,MixMonitor(/var/spool/asterisk/monitor/${CRM_RECORD_ID}.wav,b)
same => n,Dial(PJSIP/${EXTEN},30,e)
same => n,Hangup()4. Архитектура Webhook-шлюза (Node.js/Python/PHP)
Коннектор CRM подключается к сокету AMI, перехватывает системные события BridgeEnter, DialEnd, Hangup и передает нормализованный JSON по REST API в CRM:
{
"event": "ON_CALL_END",
"caller_id": "79991234567",
"destination": "101",
"duration": 45,
"status": "ANSWERED",
"recording_url": "https://pbx.itstm.ru/recordings/1700000000.1234.wav"
}5. Отладка и трассировка событий в консоли Asterisk
# Включение вывода событий AMI в консоль
asterisk -rvvv
manager set debug on Частые вопросы (FAQ)
Почему при вызове Click-to-Call (Originate) сначала звонит телефон оператора?
Такова архитектура функции Asterisk Originate: сервер сначала устанавливает соединение с внутренним экстеншеном оператора, а после поднятия трубки немедленно направляет второй канал на номер клиента и объединяет их в Bridge.
Что делать, если AMI-сессия коннектора CRM регулярно разрывается по таймауту?
Настройте отправку Ping-пакетов (Action: Ping) каждые 20–30 секунд со стороны интеграционного скрипта, либо увеличьте значение keepalive на сетевом шлюзе.
Как передать кастомные данные (например, имя сделки) из входящего звонка в CRM?
Используйте функцию Set(__CHANNEL_VAR=value) в диалплане Asterisk или отправляйте пользовательские события через AMI с помощью команды UserEvent.
Какие права в manager.conf минимально необходимы для функции Originate?
В секцию write необходимо обязательно включить права call и originate. Для сбора информации о звонках в секцию read добавьте call, cdr, dialplan.