Выставление приоритетов в очереди для «важных» клиентов

 Составляем список VIP-номеров

В меню "Администратор"-> "Телефонная книга" добавляем нужные номера. В поле "Имя" пишем Р=1 (объясню ниже, почему это так). В поле "Номер" мы указываем номер клиента. Оставляем поле "Установить декод набора" пустым и снимаем флажок "Набрать скорость набора номера" (в противном случае код быстрого набора будет создан автоматически — нам это не нужно).


Чтобы не добавлять номера вручную, можно добавить их через csv-файл, особенно если список большой.


Файл csv должен быть в следующем формате:


P=1,79123456789


Р=1,79129876543


П=2,79129876534


Первое значение - имя человека, второе - сам номер. Мы будем использовать имя человека, чтобы определить "вес" следующего номера.


Этот список можно создать в Excel, а затем сохранить в csv, разделенном запятыми.


Меняем логику поиска

Основная логика звонка в астерисках настраивается в рамках extensions.conf . Однако, особенно для различных сборок, таких как FreePBX, этот файл "переупорядочивается" при наличии каких-либо изменений в веб-интерфейсе.


Существуют файлы extensions_override_freepbx и extensions_custom.conf


Я вносил изменения в extensions_custom.conf


Изначально пусто.


Скопированный с сайта voxlink.ru контекст у меня не заработал (иначе бы эту статью не взял). Возможно, на него повлияла разница в AMI, но это то, с чем я столкнулся.


Во-первых, оказалось, что там было несколько синтаксических ошибок (лишние пробелы).


Во-вторых, почему-то мой AMIISK не получил same (хотя это стандартная функция Asterisk), мне пришлось везде прописывать exten, но это не элементарно и не слишком сильно расширяет код.В-третьих, функция Execif, похоже, работала для меня, я получал правильное значение приоритета, но не применял его к очереди.


Я решил сделать это только через оператора сравнения IF.


В-третьих, функция Execif, похоже, работала для меня, я получал правильное значение приоритета, но не применял его к очереди.


Наконец-то у меня был такой вариант:


[from-city]

exten => _X.,n,Goto(priorities,${EXTEN},1);


[priorities]

exten => _X.,1,NoOp(SET Priority); exten => _X.,n,Set(__QUEUE_PRIO=${IF('${DB(cidname/${CID}):0:1}'='P'?${DB(cidname/${CID}):2:1})}:0);0) ; exten => _X.,n,Goto(from-pstn,${EXTEN},1);

Используя функцию "Goto", мы отправляем наши вызовы проверки в раздел "priorities". Первый exten в этом разделе регистрирует только одно сообщение, при необходимости вводить эту строку нельзя. Основное действие происходит в следующей строке. Будет сделан звонок из нашей книги контактов, и если мы найдем совпадениеот имени данного контакта берется первый символ. Если он равен «Р», Тогда от имени этого контакта отсекаем первые 2 символа, оставшееся значение и есть наш приоритет (или "вес" звонка в очереди). Далее отправляем наш звонок на обычную обработку, но уже с другим приоритетом очереди.


После сохранения изменений не забудьте перезапустить службу, чтобы изменения могли быть применены:


service asterisk restart


Через графический интерфейс мы указываем наш узел в поле Входящие настройки-> Сведения о пользователе по правильному каналу.


Это должно быть что-то типа:


type=friend trunk=yes secret='YOUSECRETPASSWORD' Language=ru disallow=all context=from-city allow=alaw

Заключение


Если вдруг кто не знает, в Asterisk, по умолчанию, у всех звонков приоритет 0. Поэтому нам достаточно выставлять приоритет 1. При желании можно сделать несколько групп номеров с разным приоритетом («важные»=1, «VIP»=2, «суперVIP»=3 и т. д. до 9). Чем выше приоритет, тем выше в очереди будет звонок (быстрее вызов попадет к оператору). Звонки с одинаковым приоритетом будут обрабатываться по очереди.

Спасибо за внимание.