Автоматизация задач и интеграция с 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

Автоматизация обзвонов

Автоматизация обзвонов позволяет системе инициировать вызовы программно. Оператор подключается к разговору только тогда, когда клиент поднял трубку.

Реализовать это можно двумя способами:

  1. AMI (Action: Originate): простой запуск звонка в диалплан или на номер.
  2. 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