![]() |
|
![]() | +380(66)433-69-36 |
![]() |
+380(66)433-69-36 |
![]() | +380(66)433-69-36 |
- BitLocker с GUI под linux
- Ищем вирус elTest
- Работаем с бесплатным SSL сертификатом Letsencrypt с помощью certbot
- Синхронизация ресурсов с удаленного сервера локально
- Применение нестандартного SEO и статус 404
- MySQL синхронизируем права с разных серверов
- IPSec VPN соединение между офисами.
- "Зеркало" сайта на стороне. Донастраиваем nginx
- Дефрагментация таблиц всех баз MySQL
- Месяц в родительном падеже strftime PHP
- INIT скрипт для Dropbox
- osCommerce VAM Edition 226. Ошибки
- PositiveSSL порядок сертификатов
- osCommerce. Создаем модуль доставки
- Восстановление mySQL баз данных
- osCommerce.Перенос магазина в другой домен
- osCommerce.Прячем адмику
- osCommerce. Продление жизни сессий
- osCommerce. Создаем платежный модуль
- 10 причин выбрать нас
- GRUB2 восстановление
- osCommerce не пересчитывает общую сумму заказа
- Список потенциально опасных скриптов
- Отправка файлов из Dropbox по e-mail
- "Черный список" почтовых доменов
- Боремся с назойливыми иностранцами
- Яндекс-Диск, и стоит ли им пользоваться.
- Обновление модуля Интеркассы для osCommerce
- Веб-почта на сайте хостинга
- Подключение Outlook Express к хостингу



Астериск и автоконференция
( 1 Vote )
Автоконференция в системе Астериск может быть реализована разными способами. В настоящей статье рассматривается возможность конференция через call файлы. Не будем говорить, что материалов и примеров подобного решения существует множество - здесь они не обсуждаются. Кому интересно будет углубиться в тему - пожалуйста вот сюда: На английском, правда... но зато от источников. Остановимся на таких сложностях, связанных с работой этого функционала как:
1. Назначение имени и телефона звонящего (CallerID) при конференции
2. Принудительное назначение CallerID при работе с провайдерами VoIP.
3. Использование локальных каналов при организации конференции.
Собственно, в чем же состоит проблема? А проблема состоит в том, что подобной реалиации Астериск пытается идентифицировать себя
на шлюзе у провайдера как anonymous@anonymous.invalid. Что это значит?... кроме того, что провайдер может не принять звонок - практически больше ничего. Например justvoip.com корректно обрабатывает подобные авторизации, а вот SIPNET - отсылает куда подальше. И вот что странно - прав и один и другой. Первый обрабатывает звонок все равно, поскольку дальнейшая авторизация проходит корректно. А вот второй не хочет принимать звонок, поскольку идентификатор звонящего, несмотря на авторизацию с его точки зрения некорректен. Почему Астериск именно так формирует запрос на шлюз - это конечно вопрос не ко мне, но в версии начиная с 1.8 так и есть. При этом все фишки провайдера в виде fromuser, fromdomain установлены и работают аж бегом при обычном звонке. Некоторые одаренные особы решают это прямой корректировкой исходного кода и вставляют туда свои атрибуты домена. Надежно - но не надолго, при этом неприменимо если провайдеров несколько. Установка в .call файле идентификатора CallerID ничего не дает - она отображается корректно в CDR, но не используется для авторизации. Есть возможность в .call файле установить идентификатор звонка, или поиграться с глобальными переменными так же ожидаемого результата не дали. И кто бы мог подумать, что на самом деле может оказаться решением. Прописать перед звонком на SIPNET CallerID самым что ни есть принудительным образом примерно так:
exten => ....,n,Set(CALLERID(all)="IP PBX" <цифровой код@sipnet.net>)
и вот о чудо. Звонок происходит корректно. Правда... Х-мм. при этом в CDR заносится именно этот идентификатор CallerID что может сбить биллинг с толку, но можно например перед всем этим сохранить оригинальный идентификатор звонящего во временной переменной а после звонка его восстановить.
Несколько слов про локальные каналы.[ Dial(Local/extension@context) ] Их использование явно прописано в документации, как желаемое для тех, кто хочет вести корректный учет звонков, и потому можно только подтвердить это. Используйте именно их вместо прямых звонков, например на SIP устройства, и будет счастье. Еще пожелание к .call файлам - обязательно используйте как непосредственное назначение идентификатор звонящего в константе CallerID:, так и задавайте дополнительные поля для заполнения CDR таких как Account: и cdr(userfield) - это позволит в дальнейшем легче разобраться в той куче сообщений, которая формируется при звонке.
Бдения и случайности не случайны. Обнаружился источник проблем и способ его решения. ОКАЗЫВАЕТСЯ идентификатор звонящего в .call файле действует только на первый исходящий звонок, при ответе на который он почему-то просто забывается... Оп-па. А лечим это все просто. Поскольку в оном файле можно задавать значения переменных, то это и сделаем.
Set:CALLERID(all)="А вот мое имя" <и мой реальный телефон>.
Все.Теперь все работает как нужно и записи CDR-а также формируются корректно. Ну кто бы мог подумать... ну кто? И все-же. Отсюда можно подчерпнуть один очень важный момент. Задавайте на всякий случай все необходимые переменные через Set. Они будут действовать для второго звонка. Вот так.