# Интеграция с Asterisk

## Интеграция с Asterisk через Asterisk AMI

Интеграция системы vsDesk с платформой IP-телефонии Astersik позволяет отображать информацию о звонящем заказчике во всплывающем окне, быстро создать нового пользователя системы и его компанию (если номера заказчика нет в локальной БД), а затем создать заявку от имени заказчика. Для заказчика занесенного в БД во всплывающем окне отобразится информация о имени, номере телефона и компании заказчика, а также позволит создать новую заявку от имени определенного заказчика или перейти в карточку звонка.\
Система сравнивает номер звонящего с двумя полями Телефон и Внутренний телефон в справочнике Пользователи, поэтому необходимо привести все номера в БД к формату +7XXXXXXXXXX, если это мобильный или городской номер (без скобок и тире). Система передает данные о звонке в интерфейс исполнителя, на внутренний номер которого поступил звонок

![](https://3807933561-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcpteH47XFJvwR4kSbU%2F-LeBDf3qhDrS9Cp8cgCU%2F-LeBGTNo7EiejSuS3q0U%2Fimage0002.png?alt=media\&token=d33ad1cb-a4e7-4550-90ce-1c9b2126e2a8)

Для включения интеграции, со стороны Asterisk (в файле [manager.conf](http://www.asteriskguru.com/tutorials/manager_conf.html)) необходимо создать отдельную учетную запись или использовать имеющуюся для доступа к Asterisk AMI с набором прав, указанным ниже (рекомендованный набор прав может быть изменен в целях повышения безопасности):

```
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0

[amimanager]
secret = mysecret
deny=0.0.0.0/0.0.0.0
permit=0.0.0.0/0.0.0.0
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,log,verbose,user,config,command,reporting,originate
writetimeout = 5000
```

где в поле **secret**, укажите секретную фразу, а в поле **permit**, укажите IP-адрес сервера vsDesk для получения доступа к AMI.

Для получения записи звонков из Asterisk необходимо включить HTTP сервер в настройках, во FreePBX например включен по умолчанию.

Создайте ссылку для папки с записями в веб директории консоли сервера Asterisk:

```bash
cd /var/www/html
ln -s /var/spool/asterisk/monitor records
```

Теперь ваши записи должны быть доступны через веб по адресу сервера http(s)://asterisk\_ip/records/

Для усиления безопасности рекомендуем в папке /var/spool/asterisk/monitor создать файл .htaccess со следующим содержимым:

`Options -Indexes`

Отредактируйте файл в папке дистрибутива /lib/ami.php где укажите следующие значения:

AC\_DB\_CS - строка подключения к БД CDR Asterisk, где необходимо указать хост, порт и имя БД;

AC\_DB\_UNAME - имя пользователя имеющего доступ к БД;

AC\_DB\_PASS - пароль пользователя имеющего доступ к БД;

AC\_RECORD\_PATH - путь к веб каталогу с записями, который мы создали на предыдущих шагах;

```php
define('AC_DB_CS', 'mysql:host=localhost;port=3306;dbname=asteriskcdrdb');
define('AC_DB_UNAME', 'freepbxuser');
define('AC_DB_UPASS', 'freepbxpassword');
define('AC_RECORD_PATH', 'https://asterisk_ip/records/%Y/%m/%d/#');
```

Скопируйте из папки дистрибутива файл /lib/ami.php в веб директорию сервера Asterisk, в примере */var/www/html/*

После внесения изменений в manager.conf необходимо в консоли Asterisk выполнить команду:

```bash
asterisk -rx "module reload manager"
```

## Настройки интеграции в vsDesk

Для интеграции со стороны vsDesk необходимо настроить несколько параметров:

* В меню Настройки - Основные настройки, должен быть включен параметр "Использовать всплывающие уведомления" или же при использовании Push-уведомлений Google этот параметр можно не включать;
* В меню Настройки - Управление ролями для роли Администратор должны быть включены доступы к настройкам интеграции с Asterisk в категории Настройки;
* В меню Настройки - Управление ролями для роли Администратор должны быть включены доступы на чтение/просмотр/ удаление в категории Звонки;
* В меню Настройки - Управление ролями для роли Исполнитель должны быть включены доступы на чтение/просмотр/ в категории Звонки (исполнитель будет видеть только звонки направленные на его внутренний номер);
* В меню Настройки - Управление ролями для роли Исполнитель должны быть включены доступы на создание в категории Пользователи (для добавления нового пользователя из формы звонка);

![](https://3807933561-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcpteH47XFJvwR4kSbU%2F-LcptfHnHpLiBqToxGkr%2F-Lcpth5016EkeO28GiSQ%2Fami_setup.png?generation=1555682493942255\&alt=media)

**Хост подключения Asterisk management API**- укажите IP-адрес или DNS-имя сервера Asterisk;\
**Asterisk management API port**- порт для подключения к AMI, по умолчанию 5038;\
**Схема подключения к Asterisk management API (tcp\:// рекомендуемая)**- схема подключения может принимать значение tcp\:// или udp\:// (tcp\:// рекомендуемая);\
**Пользователь Asterisk management API**- имя пользователя, которое мы указывали в файле manager.conf Asterisk (в нашем примере amimanager);\
**Секрет Asterisk management API**- секретная фраза, которую мы указывали в фале manager.conf Asterisk;\
**Таймаут подключения Asterisk management API**- таймаут (в миллисекундах) для подключения к сокету AMI, по умолчанию 10000;\
**Таймаут чтения Asterisk management API**- таймаут (в миллисекундах) для чтения данных из сокета AMI, по умолчанию 10000;

**Asterisk context** - [контекст](http://asterisk.ru/knowledgebase/Asterisk%20Dialplan%20Introduction) выполнения исходящего звонка в Asterisk прописанный в Dial plan экстеншена.

**Asterisk channel** - [канал](http://asterisk.ru/knowledgebase/Asterisk%20Channels) через который осуществляется исходящий вызов в Asterisk. По умолчанию во FreePBX канал PJSIP после установки, для контекста from-internal

**Путь к записям звонков** - путь к файлу ami.php, который мы с вами скопировали на одном из предыдущих шагов, например http(s)://asterisk\_ip/ami.php

## Настройка планировщика задач

Для пользователей системы vsDesk, получивших обновление необходимо прописать в планировщике задач, задание позволяющее перезапускать через указанный интервал демон подключения к Asterisk AMI.\
Для Windows пользователей в меню Open-server в меню Настройки - вкладка Планировщик заданий, необходимо добавить задачу со следующими настройками и интервалом раз в 5 минут:

`%sprogdir%/modules/php/%phpdriver%/php.exe %sprogdir%/domains/localhost/protected/cron.php pamirun`

Для Linux пользователей в меню веб-интерфейса Настройки - Настройка задач планировщика, необходимо добавить задачу со следующими настройками

![](https://3807933561-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcpteH47XFJvwR4kSbU%2F-LeBDf3qhDrS9Cp8cgCU%2F-LeBGLj3oHLm1fVdaLHk%2Fimage0003.png?alt=media\&token=ddfe83dd-0d78-4a4f-83ef-726e2bd3b66c)

**Интервал перезапуска влияет на бесперебойную работу демона, при стабильном соединении и небольшом количестве отказов получения информации о входящем звонке, можно увеличить интервал перезапуска до 30 минут или уменьшить до 1 минуты. Во время перезапуска могут быть недоступны данные о входящих звонках в течение 10-15 секунд.**
