# Автораспределение в версии до 3.0.0

Для автоматического направления входящего звонка на менеджера, ответственного за сущность (контакт\компания\лид) в CRM необходимо, чтобы в Asterisk был включен CURL.\
Проверить так: `$ asterisk -rx 'core show function CURL'` В результате должны получить описание функции curl. Если функция CURL отсутствует, то ее нужно устанавливать на сервер Asterisk.

Далее в диалплане нужно создать контекст, на который звонок будет приходить ДО голосового приветствия.

### Настройка контекста в Asterisk

В файле **/etc/asterisk/extensions\_custom.conf** прописываем контекст. Пример контекста (обратите внимание на код, его нужно изменить):

```
[bx24transfer]
exten => 1,1,Set(CURLOPT(httptimeout)=5)
exten => 1,n,Set(CURLOPT(conntimeout)=5)
exten => 1,n,Set(TOEXT=${CURL(http://localhost:8077/forward?phone=${CALLERID(num)},,5)})
exten => 1,n,GotoIf($[${TOEXT}]?from-internal,${TOEXT},1:ivr-1,s,1)
```

где\
`localhost:8077` – ip-адрес и порт сервера, на котором установлен модуль;\
`ivr-1,s,1` – контекст с IVR, куда уходит вызов в том случае, если не удалось найти номер в CRM;\
`CURLOPT(conntimeout)=5` – таймаут 5 сек для выполнения запроса (если на запрос не будут получен ответ, то звонок уйдет дальше по стандартному маршруту).

**Логика работы следующая:**

1. Через модуль выполняется запрос в Битрикс24 с поиском ответственного за сущность по полученному номеру`http://localhost:8077/forward?phone=${CALLERID(num)}`
2. Внутренний номер ответственного записывается в переменную`{TOEXT}.`
3. Если внутренний номер найден – звонок переведется на ответственного (`GotoIf`).
4. Если номер не найден – звонок пойдет по второму пути (в данном примере `ivr-1,s,1`).

**Есть** **нужно показать имя сущности на аппарате,** то настраиваем контекст следующим образом:

```
[bx24transfer]
exten => 1,1,Set(CURLOPT(hashcompat)=yes)
exten => 1,n,Set(CURLOPT(httptimeout)=5)
exten => 1,n,Set(CURLOPT(conntimeout)=5)
exten => 1,n,Set(HASH(forwardHash)=${CURL(http://localhost:8077/extendedForward?phone=${CALLERID(num)})})
exten => 1,n,Set(CALLERID(name)=${HASH(forwardHash,name)})
exten => 1,n,GotoIf($[${HASH(forwardHash,number)}]?from-internal,${HASH(forwardHash,numb
```
