Представьте, вы совершаете звонок. И, неожиданно, ваш собеседник начинает «кричать» в трубку. Пусть кричит – наши нервы прошли и не такое, но дело в том, что громкость звонка задана жёстко в кастомном диалплане. Поэтому, ощущения от крика буду особенно острыми :)

А теперь, вообразите, что у вас есть возможность сделать собеседника «тише» кнопками телефонного аппарата. А потом, когда он успокоится, сделать снова громче. Интересно? Поехали.


ПОДГОТОВКА

Откроем FreePBX. Открыв модуль сервисных кодов (feature codes), мы обнаружим, что в нем можно только изменить существующие коды, но добавить новые нельзя.

Решение указанной в начале статьи задачи будет базироваться на встроенных функциях Asterisk. То есть мы не будем добавлять кастомный контекст.


НАСТРОЙКА

Открываем файл /etc/asterisk/globals_custom.conf. Этот файл позволяет переписать или добавить глобальные переменные, используемые Asterisk (как стандартные, так и ваши личные).

Если данного файла нет, то его нужно создать. Например, вот так:

touch /etc/asterisk/globals_custom.conf 
chown asterisk:asterisk /etc/asterisk/globals_custom.conf
chmod 775 /etc/asterisk/globals_custom.conf

В файл добавляем следующую конструкцию:

DYNAMIC_FEATURES=VUp#VDown#MUp#MDown
Vol=0
Mic=0

Мы задали специальные функции, которые понадобятся нам далее. Сейчас будем закреплять комбинации цифр за кодами. Для этого открываем файл etc/asterisk/features_applicationmap_custom.conf и запишем в него следующее:

VUp => 52*,self,Macro,VolumeUp
VDown => 58*,self,Macro,VolumeDown
MUp => 54*,self,Macro,MicUp
MDown => 56*,self,Macro,MicDown

Мы закрепили за кодами выполнение макроса громкости, который мы напишем далее. Не пугайтесь — «странные» комбинации выбраны по причине того, что их просто запомнить, так как на клавиатуре телефона, это так называемый «крест», наподобие джойстика ;)

Go ahead. Приступаем к самим макросам. Для этого открываем файл /etc/asterisk/extensions_custom.conf и добавляе:

[from-internal-custom]
Set(__DYNAMIC_FEATURES=VUp#VDown#MUp#MDown)

Таким образом, мы подключаем добавленные коды в диалплан Asterisk, который генерирует FreePBX.

Не спешите закрывать файл extensions_custom.conf. В него же добавляем механизм увеличения громкости. То есть, макросы о которых мы писали ранее:

[macro-VolumeUp]
exten => s,1,Set(Vol=$[${Vol}+5])
same => n,Set(VOLUME(TX)=${Vol})

[macro-VolumeDown]
exten => s,1,Set(Vol=$[${Vol}-5])
same => n,Set(VOLUME(TX)=${Vol})        

[macro-MUp]
exten => s,1,Set(Mic=$[${Mic}+5])
same => n,Set(VOLUME(RX)=${Mic})

[macro-MDown]
exten => s,1,Set(Mic=$[${Mic}-5])
same => n,Set(VOLUME(RX)=${Mic})

Можно выдохнуть. На этом правки закончены. Как вы могли заметить, почему-то «громкостей» несколько. Все достаточно просто. Это 2 макроса на увеличение и уменьшение громкости канала звука и, соответственно, канала микрофона.

Что нам все эти коды дают (по сравнению с жестко прописанными числами)? В любой момент разговора, если вы плохо (тихо) слышите собеседника, нужно набрать на телефоне 52* и громкость увеличится, так можно делать несколько раз пока уровень громкости собеседника не станет приемлемым. Это работает и наоборот: 58* и собеседник становится «тише».

Удобно, правда? :) Из плюсов — не надо прерывать звонок. Нет жёсткого ограничения громкости. Если разговор затягивается на длительное время, можно выставить комфортную слышимость.

Ну а второй макрос, спросите вы? Представьте: что делать, если собеседник жалуется, что вас тихо слышно? Нет проблем. Набираем 54* и собеседник начинает нас лучше слышать, то есть, мы увеличиваем громкость канала нашего микрофона!