WiKi - Виртуальная АТС "ВирТел" - работает по всей РоссииВиртуальная АТС. Virtual PBX. Петрозаводск, Карелия. Бесплатная МиниАТСhttps://ww.virtel.net/wiki/23-raznoe.feed2026-03-15T23:53:50+03:00Joomla! - Open Source Content ManagementРешение проблемы с ошибкой "500 internal server error" на телефонах Cisco2021-11-23T18:13:49+03:002021-11-23T18:13:49+03:00https://ww.virtel.net/wiki/23-raznoe/108-reshenie-problemy-s-oshibkoj-500-internal-server-error-na-telefonakh-cisco.htmlWebmasternoreply@virtel.net<div class="feed-description"><p>Обнаружилась следующая проблема на телефонах и адаптерах Cisco (SPA 303,SPA 504G2,SPA 942 и других) - при исходящих вызовах через Asterisk нет звука на телефоне, а также не обрабатывается входящее SIP событие BYE</p>
<p>При этом tcpdump показывает, что BYE на телефон отправляется, параметры SDP корректные</p>
<p>Совершенно случайно заметили, что на других линиях, настроенных на этом же телефоне такой проблемы нет</p>
<p>При анализе трафика, оказалось, что на проблемной линии в процессе вызова возникает ошибка "500 internal server error", причем на стороне телефона</p>
<p>Дальнейшее сравнение вызовов с разных линий показало, что на проблемной линии перед ошибкой на телефон приходит пакет с заголовком</p>
<p style="padding-left: 30px;">X-Asterisk-rpid-update: Yes</p>
<p><img src="images/wiki/spa303/tcpdump-screenshot-highlight.png" border="0" alt="" /></p>
<p>После чего в sip.conf для данного устройства было изменен параметр отправки заголовка Remote-party-id (RPID) </p>
<p style="padding-left: 30px;">sendrpid = no</p>
<p>Причем по умолчанию это значение равно "no", но видимо клиент ставил эксперименты и изменил это значение</p>
<p>После проделанных манипуляций проблема ушла</p></div><div class="feed-description"><p>Обнаружилась следующая проблема на телефонах и адаптерах Cisco (SPA 303,SPA 504G2,SPA 942 и других) - при исходящих вызовах через Asterisk нет звука на телефоне, а также не обрабатывается входящее SIP событие BYE</p>
<p>При этом tcpdump показывает, что BYE на телефон отправляется, параметры SDP корректные</p>
<p>Совершенно случайно заметили, что на других линиях, настроенных на этом же телефоне такой проблемы нет</p>
<p>При анализе трафика, оказалось, что на проблемной линии в процессе вызова возникает ошибка "500 internal server error", причем на стороне телефона</p>
<p>Дальнейшее сравнение вызовов с разных линий показало, что на проблемной линии перед ошибкой на телефон приходит пакет с заголовком</p>
<p style="padding-left: 30px;">X-Asterisk-rpid-update: Yes</p>
<p><img src="images/wiki/spa303/tcpdump-screenshot-highlight.png" border="0" alt="" /></p>
<p>После чего в sip.conf для данного устройства было изменен параметр отправки заголовка Remote-party-id (RPID) </p>
<p style="padding-left: 30px;">sendrpid = no</p>
<p>Причем по умолчанию это значение равно "no", но видимо клиент ставил эксперименты и изменил это значение</p>
<p>После проделанных манипуляций проблема ушла</p></div>Подключение номера мегафон по SIP через "Мультифон Бизнес"2020-02-07T09:47:43+03:002020-02-07T09:47:43+03:00https://ww.virtel.net/wiki/23-raznoe/106-podklyuchenie-nomera-megafon-po-sip-cherez-multifon-biznes.htmlWebmasternoreply@virtel.net<div class="feed-description"><p>Внимание !! Сервис доступен только для корпоративных клиентов !!!</p>
<p class="error"><strong>Необходимо <span style="text-decoration: underline;">обязательно</span> отключить </strong><strong>все услуги, использующие голосовой ящик, так как они</strong><strong> конфликтуют с "Мультифон бизнес" </strong></p>
<ul>
<li>Мне звонили S ( команда *105*1155# )</li>
<li>Кто звонил+ ( команда *581*3# )</li>
<li>Замени гудок ( команда *770*12# )</li>
</ul>
<p style="padding-left: 30px;">Также это можно сделать через личный кабинет услуг или техподдержку Мегафон</p>
<p style="padding-left: 30px;"> </p>
<p style="padding-left: 30px;">С включенными услугами или запущенным клиентом Мультифон (eMotion) авторизация завершается ошибкой</p>
<p style="padding-left: 60px;"><strong>403 - Forbidden</strong></p>
<p style="padding-left: 60px;"><strong>User already has maximum available location count</strong></p>
<p> </p>
<p>1. Для подключения любого номера Мегафон по SIP необходимо подключить услугу «МультиФон Бизнес» одним из следующих способов: </p>
<ul>
<li>набрать USSD-команду *137*1*1# </li>
<li>отправить любое текстовое SMS на номер 1117 </li>
<li>подключение в личном кабинете абонента МегаФон</li>
<li>подключение через портал МегаФон Бизнес</li>
</ul>
<p> </p>
<p>В результате на номере будет подключена услуга «МультиФон Бизнес», и будет выделен SIP ID в формате: <Ваш_мобильный_номер>@multifon.ru</p>
<p> </p>
<p>Корпоративные клиенты могут также подключить услугу «МультиФон Бизнес» в офисах продаж или нажмите кнопку «Подключить услугу» в разделе «Для бизнеса»</p>
<p> </p>
<p>Если пароль не пришел при подключении услуги, то наберите USSD команду *137# или отправьте любое текстовое SMS на номер 1117 и выберете в предложенном меню пункт «Получить Пароль».</p>
<p> </p>
<p>Проверить правильность введенного пароля</p>
<p>https://sm.megafon.ru/sm/client/routing/set?login=...@multifon.ru&password=....</p>
<p> </p>
<p>2. Настройка маршрутизации входящих вызовов с помощью USSD-сервиса.</p>
<p>Для перенаправления всех вызовов в Мультифон Бизнес наберите на своём мобильном телефоне USSD команду <strong>*137*2*2# </strong></p>
<p>Или поэтапно - сначала *137# . На экране появится меню:</p>
<p> </p>
<p style="padding-left: 30px;">1 - Получить или изменить пароль</p>
<p style="padding-left: 30px;">2 - Настроить режим входящих</p>
<p style="padding-left: 30px;">0 - Отключить</p>
<p> </p>
<p style="padding-left: 30px;">Для выбора вариантов маршрутизации входящих вызовов вам необходимо выбрать пункт 2 и в ответ появится меню, в котором надо выбрать пункт 2</p>
<p style="padding-left: 30px;"> </p>
<p style="padding-left: 60px;">1 - На телефон</p>
<p style="padding-left: 60px;">2 - В МультиФон Бизнес</p>
<p style="padding-left: 60px;">3 - В МультиФон Бизнес+Телефон</p>
<p> </p>
<p>Также маршрутизацию можно задать через API Мультифон в браузере </p>
<p style="padding-left: 30px;">https://sm.megafon.ru/sm/client/routing/set?routing=1&login=...@multifon.ru&password=....</p>
<p> </p>
<p>3. Обязательно проверьте правильность маршрутизации через API</p>
<p> </p>
<p style="padding-left: 30px;">https://sm.megafon.ru/sm/client/routing/set?login=...@multifon.ru&password=....</p>
<p> </p>
<p>Должно вернуть</p>
<p> </p>
<p class="blockquote" style="padding-left: 30px;"><response></p>
<p class="blockquote" style="padding-left: 60px;"><result></p>
<p class="blockquote" style="padding-left: 90px;"><code>200</code></p>
<p class="blockquote" style="padding-left: 90px;"><description>OK</description></p>
<p class="blockquote" style="padding-left: 60px;"></result></p>
<p class="blockquote" style="padding-left: 60px;"><strong><routing>1</routing></strong></p>
<p class="blockquote" style="padding-left: 30px;"></response></p>
<p style="padding-left: 30px;"> </p>
<p> </p></div><div class="feed-description"><p>Внимание !! Сервис доступен только для корпоративных клиентов !!!</p>
<p class="error"><strong>Необходимо <span style="text-decoration: underline;">обязательно</span> отключить </strong><strong>все услуги, использующие голосовой ящик, так как они</strong><strong> конфликтуют с "Мультифон бизнес" </strong></p>
<ul>
<li>Мне звонили S ( команда *105*1155# )</li>
<li>Кто звонил+ ( команда *581*3# )</li>
<li>Замени гудок ( команда *770*12# )</li>
</ul>
<p style="padding-left: 30px;">Также это можно сделать через личный кабинет услуг или техподдержку Мегафон</p>
<p style="padding-left: 30px;"> </p>
<p style="padding-left: 30px;">С включенными услугами или запущенным клиентом Мультифон (eMotion) авторизация завершается ошибкой</p>
<p style="padding-left: 60px;"><strong>403 - Forbidden</strong></p>
<p style="padding-left: 60px;"><strong>User already has maximum available location count</strong></p>
<p> </p>
<p>1. Для подключения любого номера Мегафон по SIP необходимо подключить услугу «МультиФон Бизнес» одним из следующих способов: </p>
<ul>
<li>набрать USSD-команду *137*1*1# </li>
<li>отправить любое текстовое SMS на номер 1117 </li>
<li>подключение в личном кабинете абонента МегаФон</li>
<li>подключение через портал МегаФон Бизнес</li>
</ul>
<p> </p>
<p>В результате на номере будет подключена услуга «МультиФон Бизнес», и будет выделен SIP ID в формате: <Ваш_мобильный_номер>@multifon.ru</p>
<p> </p>
<p>Корпоративные клиенты могут также подключить услугу «МультиФон Бизнес» в офисах продаж или нажмите кнопку «Подключить услугу» в разделе «Для бизнеса»</p>
<p> </p>
<p>Если пароль не пришел при подключении услуги, то наберите USSD команду *137# или отправьте любое текстовое SMS на номер 1117 и выберете в предложенном меню пункт «Получить Пароль».</p>
<p> </p>
<p>Проверить правильность введенного пароля</p>
<p>https://sm.megafon.ru/sm/client/routing/set?login=...@multifon.ru&password=....</p>
<p> </p>
<p>2. Настройка маршрутизации входящих вызовов с помощью USSD-сервиса.</p>
<p>Для перенаправления всех вызовов в Мультифон Бизнес наберите на своём мобильном телефоне USSD команду <strong>*137*2*2# </strong></p>
<p>Или поэтапно - сначала *137# . На экране появится меню:</p>
<p> </p>
<p style="padding-left: 30px;">1 - Получить или изменить пароль</p>
<p style="padding-left: 30px;">2 - Настроить режим входящих</p>
<p style="padding-left: 30px;">0 - Отключить</p>
<p> </p>
<p style="padding-left: 30px;">Для выбора вариантов маршрутизации входящих вызовов вам необходимо выбрать пункт 2 и в ответ появится меню, в котором надо выбрать пункт 2</p>
<p style="padding-left: 30px;"> </p>
<p style="padding-left: 60px;">1 - На телефон</p>
<p style="padding-left: 60px;">2 - В МультиФон Бизнес</p>
<p style="padding-left: 60px;">3 - В МультиФон Бизнес+Телефон</p>
<p> </p>
<p>Также маршрутизацию можно задать через API Мультифон в браузере </p>
<p style="padding-left: 30px;">https://sm.megafon.ru/sm/client/routing/set?routing=1&login=...@multifon.ru&password=....</p>
<p> </p>
<p>3. Обязательно проверьте правильность маршрутизации через API</p>
<p> </p>
<p style="padding-left: 30px;">https://sm.megafon.ru/sm/client/routing/set?login=...@multifon.ru&password=....</p>
<p> </p>
<p>Должно вернуть</p>
<p> </p>
<p class="blockquote" style="padding-left: 30px;"><response></p>
<p class="blockquote" style="padding-left: 60px;"><result></p>
<p class="blockquote" style="padding-left: 90px;"><code>200</code></p>
<p class="blockquote" style="padding-left: 90px;"><description>OK</description></p>
<p class="blockquote" style="padding-left: 60px;"></result></p>
<p class="blockquote" style="padding-left: 60px;"><strong><routing>1</routing></strong></p>
<p class="blockquote" style="padding-left: 30px;"></response></p>
<p style="padding-left: 30px;"> </p>
<p> </p></div>Подключение asterisk к виртуальной АТС "МТС"2018-04-28T11:15:26+03:002018-04-28T11:15:26+03:00https://ww.virtel.net/wiki/23-raznoe/103-podklyuchenie-asterisk-k-virtualnoj-ats-mts.htmlWebmasternoreply@virtel.net<div class="feed-description"><p>Данная инструкция описывает настройки, необходимые для подключения сервера Asterisk к Виртуальной АТС "МТС" для осуществления входящих и исходящих вызовов через SIP транк</p>
<p> </p>
<p>При подключении услуги "Виртуальная АТС "МТС" вам будут выданы учетные данные для подключения SIP транка,</p>
<p style="padding-left: 30px;">login: sip_E26395xxx</p>
<p style="padding-left: 30px;">auth: sip_E26395xxx_3L1u</p>
<p style="padding-left: 30px;">secret: YOUR_PASSWORD</p>
<p style="padding-left: 30px;">Domain: inside.mts.ru</p>
<p style="padding-left: 30px;">Proxy: szt.vpbx.mts.ru</p>
<p style="padding-left: 30px;"> </p>
<p>Для подключения необходимо прописать в файл sip.conf следующие настройки</p>
<p style="padding-left: 30px;">register => udp://sip_E26395xxx@inside.mts.ru:YOUR_PASSWORD:sip_E26395xxx_3L1u@sz.vpbx.mts.ru:5060</p>
<p style="padding-left: 30px;"> </p>
<p style="padding-left: 30px;">[mts]</p>
<p style="padding-left: 30px;">type = peer</p>
<p style="padding-left: 30px;">outboundproxy = sz.vpbx.mts.ru,force</p>
<p style="padding-left: 30px;">fromdomain = inside.mts.ru</p>
<p style="padding-left: 30px;">fromuser = sip_E26395xxx</p>
<p style="padding-left: 30px;">defaultuser = sip_E26395xxx_3L1u</p>
<p style="padding-left: 30px;">secret = YOUR_PASSWORD</p>
<p style="padding-left: 30px;">host = inside.mts.ru</p>
<p style="padding-left: 30px;">port = 5060</p>
<p style="padding-left: 30px;">context = from_mts</p>
<p style="padding-left: 30px;">disallow = all</p>
<p style="padding-left: 30px;">allow = alaw,ulaw</p>
<p style="padding-left: 30px;">insecure = port,invite</p>
<p style="padding-left: 30px;">dtmfmode = rfc2833</p>
<p style="padding-left: 30px;">canreinvite = no</p>
<p style="padding-left: 30px;">qualify = no</p>
<p> </p>
<p>Выполнить команду </p>
<p style="padding-left: 30px;">asterisk -rx 'sip reload'</p>
<p style="padding-left: 30px;"> </p>
<p>Подождать несколько секунд и выполнить</p>
<p style="padding-left: 30px;">asterisk -rx 'sip show registry' | grep sip_E26395xxx</p>
<p style="padding-left: 30px;"> </p>
<p>На выходе должны получить информацию о состоянии подключения</p>
<p style="padding-left: 30px;">sz.vpbx.mts.ru:5060 N sip_E26395xxx 285 Registered Sat, 28 Apr 2017 11:10:17</p>
<p style="padding-left: 30px;"> </p>
<p>Для того, чтобы начать принимать входящие вызовы необходимо прописать в extensions.conf новый контекст [from_mts]</p>
<p style="padding-left: 30px;">[from_mts]</p>
<p style="padding-left: 30px;">exten => s,1,NoOp( Incoming call from MTS VPBX )</p>
<p style="padding-left: 60px;">same => n, Dial(SIP/101)</p>
<p> </p>
<p>Для исходящих вызовов прописываем шаблон в контекст по умолчанию</p>
<p style="padding-left: 30px;">exten => _8911XXXXXXX, 1 , NoOp( Outgoing call via MTS VPX)</p>
<p style="padding-left: 60px;">same => n, Dial(SIP/mts/${EXTEN}) </p>
<p style="padding-left: 60px;"> </p>
<p>После чего перезагрузить dialplan командой</p>
<p style="padding-left: 30px;">asterisk -rx 'dialplan reload'</p></div><div class="feed-description"><p>Данная инструкция описывает настройки, необходимые для подключения сервера Asterisk к Виртуальной АТС "МТС" для осуществления входящих и исходящих вызовов через SIP транк</p>
<p> </p>
<p>При подключении услуги "Виртуальная АТС "МТС" вам будут выданы учетные данные для подключения SIP транка,</p>
<p style="padding-left: 30px;">login: sip_E26395xxx</p>
<p style="padding-left: 30px;">auth: sip_E26395xxx_3L1u</p>
<p style="padding-left: 30px;">secret: YOUR_PASSWORD</p>
<p style="padding-left: 30px;">Domain: inside.mts.ru</p>
<p style="padding-left: 30px;">Proxy: szt.vpbx.mts.ru</p>
<p style="padding-left: 30px;"> </p>
<p>Для подключения необходимо прописать в файл sip.conf следующие настройки</p>
<p style="padding-left: 30px;">register => udp://sip_E26395xxx@inside.mts.ru:YOUR_PASSWORD:sip_E26395xxx_3L1u@sz.vpbx.mts.ru:5060</p>
<p style="padding-left: 30px;"> </p>
<p style="padding-left: 30px;">[mts]</p>
<p style="padding-left: 30px;">type = peer</p>
<p style="padding-left: 30px;">outboundproxy = sz.vpbx.mts.ru,force</p>
<p style="padding-left: 30px;">fromdomain = inside.mts.ru</p>
<p style="padding-left: 30px;">fromuser = sip_E26395xxx</p>
<p style="padding-left: 30px;">defaultuser = sip_E26395xxx_3L1u</p>
<p style="padding-left: 30px;">secret = YOUR_PASSWORD</p>
<p style="padding-left: 30px;">host = inside.mts.ru</p>
<p style="padding-left: 30px;">port = 5060</p>
<p style="padding-left: 30px;">context = from_mts</p>
<p style="padding-left: 30px;">disallow = all</p>
<p style="padding-left: 30px;">allow = alaw,ulaw</p>
<p style="padding-left: 30px;">insecure = port,invite</p>
<p style="padding-left: 30px;">dtmfmode = rfc2833</p>
<p style="padding-left: 30px;">canreinvite = no</p>
<p style="padding-left: 30px;">qualify = no</p>
<p> </p>
<p>Выполнить команду </p>
<p style="padding-left: 30px;">asterisk -rx 'sip reload'</p>
<p style="padding-left: 30px;"> </p>
<p>Подождать несколько секунд и выполнить</p>
<p style="padding-left: 30px;">asterisk -rx 'sip show registry' | grep sip_E26395xxx</p>
<p style="padding-left: 30px;"> </p>
<p>На выходе должны получить информацию о состоянии подключения</p>
<p style="padding-left: 30px;">sz.vpbx.mts.ru:5060 N sip_E26395xxx 285 Registered Sat, 28 Apr 2017 11:10:17</p>
<p style="padding-left: 30px;"> </p>
<p>Для того, чтобы начать принимать входящие вызовы необходимо прописать в extensions.conf новый контекст [from_mts]</p>
<p style="padding-left: 30px;">[from_mts]</p>
<p style="padding-left: 30px;">exten => s,1,NoOp( Incoming call from MTS VPBX )</p>
<p style="padding-left: 60px;">same => n, Dial(SIP/101)</p>
<p> </p>
<p>Для исходящих вызовов прописываем шаблон в контекст по умолчанию</p>
<p style="padding-left: 30px;">exten => _8911XXXXXXX, 1 , NoOp( Outgoing call via MTS VPX)</p>
<p style="padding-left: 60px;">same => n, Dial(SIP/mts/${EXTEN}) </p>
<p style="padding-left: 60px;"> </p>
<p>После чего перезагрузить dialplan командой</p>
<p style="padding-left: 30px;">asterisk -rx 'dialplan reload'</p></div>Исправляем порядок обзвона агентов в realtime очереди2018-05-04T15:44:29+03:002018-05-04T15:44:29+03:00https://ww.virtel.net/wiki/23-raznoe/102-ispravlyaem-poryadok-obzvona-agentov-v-realtime-ocheredi.htmlWebmasternoreply@virtel.net<div class="feed-description"><p>Наша компания занимается настройкой корпоративных АТС на базе Asterisk. </p>
<p>В данном продукте есть особенность в логике работы команды Queue, а именно с обходом агентов в realtime очереди, т.е. когда у вас список участников очереди хранится в базе данных.</p>
<p> </p>
<p>Допустим у нас есть очередь myqueue с порядком обзвона участников = linear</p>
<p>Требуемый порядок обзвона участников - SIP/105 , SIP/102 , SIP/101</p>
<p> </p>
<p>Типовая структура таблицы участников очереди</p>
<p style="padding-left: 30px;">CREATE TABLE queue_member_table (<br />uniqueid INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT,<br />membername varchar(40),<br />queue_name varchar(128),<br />interface varchar(128),<br />penalty INT(11),<br />paused INT(11),<br />UNIQUE KEY queue_interface (queue_name, interface)<br />);</p>
<p style="padding-left: 30px;">insert into queue_member_table (queue_name,interface) values ('myqueue','SIP/105');</p>
<p style="padding-left: 30px;">insert into queue_member_table (queue_name,interface) values ('myqueue','SIP/102');</p>
<p style="padding-left: 30px;">insert into queue_member_table (queue_name,interface) values ('myqueue','SIP/101');</p>
<p> </p>
<p>Что происходит при вызове команды queue</p>
<p style="padding-left: 30px;">exten => 900,1, Queue(myqueue)</p>
<p> </p>
<p>Asterisk делает sql запрос к таблице участников , а именно</p>
<p style="padding-left: 30px;">SELECT * FROM queue_member_table WHERE interface LIKE '%' AND queue_name = 'myqueue' ORDER BY interface</p>
<p> </p>
<p>В запросе указан порядок сортировки по полю interface. Результат выборки будет следующим</p>
<p style="padding-left: 30px;">SIP/101</p>
<p style="padding-left: 30px;">SIP/102</p>
<p style="padding-left: 30px;">SIP/105</p>
<p> </p>
<p>Соответственно логика обзвона участников очереди совсем не та, которую мы ожидаем.</p>
<p> </p>
<p>Для того чтобы решить эту проблему нами был разработан патч, который вносит исправление в формат запроса к таблице участников. </p>
<p>Патч гарантированно работает на Asterisk-certified 11.6-cert18 с настроенной конфигурацией через модуль res_odbc</p>
<p> </p>
<p>1. Скачайте и извлеките из архива ПО asterisk.</p>
<p>2. Сохраните данный код в файл patch_odbc_queue_order.diff в каталог с извлеченными исходниками</p>
<p class="code" style="padding-left: 30px;">--- res/res_config_odbc.c</p>
<p class="code" style="padding-left: 30px;">+++ res/res_config_odbc.c</p>
<p class="code" style="padding-left: 30px;">@@ -375,7 +375,13 @@</p>
<p class="code" style="padding-left: 30px;"> }</p>
<p class="code" style="padding-left: 30px;"> va_end(aq);</p>
<p class="code" style="padding-left: 30px;"> </p>
<p class="code" style="padding-left: 30px;">- snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " ORDER BY %s", initfield);</p>
<p class="code" style="padding-left: 30px;">+</p>
<p class="code" style="padding-left: 30px;">+ if ( strcmp(initfield,"interface") == 0 ) {</p>
<p class="code" style="padding-left: 30px;">+ snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " ORDER BY %s", "-1");</p>
<p class="code" style="padding-left: 30px;">+ } else {</p>
<p class="code" style="padding-left: 30px;">+ snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " ORDER BY %s", initfield);</p>
<p class="code" style="padding-left: 30px;">+ }</p>
<p class="code" style="padding-left: 30px;"> </p>
<p class="code" style="padding-left: 30px;"> va_copy(cps.ap, ap);</p>
<p class="code" style="padding-left: 30px;"> stmt = ast_odbc_prepare_and_execute(obj, custom_prepare, &cps);</p>
<p> </p>
<p>3. Перейдите в каталог с исходниками, выполните команду</p>
<p style="padding-left: 30px;">patch -p0 < patch_odbc_queue_order.diff</p>
<p> </p>
<p>4. Собирайте asterisk</p>
<p> </p>
<p>Также вы можете добавить в таблицу queue_member_table свое поле, определяющее порядок сортировки (например inorder) и заменить в патче </p>
<p style="padding-left: 30px;">snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " ORDER BY %s", "-1");</p>
<p>на</p>
<p style="padding-left: 30px;">snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " ORDER BY %s", "inorder");</p></div><div class="feed-description"><p>Наша компания занимается настройкой корпоративных АТС на базе Asterisk. </p>
<p>В данном продукте есть особенность в логике работы команды Queue, а именно с обходом агентов в realtime очереди, т.е. когда у вас список участников очереди хранится в базе данных.</p>
<p> </p>
<p>Допустим у нас есть очередь myqueue с порядком обзвона участников = linear</p>
<p>Требуемый порядок обзвона участников - SIP/105 , SIP/102 , SIP/101</p>
<p> </p>
<p>Типовая структура таблицы участников очереди</p>
<p style="padding-left: 30px;">CREATE TABLE queue_member_table (<br />uniqueid INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT,<br />membername varchar(40),<br />queue_name varchar(128),<br />interface varchar(128),<br />penalty INT(11),<br />paused INT(11),<br />UNIQUE KEY queue_interface (queue_name, interface)<br />);</p>
<p style="padding-left: 30px;">insert into queue_member_table (queue_name,interface) values ('myqueue','SIP/105');</p>
<p style="padding-left: 30px;">insert into queue_member_table (queue_name,interface) values ('myqueue','SIP/102');</p>
<p style="padding-left: 30px;">insert into queue_member_table (queue_name,interface) values ('myqueue','SIP/101');</p>
<p> </p>
<p>Что происходит при вызове команды queue</p>
<p style="padding-left: 30px;">exten => 900,1, Queue(myqueue)</p>
<p> </p>
<p>Asterisk делает sql запрос к таблице участников , а именно</p>
<p style="padding-left: 30px;">SELECT * FROM queue_member_table WHERE interface LIKE '%' AND queue_name = 'myqueue' ORDER BY interface</p>
<p> </p>
<p>В запросе указан порядок сортировки по полю interface. Результат выборки будет следующим</p>
<p style="padding-left: 30px;">SIP/101</p>
<p style="padding-left: 30px;">SIP/102</p>
<p style="padding-left: 30px;">SIP/105</p>
<p> </p>
<p>Соответственно логика обзвона участников очереди совсем не та, которую мы ожидаем.</p>
<p> </p>
<p>Для того чтобы решить эту проблему нами был разработан патч, который вносит исправление в формат запроса к таблице участников. </p>
<p>Патч гарантированно работает на Asterisk-certified 11.6-cert18 с настроенной конфигурацией через модуль res_odbc</p>
<p> </p>
<p>1. Скачайте и извлеките из архива ПО asterisk.</p>
<p>2. Сохраните данный код в файл patch_odbc_queue_order.diff в каталог с извлеченными исходниками</p>
<p class="code" style="padding-left: 30px;">--- res/res_config_odbc.c</p>
<p class="code" style="padding-left: 30px;">+++ res/res_config_odbc.c</p>
<p class="code" style="padding-left: 30px;">@@ -375,7 +375,13 @@</p>
<p class="code" style="padding-left: 30px;"> }</p>
<p class="code" style="padding-left: 30px;"> va_end(aq);</p>
<p class="code" style="padding-left: 30px;"> </p>
<p class="code" style="padding-left: 30px;">- snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " ORDER BY %s", initfield);</p>
<p class="code" style="padding-left: 30px;">+</p>
<p class="code" style="padding-left: 30px;">+ if ( strcmp(initfield,"interface") == 0 ) {</p>
<p class="code" style="padding-left: 30px;">+ snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " ORDER BY %s", "-1");</p>
<p class="code" style="padding-left: 30px;">+ } else {</p>
<p class="code" style="padding-left: 30px;">+ snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " ORDER BY %s", initfield);</p>
<p class="code" style="padding-left: 30px;">+ }</p>
<p class="code" style="padding-left: 30px;"> </p>
<p class="code" style="padding-left: 30px;"> va_copy(cps.ap, ap);</p>
<p class="code" style="padding-left: 30px;"> stmt = ast_odbc_prepare_and_execute(obj, custom_prepare, &cps);</p>
<p> </p>
<p>3. Перейдите в каталог с исходниками, выполните команду</p>
<p style="padding-left: 30px;">patch -p0 < patch_odbc_queue_order.diff</p>
<p> </p>
<p>4. Собирайте asterisk</p>
<p> </p>
<p>Также вы можете добавить в таблицу queue_member_table свое поле, определяющее порядок сортировки (например inorder) и заменить в патче </p>
<p style="padding-left: 30px;">snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " ORDER BY %s", "-1");</p>
<p>на</p>
<p style="padding-left: 30px;">snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " ORDER BY %s", "inorder");</p></div>Подключение asterisk к виртуальной АТС "Билайн"2018-04-28T11:15:26+03:002018-04-28T11:15:26+03:00https://ww.virtel.net/wiki/23-raznoe/101-podklyuchenie-asterisk-k-virtualnoj-ats-beeline.htmlWebmasternoreply@virtel.net<div class="feed-description"><p>Данная инструкция описывает настройки, необходимые для подключения сервера Asterisk к Виртуальной АТС "Билайн" для осуществления входящих и исходящих вызовов через SIP транк</p>
<p> </p>
<p>При подключении услуги "Виртуальная АТС "Билайн" вам будут выданы учетные данные для подключения SIP транка,</p>
<p style="padding-left: 30px;">login: 7812334xxxx</p>
<p style="padding-left: 30px;">secret: YOUR_PASSWORD</p>
<p style="padding-left: 30px;">Proxy: spb.sip.beeline.ru</p>
<p style="padding-left: 30px;"> </p>
<p>Для подключения необходимо прописать в файл sip.conf следующие настройки</p>
<p style="padding-left: 30px;">register => udp://7812334xxxx@spb.sip.beeline.YOUR_PASSWORD:7812334xxxx@spb.sip.beeline.ru@spb.sip.beeline.ru:5060</p>
<p style="padding-left: 30px;"> </p>
<p style="padding-left: 30px;">[beeline]</p>
<p style="padding-left: 30px;">type = peer</p>
<p style="padding-left: 30px;">outboundproxy = spb.sip.beeline.ru,force</p>
<p style="padding-left: 30px;">fromdomain = spb.sip.beeline.ru</p>
<p style="padding-left: 30px;">fromuser = 7812334xxxx</p>
<p style="padding-left: 30px;">defaultuser = 7812334xxxx</p>
<p style="padding-left: 30px;">secret = YOUR_PASSWORD</p>
<p style="padding-left: 30px;">host = spb.sip.beeline.ru</p>
<p style="padding-left: 30px;">port = 5060</p>
<p style="padding-left: 30px;">context = from_beeline</p>
<p style="padding-left: 30px;">disallow = all</p>
<p style="padding-left: 30px;">allow = alaw,ulaw</p>
<p style="padding-left: 30px;">insecure = port,invite</p>
<p style="padding-left: 30px;">dtmfmode = rfc2833</p>
<p style="padding-left: 30px;">canreinvite = no</p>
<p style="padding-left: 30px;">qualify = no</p>
<p> </p>
<p>Выполнить команду </p>
<p style="padding-left: 30px;">asterisk -rx 'sip reload'</p>
<p style="padding-left: 30px;"> </p>
<p>Подождать несколько секунд и выполнить</p>
<p style="padding-left: 30px;">asterisk -rx 'sip show registry' | grep 7812334xxxx</p>
<p style="padding-left: 30px;"> </p>
<p>На выходе должны получить информацию о состоянии подключения</p>
<p style="padding-left: 30px;">spb.sip.beeline.ru:5060 N 7812334xxxx@ 285 Registered Sat, 28 Apr 2017 11:10:17</p>
<p style="padding-left: 30px;"> </p>
<p>Для того, чтобы начать принимать входящие вызовы необходимо прописать в extensions.conf новый контекст [from_beeline]</p>
<p style="padding-left: 30px;">[from_beeline]</p>
<p style="padding-left: 30px;">exten => s,1,NoOp( Incoming call from BEELINE VPBX )</p>
<p style="padding-left: 60px;">same => n, Dial(SIP/101)</p>
<p> </p>
<p>Для исходящих вызовов прописываем шаблон в контекст по умолчанию</p>
<p style="padding-left: 30px;">exten => _8812XXXXXXX, 1 , NoOp( Outgoing call via BEELINE VPX)</p>
<p style="padding-left: 60px;">same => n, Dial(SIP/beeline/${EXTEN}) </p>
<p style="padding-left: 60px;"> </p>
<p>После чего перезагрузить dialplan командой</p>
<p style="padding-left: 30px;">asterisk -rx 'dialplan reload'</p></div><div class="feed-description"><p>Данная инструкция описывает настройки, необходимые для подключения сервера Asterisk к Виртуальной АТС "Билайн" для осуществления входящих и исходящих вызовов через SIP транк</p>
<p> </p>
<p>При подключении услуги "Виртуальная АТС "Билайн" вам будут выданы учетные данные для подключения SIP транка,</p>
<p style="padding-left: 30px;">login: 7812334xxxx</p>
<p style="padding-left: 30px;">secret: YOUR_PASSWORD</p>
<p style="padding-left: 30px;">Proxy: spb.sip.beeline.ru</p>
<p style="padding-left: 30px;"> </p>
<p>Для подключения необходимо прописать в файл sip.conf следующие настройки</p>
<p style="padding-left: 30px;">register => udp://7812334xxxx@spb.sip.beeline.YOUR_PASSWORD:7812334xxxx@spb.sip.beeline.ru@spb.sip.beeline.ru:5060</p>
<p style="padding-left: 30px;"> </p>
<p style="padding-left: 30px;">[beeline]</p>
<p style="padding-left: 30px;">type = peer</p>
<p style="padding-left: 30px;">outboundproxy = spb.sip.beeline.ru,force</p>
<p style="padding-left: 30px;">fromdomain = spb.sip.beeline.ru</p>
<p style="padding-left: 30px;">fromuser = 7812334xxxx</p>
<p style="padding-left: 30px;">defaultuser = 7812334xxxx</p>
<p style="padding-left: 30px;">secret = YOUR_PASSWORD</p>
<p style="padding-left: 30px;">host = spb.sip.beeline.ru</p>
<p style="padding-left: 30px;">port = 5060</p>
<p style="padding-left: 30px;">context = from_beeline</p>
<p style="padding-left: 30px;">disallow = all</p>
<p style="padding-left: 30px;">allow = alaw,ulaw</p>
<p style="padding-left: 30px;">insecure = port,invite</p>
<p style="padding-left: 30px;">dtmfmode = rfc2833</p>
<p style="padding-left: 30px;">canreinvite = no</p>
<p style="padding-left: 30px;">qualify = no</p>
<p> </p>
<p>Выполнить команду </p>
<p style="padding-left: 30px;">asterisk -rx 'sip reload'</p>
<p style="padding-left: 30px;"> </p>
<p>Подождать несколько секунд и выполнить</p>
<p style="padding-left: 30px;">asterisk -rx 'sip show registry' | grep 7812334xxxx</p>
<p style="padding-left: 30px;"> </p>
<p>На выходе должны получить информацию о состоянии подключения</p>
<p style="padding-left: 30px;">spb.sip.beeline.ru:5060 N 7812334xxxx@ 285 Registered Sat, 28 Apr 2017 11:10:17</p>
<p style="padding-left: 30px;"> </p>
<p>Для того, чтобы начать принимать входящие вызовы необходимо прописать в extensions.conf новый контекст [from_beeline]</p>
<p style="padding-left: 30px;">[from_beeline]</p>
<p style="padding-left: 30px;">exten => s,1,NoOp( Incoming call from BEELINE VPBX )</p>
<p style="padding-left: 60px;">same => n, Dial(SIP/101)</p>
<p> </p>
<p>Для исходящих вызовов прописываем шаблон в контекст по умолчанию</p>
<p style="padding-left: 30px;">exten => _8812XXXXXXX, 1 , NoOp( Outgoing call via BEELINE VPX)</p>
<p style="padding-left: 60px;">same => n, Dial(SIP/beeline/${EXTEN}) </p>
<p style="padding-left: 60px;"> </p>
<p>После чего перезагрузить dialplan командой</p>
<p style="padding-left: 30px;">asterisk -rx 'dialplan reload'</p></div>