WiKi - Виртуальная АТС "ВирТел" - работает по всей России Виртуальная АТС. Virtual PBX. Петрозаводск, Карелия. Бесплатная МиниАТС https://ww.virtel.net/wiki/23-raznoe.feed 2026-03-15T23:53:50+03:00 Joomla! - Open Source Content Management Решение проблемы с ошибкой "500 internal server error" на телефонах Cisco 2021-11-23T18:13:49+03:00 2021-11-23T18:13:49+03:00 https://ww.virtel.net/wiki/23-raznoe/108-reshenie-problemy-s-oshibkoj-500-internal-server-error-na-telefonakh-cisco.html Webmaster noreply@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:00 2020-02-07T09:47:43+03:00 https://ww.virtel.net/wiki/23-raznoe/106-podklyuchenie-nomera-megafon-po-sip-cherez-multifon-biznes.html Webmaster noreply@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 в формате: &lt;Ваш_мобильный_номер&gt;@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&amp;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&amp;login=...@multifon.ru&amp;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&amp;password=....</p> <p> </p> <p>Должно вернуть</p> <p> </p> <p class="blockquote" style="padding-left: 30px;">&lt;response&gt;</p> <p class="blockquote" style="padding-left: 60px;">&lt;result&gt;</p> <p class="blockquote" style="padding-left: 90px;">&lt;code&gt;200&lt;/code&gt;</p> <p class="blockquote" style="padding-left: 90px;">&lt;description&gt;OK&lt;/description&gt;</p> <p class="blockquote" style="padding-left: 60px;">&lt;/result&gt;</p> <p class="blockquote" style="padding-left: 60px;"><strong>&lt;routing&gt;1&lt;/routing&gt;</strong></p> <p class="blockquote" style="padding-left: 30px;">&lt;/response&gt;</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 в формате: &lt;Ваш_мобильный_номер&gt;@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&amp;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&amp;login=...@multifon.ru&amp;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&amp;password=....</p> <p> </p> <p>Должно вернуть</p> <p> </p> <p class="blockquote" style="padding-left: 30px;">&lt;response&gt;</p> <p class="blockquote" style="padding-left: 60px;">&lt;result&gt;</p> <p class="blockquote" style="padding-left: 90px;">&lt;code&gt;200&lt;/code&gt;</p> <p class="blockquote" style="padding-left: 90px;">&lt;description&gt;OK&lt;/description&gt;</p> <p class="blockquote" style="padding-left: 60px;">&lt;/result&gt;</p> <p class="blockquote" style="padding-left: 60px;"><strong>&lt;routing&gt;1&lt;/routing&gt;</strong></p> <p class="blockquote" style="padding-left: 30px;">&lt;/response&gt;</p> <p style="padding-left: 30px;"> </p> <p> </p></div> Подключение asterisk к виртуальной АТС "МТС" 2018-04-28T11:15:26+03:00 2018-04-28T11:15:26+03:00 https://ww.virtel.net/wiki/23-raznoe/103-podklyuchenie-asterisk-k-virtualnoj-ats-mts.html Webmaster noreply@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 =&gt; 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 =&gt; s,1,NoOp( Incoming call from MTS VPBX )</p> <p style="padding-left: 60px;">same =&gt; n, Dial(SIP/101)</p> <p> </p> <p>Для исходящих вызовов прописываем шаблон в контекст по умолчанию</p> <p style="padding-left: 30px;">exten =&gt; _8911XXXXXXX, 1 , NoOp( Outgoing call via MTS VPX)</p> <p style="padding-left: 60px;">same =&gt; 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 =&gt; 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 =&gt; s,1,NoOp( Incoming call from MTS VPBX )</p> <p style="padding-left: 60px;">same =&gt; n, Dial(SIP/101)</p> <p> </p> <p>Для исходящих вызовов прописываем шаблон в контекст по умолчанию</p> <p style="padding-left: 30px;">exten =&gt; _8911XXXXXXX, 1 , NoOp( Outgoing call via MTS VPX)</p> <p style="padding-left: 60px;">same =&gt; 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:00 2018-05-04T15:44:29+03:00 https://ww.virtel.net/wiki/23-raznoe/102-ispravlyaem-poryadok-obzvona-agentov-v-realtime-ocheredi.html Webmaster noreply@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 =&gt; 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, &amp;cps);</p> <p> </p> <p>3. Перейдите в каталог с исходниками, выполните команду</p> <p style="padding-left: 30px;">patch -p0 &lt; 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 =&gt; 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, &amp;cps);</p> <p> </p> <p>3. Перейдите в каталог с исходниками, выполните команду</p> <p style="padding-left: 30px;">patch -p0 &lt; 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:00 2018-04-28T11:15:26+03:00 https://ww.virtel.net/wiki/23-raznoe/101-podklyuchenie-asterisk-k-virtualnoj-ats-beeline.html Webmaster noreply@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 =&gt; 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 =&gt; s,1,NoOp( Incoming call from BEELINE VPBX )</p> <p style="padding-left: 60px;">same =&gt; n, Dial(SIP/101)</p> <p> </p> <p>Для исходящих вызовов прописываем шаблон в контекст по умолчанию</p> <p style="padding-left: 30px;">exten =&gt; _8812XXXXXXX, 1 , NoOp( Outgoing call via BEELINE VPX)</p> <p style="padding-left: 60px;">same =&gt; 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 =&gt; 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 =&gt; s,1,NoOp( Incoming call from BEELINE VPBX )</p> <p style="padding-left: 60px;">same =&gt; n, Dial(SIP/101)</p> <p> </p> <p>Для исходящих вызовов прописываем шаблон в контекст по умолчанию</p> <p style="padding-left: 30px;">exten =&gt; _8812XXXXXXX, 1 , NoOp( Outgoing call via BEELINE VPX)</p> <p style="padding-left: 60px;">same =&gt; 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>