Автоматизация задач и интеграция с CRM
Мы уже освоили создание приложений на базе ARI и понимаем, как управлять мостами и каналами. Теперь свяжем телефонию с бизнес-процессами. В корпоративной среде АТС не работает изолированно: она обменивается данными с CRM-системой, чтобы автоматизировать рутину и помогать сотрудникам быстрее обслуживать клиентов.
Интеграция с CRM — это объединение (деятельность организации запрещена на территории РФ) телефонии и бизнес-логики. Данные о звонках автоматически попадают в карточку клиента, а информация из базы данных (например, статус VIP) влияет на маршрутизацию вызова.
Middleware: архитектура взаимодействия
Прямой запрос из Asterisk в базу данных CRM — плохая практика. Это создает жесткую зависимость, которую сложно отлаживать и масштабировать. Правильный подход — использование Middleware (промежуточного ПО).
Middleware — это сервис на Node.js, Python или Go, который служит «прослойкой». Он слушает события Asterisk через AMI или ARI и транслирует их в API вашей CRM. Как показано на Схеме 1, Middleware изолирует логику связи от логики бизнеса.
Уведомления о вызовах и событийная модель
Главная функция интеграции — «всплывающая карточка» при входящем звонке. Для этого используются уведомления о вызовах, основанные на событиях AMI.
Когда поступает звонок, Asterisk генерирует событие Newstate (или StasisStart в ARI). Middleware перехватывает его, извлекает номер (CallerID) и запрашивает у CRM данные о владельце номера.
Пример события AMI о входящем звонке:
Event: Newstate
Channel: PJSIP/operator-0000000a
ChannelState: 4
ChannelStateDesc: Ring
CallerIDNum: 79001234567
Uniqueid: 1704058800.12Автоматизация обзвонов
Автоматизация обзвонов позволяет системе инициировать вызовы программно. Оператор подключается к разговору только тогда, когда клиент поднял трубку.
Реализовать это можно двумя способами:
- AMI (Action: Originate): простой запуск звонка в диалплан или на номер.
- ARI (POST /channels): полный контроль над состоянием канала с момента создания.
Не реализуйте логику массового обзвона через циклы (Loop) внутри extensions.conf. Это блокирует потоки обработки диалплана и «вешает» Asterisk под нагрузкой. Используйте внешнее управление через API.
Практикум: мониторинг через AMI
Создадим прототип Middleware на Python, который отслеживает входящие вызовы.
Установите библиотеку panoramisk и запустите скрипт:
import asyncio
from panoramisk import Manager
async def main():
# Подключаемся к AMI
manager = Manager(host='127.0.0.1', port=5038,
username='admin', secret='your_password')
await manager.connect()
@manager.on('Newstate')
def handle_event(manager, event):
# Проверяем состояние канала
if event.ChannelStateDesc == 'Ring':
print(f"Уведомление о вызове: Клиент {event.CallerIDNum} звонит!")
await asyncio.Event().wait()
if __name__ == "__main__":
asyncio.run(main())Передача данных после звонка
После завершения вызова нужно передать в CRM финальные данные:
- Длительность и статус (отвечен/пропущен).
- Ссылку на запись разговора.
- Уникальный ID для сопоставления с логами.
Для этого удобно использовать переменную канала USERFIELD. Запишите в неё ID сделки из CRM во время звонка — тогда значение автоматически попадет в CDR (Call Detail Records), откуда его заберет скрипт синхронизации.
Интеграция превращает АТС в управляемую систему. В следующей теме мы изучим динамическое управление диалпланом: научимся менять маршруты вызовов в реальном времени (например, направлять VIP-клиентов сразу на личного менеджера), превращая статичные конфиги в гибкую среду.
Понравился урок?
Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей
Продолжить в Telegram