Умная переадресация FreePBX

Умная переадресация - это перевод звонка от клиента, который в данный момент звонит, на ответственного менеджера, который указан в карточке этого клиента в CRM системе. Иными словами, клиент всегда дозванивается на менеджера, который его ведет.
Настройка на сервере

Настраивается Умная переадресация в Freepbx через дополнительное назначения: Добавляем дополнительно назначение:
Указываем цель (target) telefumtransfer,s,1 (4), и можно указать направление из умной переадресации (5):
Переходим в раздел Admin - Config Edit - extensions_custom.conf (FreePBX 13/14) (Для более ранних версий отредактируем файл /etc/asterisk/extensions_custom.conf вручную на сервере):
Правим конфигурационный файл:
[telefumtransfer]
exten => s,1,Set(DEFEXT=600)
# DEFEXT - добавочный по умолчанию, 
# на который пойдет звонок если TOEXT получит не верное значение
exten => s,n,Set(API_key=b1d9e58ed25168d2deaf8c83a91f4ea433d9d51d2ab17c8781284d2b9d391064 )
# API_key - ключ, уникальный код который можно получить в ЛК Telefum24
exten => s,n,Set(RingTime=15)
exten => s,n,ExecIf($[("${MOHCLASS}"!="default") & ("${MOHCLASS}"!="")]?Set(CHANNEL(musicclass)=${MOHCLASS}))
exten => s,n,Set(D_OPTIONS=m(${CHANNEL(musicclass)})Tt)
exten => s,n,NoOp(FROM_DID=${FROM_DID})
# FROM_DID - транк, на который поступил звонок
exten => s,n,NoOp(CALLERID(num)=${CALLERID(num)})
exten => s,n,Set(TOEXT=${CURL(http://www.online.telefum.com:9500/telefum_online/line?number=${CALLERID(num)}&trunk=${FROM_DID}&apikey=${API_key})})
# TOEXT - номер телефона ответственного
# который будет возвращен системой Telefum24 по запросу
exten => s,n,GotoIf($["${TOEXT}"!=""]?dst:nodst)
exten => s,n(dst),GotoIf($[${TOEXT} : "([1-4][0-9][0-9])"]?dialtoext:from-internal,${TOEXT},1)
# Если номера от 100 до 499 то звонить Dial, иначе from-internal
# Это нужно для того, чтобы иметь возможность переводить звонок не на внутренний номер
# а на группу (например, если новый клиент - то переводить на группу)
exten => s,n(dialtoext),Dial(SIP/${TOEXT},${RingTime},${D_OPTIONS})
exten => s,n,Return()
exten => s,n(nodst),GotoIf($[${DEFEXT} : "([1-4][0-9][0-9])"]?dialdefext:from-internal,${DEFEXT},1)
exten => s,n(dialdefext),Dial(SIP/${DEFEXT},${RingTime},${D_OPTIONS})
exten => s,n,Return()
Затем нужно направить звонок в входящем маршруте в созданное дополнительное назначение telefumtransfer:
В CLI asterisk это выглядит так

Звонок от существующего клиента:
Звонок от нового клиента:
Случай, когда при звонке TOEXT не получила действительное значение (пусто), и в действие вступает DEFEXT:
Получение ключа API

Для этого необходимо перейти в личном кабинете Telefum24 в Настройки - Интеграция и ключ взять в поле "Ссылка для умной переадресации":
Проверка ссылки

Путем подстановки различных номеров клиентов (параметр number) и различных номеров внешних номеров/транков (параметр trunk) можно посмотреть, какой внутренний номер будет возвращен сервером: