313 просмотров
от (120 баллов) в категории Тонкая настройка
Добрый день.

Подскажите, можно ли сделать moh для отдельных сотрудников.

Что бы при звонке звонящий слышал музыку?

В чистом астериске я делал скриптом проверку if [[ $(asterisk -rx 'moh show classes'| grep 'Class:' | grep $1 | awk '{print $2}') -eq $1 ]] и в зависимости от ответа через AGI возвращал или есть класс или нету. Далее просто в Dial подставлял m(moh_class) и звонящий слышал или не слышал музыку.
 

Заранее спасибо.

1 Ответ

от (122 тыс. баллов)
Такой возможности нет. Только доработка АТС.
от (120 баллов)
редактировать от

Тогда подскажите, куда можно положить свои скрипты что бы их не затерло. 

И верно я понимаю что если я хочу отредактировать что то в диалплане, мне надо использовать "Заменять полностью"? Так как я хочу отредактировать [internal-users] вставив проверку наличия класса для набранного номера.

Заранее спасибо.

---

Спасибо.

Скрипт разместил 

/storage/usbdisk1/mikopbx/scripts/get_moh_class.sh

Режим "Заменять полностью"

Еще раз спасибо!

от (122 тыс. баллов)

файлы дополнительных скриптов лучше размещать в директории:

/storage/usbdisk1/mikopbx/custom_modules/

Создайте в ней вложенный каталог. 

При использовании модуля резервного копирования в бекап попадут все каталоги, хранящиеся в этой директории. 

 "Заменять полностью"

Крайне не рекомендую такого рода кастомизацию. 

Если необходимо добавить в какой либо контекст свою логику, то следует сперва проверить, возможно лучше описать custom контекст:

https://wiki.mikopbx.ru/custom-files#extensionsconf

К примеру можно попробовать описать контекст:

internal-users-custom

в нем обязательно должен быть вызов return

Дополнить необходимые опции можно в переменную "TRANSFER_OPTIONS". 

от (120 баллов)

Добрый день.

Спасибо Вам за Ваши ответы. Скрипт перенёс.

По поводу перехвата. Я сделал через GoSub

...

same => n,GoToIf($[${moh_call}=1]?dial_with_music)($["${TRANSFER_OPTIONS}x" == "x" || "${ISTRANSFER}x" != "x"]?Set(TRANSFER_OPTIONS=Tt))

same => n,GoSub(dial_with_moh,s,1(${EXTEN}))

same => n(fw_start),NoOp(start dial hangup)

...

[dial_with_moh]

exten => s,1,Verbose(Start dial_with_moh ${ARG1})

      same => n,AGI(/storage/usbdisk1/mikopbx/custom_modules/custom_scripts/get_moh_class.sh,${ARG1})

    same => n,Set(moh_call_arg=)

    same => n,ExecIf($[${moh_call}=1]?Set(moh_call_arg=m(${ARG1})))

    same => n,ExecIf($["${DST_CONTACT}x" != "x"]?Dial(${DST_CONTACT},${ringlength},${TRANSFER_OPTIONS}ekKHhU(${ISTRANSFER}dial_answer)b(dial_create_chan,s,1)${moh_call_arg}}):Set(DIALSTATUS=CHANUNAVAIL))     

    same => n,return

естественно с возвратом. 

По поводу TRANSFER_OPTIONS, я честно говоря несколько опасаюсь лезть в чужие переменные, да бы не сломать их логику, проще на мой взгляд вклинится в текущий контекст и далее вернутся обратно и продолжить выполнение.

Заранее спасибо.

от (122 тыс. баллов)

не будет нормально работать

вам следует описать контекст "internal-users-custom" и добавить его "в конец файла" , а не "переопределять полностью"

от (120 баллов)

не будет нормально работать

Уже работает.  

вам следует описать контекст "internal-users-custom" и добавить его "в конец файла" , а не "переопределять полностью"

Не совсем понимаю почему Вы настаиваете (хотя как я понимаю что "Заменять полностью" что "Добавлять в конец файла" это нормальная работа алгоритмов), но переделал.

[internal-users-custom]

exten => _X!,1,NoOp(internal-users-custom)

    same => n,AGI(/storage/usbdisk1/mikopbx/custom_modules/custom_scripts/get_moh_class.sh,${EXTEN})

    same => n,Verbose(${moh_call} - ${EXTEN})

    same => n,ExecIf($[${moh_call}=1]?Set(TRANSFER_OPTIONS=${TRANSFER_OPTIONS}m(${EXTEN})))

   same => n,return 

Просто не совсем понятно, какие можно переменные использовать а какие лучше не трогать? Что хранится в "TRANSFER_OPTIONS"? Когда она может поломать "custom" код? 

от (122 тыс. баллов)

Уже работает.  

После любой документации в web в файле extensions.conf все доработки будут затираться. 

"Заменять полностью"

Если так сделать, то не сможете настраивать АТС через web интерфейс, не сможете к примеру добавить нового сотрудника, изменения не отразятся на dialplan. 

Лучше использовать  "Добавлять в конец файла". В "TRANSFER_OPTIONS" хранятся дополнительные опции, которые будут переданы в dial. Посмотрел, это не совсем удачная переменная для правки, в случае трансфера она всегда переопределяется. 

Когда она может поломать "custom" код? 

Когда не корректно опишите доп. опции для Dial application. Поломать довольно просто, к примеру укажите запятую в этой переменной. Потому да, нужно быть очень аккуратным с кастомизацией. 

В вашем случае еще следует обыграть ситуацию, когда сотрудник не отвечает на вызов, скорее всего ему пойдет второй вызов. 

от (120 баллов)

После любой документации в web в файле extensions.conf все доработки будут затираться.

Ага, вот  так понятно.

Посмотрел, это не совсем удачная переменная для правки, в случае трансфера она всегда переопределяется.

Может быть тогда я сам в своем [internal-users-custom] буду делать такую проверку и тогда условие в [internal-users] не будет выполнятся.

Потому да, нужно быть очень аккуратным с кастомизацией. 

Ну это да, проверять надо всегда. 

от (122 тыс. баллов)

добавить в "internal-users-custom" проверку статуса и завершать вызов если "отвечен". 

от (120 баллов)
Прошу дико меня извинить, но я не совсем тогда понимаю.

Я полагал что internal-users-custom вклинивается в internal-users и после возвращается обратно. Судя по логам так и есть. В internal-users-custom ничего не вызываем а просто добавляем опцию. Всё, ничего по идее не должно ломаться.

Или я не прав. Извините что задаю странные вопросы, только с астером работал и там кроил как попало диалплан.
от (122 тыс. баллов)

Проблема в том, что переменная "TRANSFER_OPTIONS" будет, если это пере адресация. 

В случае с прямым звонком на внутренний все ок; 

В случае с переадресацией "TRANSFER_OPTIONS" будет задана системой и ваше значение будет затерто. 

На этом сайте можно бесплатно задать вопрос разработчикам MikoPBX и другим членам сообщества. Время ответа не регламентированно, но мы стараемся несколько раз в день заглядывать сюда. Для срочного решения проблем обращайтесь на платную линию поддержки

Популярные теги

askozia входящие-вызовы настройка исходящие маршрутизация провайдер запись-разговоров входящие ivr исходящие-звонки обновление ошибка очередь провайдеры битрикс24 очередь-вызовов переадресация запись установка маршрут история-звонков mikopbx транк панель-телефонии-1с перевод-вызова перевод askozia7 askozia6 битрикс callerid интеграция голосовая-почта логи перехват-вызова ростелеком нерабочее-время факс модуль nat docker запись-разговора веб-интерфейс bitrix24 goip настройка-провайдер история диалплан почта журнал-звонков релиз gsm вызовы звонок внешние-номера web-интерфейс zabbix маршруты cdr sip панель pjsip переадресация-мобильный voicemail ascozia телефонная-книга аон мобильный звонков лицензирование вызовов редактор номер asterisk лицензия ami регистрация оповещения провайдеров время голосовая fax trunk разговоров группы-пользователей #mikopbx пропущенные-звонки донабор beeline monitoring тишина smtp cisco мобильные мультифон мегафон шлюз не-работает электронная-почта не-слышно-звук

2.8 тыс. вопросов

2.4 тыс. ответов

6.7 тыс. комментариев

465 тыс. пользователей

...