Sip клиент windows для asterisk

В этой статье мы поговорим о каталоге WinSxS в Windows, причинах его постоянного роста и способах очистки. Каталог C:\windows\WinSxS является хранилищем компонентов Windows. В этом каталоге хранятся dll библиотеки, бинарные и xml файлы, необходимые для установки и работы различных ролей и компонентов Windows. Каждый раз когда вы устанавливаете обновления Windows (это происходит ежемесячно), новая версия обновляемого компонента устанавливается в систему, а старая сохраняется в хранилище компонентов WinSxS (это необходимо для обеспечения совместимости и возможности “отката“ к старым версиям компонентов при удалении проблемного обновления).

Со временем размер каталога WinSxS постоянно увеличивается. Причем его размер ничем не ограничен (хотя на практике размер папки WinSxS в Windows 10 редко превышает 15-20 Гб.)

каталог WinSxS в windows10

В этой статье мы рассмотрим наиболее безвредные способы очистки папки WinSxS в Windows 10 и Windows Server.

  • Оптимизация хранилища компонентов и удаление старых версий компонентов, оставшихся после установки обновлений Windows;
  • Технология Features on Demand (функции по требованию), позволяющая удалить неиспользуемые компоненты Windows с диска;
  • Сжатие файлов в папке WinSxS – способ уменьшить размер каталога WinSxS за счет включения NTFS компрессии.

У многих пользователей возникает естественный вопрос можно ли вручную удалить файлы из папки WinSxS. Ответ на этот вопрос – категоричное НЕТ! Такими действиями с большой долей вероятности вы сломаете свою Windows. И хотя отдельные попытки удаления конкретных файлов из папки WinSxS могут быть удачными, рекомендовать этот способ нельзя.

Содержание:

  • Как узнать реальный размер папки WinSxS в Windows 10?
  • Очистка хранилища компонентов WinSxS в Windows
  • Удаление неиспользуемых компонентов Windows (Windows Server)
  • Включаем NTFS сжатие на папке WinSxS в Windows

Как узнать реальный размер папки WinSxS в Windows 10?

Самый простой способ получить текущий размер каталога WinSxS в Windows, запустить проводник File Explorer и открыть свойства папки %windir%\WinSxS (или воспользоваться скриптом PowerShell). Но имейте в виду, что большинство файловых менеджеров (в том числе File Explorer) показывают несколько больший размер каталога WinSxS, чем он занимает на диске.

Дело в том, что в каталоге WinSxS есть большое количество hard links (жестких символических ссылок) на файлы в других системных каталогах. Файловые менеджеры при подсчете размера папки WinSxS учитывают объем файлов, на которые ссылаются жесткие ссылки, а это не корректно.

Чтобы реальный (без учета жестких ссылок) размер папки WinSxS, воспользуйтесь утилитой SysInternal du:

du -v c:\windows\winSXS

получить реальный размер каталога winsxs с помощью утилиты du.exe

Но проще всего проанализировать размер хранилища компонентов в папке WinSxS с помощью команды DISM:

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

Dism.exe Cleanup Image-AnalyzeComponentStore

Разберемся, что возвращает данная команда:

Размер хранилища компонентов по данным проводника : 5.70 GB (это размер хранилища с учета жестких ссылок, который отображается в проводнике)
Фактический размер хранилища компонентов : 5.49 GB (реальный размер хранилища компонентов за исключением жестких ссылок)
Совместно с Windows : 3.12 GB (обязательные файлы системы, не могут быть удалены)
Резервные копии и отключенные компоненты : 2.12 GB (устаревшие файлы компонентов, которые нужны на случай проблем с установленными обновлениями)
Кэш и временные данные : 245.87 MB (файлы используются для ускорения работы системы обслуживания)
Дата последней очистки : 2018-07-31 12:45:23
Число освобождаемых пакетов : 10 (файлы, которые обновились после установки обновлений Windows, они будут удалены при очистке хранилища)
Рекомендуется очистка хранилища компонентов : Да

Как вы видите, в данном случае можно уменьшить размер каталога WinSxS на 2.1 Гб + 250 Мб.

Очистка хранилища компонентов WinSxS в Windows

Самый быстрый и простой способ освободить место в хранилище компонентов Windows (т.е. очистить папку WinSxS) – оптимизация хранилища командой:

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

Dism.exe Cleanup Image StartComponentCleanup

Опция Dism /StartComponentCleanup поддерживается во всех версиях Windows, начиная с Windows 8/Windows Server.

После окончания очистки проверьте текущий размер хранилища компонентов:

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

В моем примере это помогло уменьшить размер папки WinSxS на 2,5 Гб.

С помощью еще одного параметра /ResetBase вы можете удалить все предыдущие версии компонентов, оставшиеся после установки обновлений Windows. После этого вы не сможете удалить установленные обновления или Service Pack, а в панели обновлений
appwiz.cpl
у обновлений пропадет кнопка «Удалить»).

Чтобы очистить старые версии компонентов, выполните:

Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase

В Windows 7 и Windows Server 2008 R2 для очистки старых версий компонентов, оставшихся после установки сервис пака, использовался еще один параметр DISM:

dism /online /Cleanup-Image /spsuperseded

Также вы можете удалить устаревшие обновления с помощью мастера очистки диска. Выполните команду cleanmgr c правами администратора.

В окне утилиты выберите диск и в следующем окне нажмите кнопку «Очистить системны файлы».

Далее выберите опцию “Файлы журнала обновления Windows» и нажмите ОK. Утилита очистки диска покажет сколько места вы можете освободить, удалив файлы журнала старых обновлений Windows. В моем примере это 427 Мб.

После окончания очистки хранилища с помощью DISM проверьте сколько освободилось места на диске.

В планировщике задания Windows 10 и Windows Server 2016 есть специальное задание автоматического обслуживания, которое регулярно выполняет оптимизацию и очистку каталога WinSxS (выполняется действия, аналогичные команде dism с ключом StartComponentCleanup). Это задание StartComponentCleanup находится в разделе \Microsoft\Windows\Servicing. Данное задание запускается в фоновом режиме и автоматически удаляет версии компонентов старше 30 дней, которое были заменены более новыми версиями.

Можно запустить это задание вручную так:

schtasks.exe /Run /TN "\Microsoft\Windows\Servicing\StartComponentCleanup"

задание планировщика StartComponentCleanup - очистка компонентов

Удаление неиспользуемых компонентов Windows (Windows Server)

В статье Безопасная очистка папки WinSxS в Windows Server 2016/2012 мы рассмотрели функцию Features on Demand (функции по требованию), предоставляющую возможность удаления с диска бинарных файлов неиспользуемых ролей и компонентов из каталога WinSxS. Для этого в Windows Server используется командлет PoweShell Uninstall-WindowsFeature.

В Windows 10 командлет Uninstall-WindowsFeature отсуствует, и для удаления компонентов Windows из образа нужно использовать DISM.

DISM в отличии от Uninstall-WindowsFeature не удаляет зависимые компоненты.

Полный список доступных функций в образе Windows 10 можно получить с помощью команды:
DISM.exe /Online /English /Get-Features /Format:Table

windows 10 dism get-features список установленных компонентов

Чтобы удалить, например компонент TelnetClient с диска (из каталога WinSxS), выполните команду:
DISM.exe /Online /Disable-Feature /Featurename:TelnetClient /Remove

DISM Disable-Feature Remove

Если еще раз вывести список всех доступных функций по требованию в Windows, вы увидите, что статус компонента изменится на Disabled with Payload Removed.

Таким образом в Windows можно существенно уменьшить размер папки WinSxS, удалив с диска неиспользуемые компоненты. Единственный нюанс, это вариант очистки каталога WinSxS подойдет для достаточной продвинутых пользователей, которые разбираются в компонентах Windows 10 и их назначении.

Включаем NTFS сжатие на папке WinSxS в Windows

Еще один способ уменьшить размера каталога WinSxS в Windows 10 – сжать содержимое каталога на уровне файловой системы NTFS.

  1. Откройте командную строку с правами администратора;
  2. Остановите и отключите службы Windows Installer и Windows Module Installer:
    sc stop msiserver
    
    sc stop TrustedInstaller
    
    sc config msiserver start= disabled
    
    sc config TrustedInstaller start= disabled
  3. Создайте резервную копию списков доступа (ACL) назначенных на файлы и папки в каталоге WinSxS с помощью утилиты icacls. Резервная копия ACL представляет собой обычной текстовый файл, в котором указаны все файлы и каталоги и назначенные на них NTFS разрешения (в дальнейшем этот файл понадобиться для восстановления оригинальных ACL):
    icacls "%WINDIR%\WinSxS" /save "%WINDIR%\WinSxS_NTFS.acl" /t

    создаем резевную копию разрешений каталога winsxs

  4. Назначьте себя владельцем папки WinSxS и всех вложенных каталогов:
    takeown /f "%WINDIR%\WinSxS" /r
  5. Предоставьте своей учетной записи полные права на каталог WinSxS:
    icacls "%WINDIR%\WinSxS" /grant "%USERDOMAIN%\%USERNAME%":(F) /t
  6. Теперь можно выполнить сжатие файлов в каталоге WinSxS с помощью команды compact. Т.к. часть файлов может использоваться Windows, нужно указать параметр /i. Иначе сжатие будет остановлено на первом же занятом файле (в Windows 10 можно использовать более прогрессивное LZX сжатие):
    compact /s:"%WINDIR%\WinSxS" /c /a /i *

    Сжимаем содержимое каталога winsxs

  7. Теперь нужно восстановить TrustedInstaller как владельца каталога WinSxS:
    icacls "%WINDIR%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t
  8. И вернуть оригинальные NTFS разрешения на каталог WinSxS из резервной копии ACL:
    icacls "%WINDIR%" /restore "%WINDIR%\WinSxS_NTFS.acl"
  9. Измените типа тип запуска служб Windows Installer и Windows Module Installer:
    sc config msiserver start= demand
    
    sc config TrustedInstaller start= demand

Проверьте текущий размер каталога WinSxS.

уменьшить размер каталога winsxs в windows10 с помощью сжатия

Как вы видите, в нашем примере размер папки WinSxS за счет сжатия уменьшился с 9,36 Гб до 6,5 Гб (примерно на треть). Неплохо, особо для небольшого по размеру SSD-диска.

Указанные команды можно выполнять по отдельности (так проще контролировать успешность выполнения каждой из них), либо можно объединить все операции в один файл скрипт. Вы можете скачать готовый bat файл для сжатия WinSxS здесь compress_winsxs.bat

Данный скрипт нужно запускать периодически, т.к. в каталоге WinSxS будут появляться новые «несжатые» файлы после установки новых обновлений Windows и программ.

На что может повлиять сжатие каталога WinSxS? Windows работает со сжатыми файлами в прозрачном режиме, однако при обработке таких файлов, ей может понадобиться дополнительное время на их декомпрессию/компрессию. Это может вызвать небольшое замедление при установке компонентов Windows или обновлений. Однако для современных процессоров (CPU) операция компрессии/декомпрессии файлов выполняется практически мгновенно, так что реального уменьшения скорости пользователь даже не заметит.

Привет админ! Неделю назад я стал замечать, что свободное пространство на моём диске (C:), с установленной Windows 10, стало куда-то исчезать, да и шутка ли, в один прекрасный день пропало целых 3 Гб. Далеко не сразу, но мне удалось найти виновника, а точнее виновницу, ей оказалась папка WinSxS — её размер в моей операционной системе ещё неделю назад был 15 Гб, но на сегодня он уже составляет 18 Гб. Также я заметил, после чего именно эта папка так сильно разрослась, причиной оказались — обновления операционной системы, за прошлую неделю моя Windows 10 получала их слишком много, ноутбук несколько раз просил меня перезагрузиться для установки обновлений.

Вопрос мой такой. О папке WinSxS в интернете написано много, но всё-таки, каким образом безопаснее всего очистить эту папку или она когда-нибудь очистится сама? Какие именно компоненты системы хранит папка WinSxS? Говорят, что на деле она занимает намного меньше места, чем видно в её свойствах и находятся на ней всего лишь символические ссылки.

Привет друзья! День назад я сам попал в такую же ситуацию, рассказываю подробности.

Буквально позавчера, установленная на моём ноутбуке Windows 8.1 несколько раз обновилась, а вчера утром мне на глаза попалось окно «Этот компьютер» и я с удивлением обнаружил, что на моём диске (C:) осталось свободного места 29 ГБ, хотя ещё вчера было 34 ГБ!

Я быстро исследовал жёсткий диск программой «Scanner» и обнаружил, что 5 ГБ свободного пространства на диске «съела» папка WinSxS, после этого она стала занимать рекордный размер — 21 ГБ.

Предлагаю вам вместе очистить папку хранилища компонентов на моём компьютере и по ходу дела рассмотреть остальные вопросы, касаемые этой папки!

Зачем нужна папка WinSxS?

Папка WinSxS, находится по адресу C:\Windows\WinSxS и является хранилищем компонентов Windows. Закономерен вопрос: «Что это за хранилище такое?»

Впервые папка WinSxS появилась ещё в операционной системе Windows XP. Создаётся папка WinSxS в процессе установки OS и содержит в себе копии оригинальных файлов Windows, которые операционная система использует для своего восстановления по мере надобности. Приведу самый простой пример, давайте удалим из системы папку Internet Explorer, в которой содержится известный браузер от Майкрософт, сделать это непросто, но при желании можно, после удаления файлов браузера введём команду «sfc /scannow», в результате Windows 10 начнёт проверку целостности системных файлов и при обнаружении отсутствующего браузера Internet Explorer, восстановит его оригинальные файлы из нашей папки WinSxS. Многие удалённые или повреждённые системные файлы из папки Windows операционная система восстановит автоматически и без команды «sfc /scannow».

  • Примечание: Начиная с Windows 10, сброс системы к исходному состоянию (заменивший откат к заводским настройкам) происходит также с помощью компонентов из папки WinSxS 

Почему папка WinSxS может разрастись после очередного обновления Windows?

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

Папка WinSxS занимает меньше места на жёстком диске, чем это кажется

Специфика работы операционной системы выглядит так, что одной трети файлов в папке WinSxS на самом деле нет, но есть жёсткие ссылки на эти файлы. Файлы же в это время находятся в других системных папках Windows и System32.

Папку WinSxS можно очистить от старых версий системных компонентов, но удалять её ни в коем случае нельзя

Обычно папка хранилища системных компонентов занимает на диске (C:) не более 10 ГБ и это вполне нормально, но если папка разрастается до 15-20 ГБ, то нужно срочно производить процедуру очистки.

Прежде чем произвести очистку папки WinSxS, давайте проанализируем её содержание при помощи командной строки.

Итак, если пройти по адресу C:\Windows и посмотреть свойства папки WinSxS, то нам откроется такая картина.

В моём случае папка весит довольно много 21 ГБ.

Открываем командную строку от имени администратора и вводим команду:

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore (данная команда произведёт анализ папки WinSxS)

Сведения хранилища компонентов (WinSxS):
Размер хранилища компонентов по данным проводника : 20.86 GB
Фактический размер хранилища компонентов : 17.71 GB
Рекомендуется очистка хранилища компонентов : Да

Судя по результату, сама система рекомендует нам произвести очистку хранилища компонентов.

Очищаем папку WinSxS с помощью командной строки администратора, вводим команду:

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

Операция успешно завершена

Папка WinSxS очищена! Интересно, насколько она стала меньше в размере (напомню, что до очистки она занимала размер 21 ГБ)

Производим анализ хранилища компонентов уже знакомой вам командой:

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

Сведения хранилища компонентов (WinSxS):
Размер хранилища компонентов по данным проводника : 7.95 GB
Фактический размер хранилища компонентов : 7.74 GB
Рекомендуется очистка хранилища компонентов : Нет

Вот и всё. Теперь хранилище компонентов на нашем компьютере занимает 7.74 GB! Размер папки уменьшен в три раза.

Друзья, папку WinSxS можно ужать ещё. Дело в том, что у параметра /StartComponentCleanup есть дополнительный ключ /ResetBase, с помощью которого можно удалить все замененные версии для всех компонентов в хранилище компонентов. Вводим команду:

Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase

Операция успешно завершена

Теперь наша папка WinSxS стала ещё меньше 6,85 ГБ!

Если вам не хочется связываться с командной строкой, то очистите папку WinSxS с помощью встроенной в Windows утилиты «Очистка диска», но не могу вам гарантировать такой же результат, смотрите сами.

Возьмём компьютер, где папка WinSxS занимает размер 20 ГБ.

Щёлкаем на диске (C:) правой кнопкой мыши и выбираем «Свойства», выбираем вкладку «Общие» и жмём на кнопку «Очистка диска» 

«Очистить системные файлы»

Первый пункт в данном окне «Очистка обновлений Windows», как раз отвечает за очистку хранилища компонентов. Всего может быть очищено 3,63 ГБ.

Жмите «ОК» и папка WinSxS будет очищена.

PS. При операции очистки папки WinSxS с помощью командной строки у вас может выйти ошибка «Хранилище компонентов повреждено. Ошибка: 14098», что делать в этом случае, читайте в следующей статье.

Статьи, которые вам пригодится: 

  1. Можно ли удалить папку C:\Windows\Installer, а если нет, то как её очистить?
  2. Папка ProgramData, её назначение, можно ли удалить или перенести
  3. Что находится в системной папке «FileRepository» и как её очистить

Один хороший программист помог решить мою задачу.
Теперь, eсли жесткий диск будет заполнен более чем на 90% (параметр легко можно поменять), в папке с записями разговоров автоматически удаляться самые старые файлы.

Для это в cron нужно запустить исполняемый файл со следующим содержанием

#!/bin/bash
# определяем какую папку будем чистить и какая должна быть макс заполняемость жесткого диска в %. В данном случае 90%
recdir=»/var/spool/asterisk/monitor»
percentagelimit=90

percentause=`df -h $recdir | grep [0-9]G | awk ‘{print$4}’ | tr -d «%»`

# Если жесткий диск заполнен более 90%
if [ $percentause -gt $percentagelimit ];
then
cd /var/spool/asterisk/monitor/
# То до тех пор пока размер заполненного диска будет больше 90%
while [ `df -h $recdir | grep [0-9]G | awk ‘{print$4}’ | tr -d «%»` -gt $percentagelimit ]
do
# Будем в папке удалять все файлы, начиная с самых старых
find /var/spool/asterisk/monitor/ -name «*.*» -and -type f | sort -r | tail -n1 | xargs -i rm ‘{}’
done
echo «Нет подходящих файлов для удаления»
# Если менее 90%, выдаст сообщение
else
echo «Удаление файлов не требуется»
fi

Время на прочтение17 мин

Количество просмотров345K

Во-первых, дисклаймер

Настройке Asterisk посвящены сайты, форумы и целые порталы типа voip-info.org. Но всегда есть люди, для которых эта тема – дремучий лес, а запустить продукт надо «вчера». Ещё полтора месяца назад я про Asterisk знал только то что он есть. Данный труд призван лишь несколько облегчить жизнь тем, кто окажется в такой же ситуации после меня. В нём могут быть ошибки любой степени «чайниковости». Если вы гуру настройки Asterisk – укажите на ошибку, я поправлю, потомки будут вам благодарны.

Сначала было слово

В некоторый момент времени моими усилиями стратегия развития инфраструктуры компании была перевёрнута буквально с ног на голову. Были очерчены цели и задачи и стало понятно, что нам нужна динамичная, мобильная серверная инфраструктура, чтобы экономить деньги, чтобы можно было в случае каких-то проблем быстро восстанавливаться и/или подниматься в другом месте, чтобы проще было ухаживать за железом и т.п.

Затем было дело

В общем, на бумаге всё было красиво и легко. Дело встало только за развёртыванием.
Сначала были закуплены два простеньких сервера. Core i7-930, 12GB памяти и по 12ТБ на SATA-дисках. На эти серверы был установлен бесплатный Xen Server и развёрнуты виртуальные серверы и рабочие станции для удалённых сотрудников.
В качестве внешнего хранилища используется QNAP-овский NAS, который достался в наследство.
Терабайтные локальные хранилища нужны только для хранения медиа-банка, который довольно велик. Сами серверы все вместе весят меньше 3-х терабайт.
Одним из серверов стал Asterisk на замену старичку Panasonic TDE-200. Т.к. компании необходима дешёвая связь, прямые номера в разных странах, и бесплатные переговоры между сотрудниками, то альтернативы ему за 12 шекелей в общем-то нет.

День первый: Make World

Развёртывать Asterisk было решено на родной для Citrix Xen операционной системе CentOS. Тот же RedHat, только сбоку. Оговорюсь сразу: я всю жизнь админил Windows, а *nix-ами только “игрался” в виртуалках, не считая пары веб-серверов на железе. Поэтому, данное развёртывание Asterisk в Citrix Xen отдаёт некоторой наивностью с точки зрения умудрённых опытом людей.
В общем, я пошел по проверенному пути: открывается на ноуте подробная how-to инструкция для чайников из официальных мануалов и выполняется на сервере буквально и безинициативно. Играть в героев-наладчиков можно будет позже, когда всё будет настроено и работать в состоянии “по умолчанию” и будет сделан первый full backup.

День второй: yum install asterisk -y

Не то чтобы я был очень удивлён, но, тем не менее, я пошёл к знакомому связисту за советом, когда обнаружил, что живых астерисков аж три практически самостоятельных форка: 1.4, 1,6 и 1.8. У каждого из них свои тараканы и примочки. Т.к. я не обольщался надеждой одолеть астериск с наскоку, то решил поставить версию 1.4, как у друга, дабы иметь максимально возможную совместимость конфигов. Хотя, впоследствии, пришлось подниматься до 1.6 из-за отсутствия поддержки TCP в 1.4, когда возникла такая потребность.
Для этого к CentOS был прилажен digium-овский репозиторий и Asterisk ставился из него.
Установка прошла вполне ожидаемо, без сучка и задоринки. В основном, использовался толковый пошаговый roadmap с voip-info.
Сразу же были поправлены iptables, чтобы разрешить трафик по SIP-портам.
Не сразу же, но будущим поколениям рекомендую установить и настроить немедленно пакет по имени fail2ban. Совершенно не лишняя программа на сервере, выставленном в интернет. У меня через день после установки весь Тайвань в drop ушел, судя по iptables.

День третий: ТЗ на функционал АТС

Начинаем самое интересное – планирование. Перед любым процессом настройки надо записать и структурировать все пожелания заказчика и обязательно подписать соглашение, чтобы избежать в дальнейшем конфликтов вида “нет, я говорил совсем другое”. В моём случае заказчик — это компания, в которой я работаю, но это ничего не меняет. Пишем техническое задание на функционал, обсуждаем его с ответственными людьми, утрясаем разногласия и подписываем финальный вариант.
ТЗ на конфигурацию получилось такое:

  • Нумерация телефонов четырёхзначная.
  • Первая цифра номера — признак страны расположения офиса.
  • Нумерация в каждом отделе начинается с первой цифры очередной сотни.
  • Каждый отдел является отдельной звонковой группой.
  • Если вызываемый абонент любым образом недоступен для вызова, то звонок перекидывается на всю группу.
  • Логика обслуживания входящих вызовов:
    1. Поднять трубку.
    2. Проиграть приветствие.
    3. Проиграть рекламу про текущие акции.
    4. Проиграть варианты вызова различных отделов или предложить набрать номер абонента.
    5. Начиная с пункта 2 ожидать ввода каких-либо команд.
    6. После окончания п.4 ждать ввода команд ещё 10 секунд.
    7. В случае отсутствия команд снова проиграть варианты вызова.
    8. Если абонент всё-равно тупит, то перекинуть звонок на секретаря.
  • Пользователям, которым необходим такой сервис, прикрутить голосовую почту. В этом случае, если пользователь любым образом недоступен для вызова, перекинуть звонок на голосовую почту.
  • По умолчанию, разрешены вызовы только на Россию и Италию — страны, где в основном работает наша компания. Остальные направления открываются по мере надобности самыми узкими масками, т.к. все мы помним страшные истории про “кубинских телефонистов” и не хотим, чтобы в один прекрасный день у нас АТС внезапно во все свои 50 каналов начала звонить в Сьерра-Леоне по 14 долларов в минуту для каждого канала.

На первый взгляд задание простое, а на практике на его согласование ушло довольно много крови. Особенно, на согласование запрета всех направлений, кроме явно разрешенных. С этим клиенту пришлось согласиться только перед лицом неизбежной, в противном случае, необходимости конфигурации VPN на каждом подключающемся к АТС устройстве. Просто я стараюсь придерживаться максимально простых и понятных конфигураций, а клиенту всегда кажется, что добавить какой-то функционал к системе — это “всего-лишь пару кнопок нажать”.

День четвёртый: nano sip.conf

Начинается самое интересное: процесс конфигурации.
Чтобы не затягивать и без того длинную статью, отягощая её подробным описанием мук начальной конфигурации и последующего тюнинга, я просто покажу текущие мои конфиги с комментариями что к чему.

[general]
context=default				;контекст по умолчанию
allowguest=no					;никаких гостей, мы никого не ждём
allowoverlap=no				;Этот параметр определяет разрешаем мы или нет передачу вызова с дополнительными цифрами. Мы – не разрешаем.
alwaysauthreject=yes				;Этот параметр означает, что все ошибки для внешнего клиента выглядят одинаково – ошибка авторизации. Призван осложнять взлом АТС.
useragent=Orgue de Barbaris		;Это – как мы представляемся у других. Я назвался по имени первого патефона, чтобы облегчить техподдержке провайдеров поиск диалогов с моей АТС, т.к. периодически приходится с ними общаться.
defaultexpiry=360				;Интервал обязательной перерегистрации клиентов.
callevents=yes				;Это на будущее, чтобы клиент мог поиграть в управление music on hold
limitonpeer=yes				;Считаем исходящие и входящие вызовы пиров вместе.
tcpenable=yes					;Разрешаем TCP протокол для SIP.
rtptimeout=60					;Сколько времени клиент может не откликаться, прежде чем будет кикнут из системы.
language=ru					;Язык системы. Используется для голосового меню.
bindport=5060					;Порт по умолчанию. Можно изменить для усложнения вычисления и взлома АТС, но решение спорное.
bindaddr=0.0.0.0				;у меня стоят нули, т.к. АТС имеет два интерфейса и на обоих висят клиенты.
srvlookup=yes					
tos_sip=cs3					; <a href="http://www.voip-info.org/wiki/view/Asterisk+sip+tos">http://www.voip-info.org/wiki/view/Asterisk+sip+tos</a>
tos_audio=ef

disallow=all					;сначала запрещаем все кодеки
allow=alaw					;затем, разрешаем только те, что хотим использовать. Порядок значения не имеет.
allow=g729
allow=g723
allow=ulaw

dtmfmode=rfc2833				;На Asterisk-ах рекомендуется ставить info, но мой итальянский провайдер настоял на rfc.
rtpholdtimeout=300
rtpkeepalive=5

canreinvite=no					;Этот параметр запрещает клиентам общаться напрямую. Общение происходит только через сервер. У меня это сделано так потому что мобильные клиенты используют платные клиенты с протоколом g.729а, а стационарные сидят на бесплатных клиентах без оного. Поэтому, я предпочёл напрячь сервер транскодингом alaw<->g.729a на лету в пользу качества связи для мобильных клиентов. Тем более что Core i7-930 вообще не замечает этой нагрузки.

externip=xxx.xxx.xxx.xxx			;Указываем наш внешний IP. Параметр нужен вообще-то, если только Asterisk прячется за NAT, но у меня он есть. Нехай будет.

allowexternaldomains=yes			;Читаем <a href="http://www.voip-info.org/wiki/view/Asterisk+config+sip.conf">тут</a> и решаем, надо-ли вам это.
domain=mydomain.com,default		
fromdomain=mydomain.com

;Здесь должны быть прописаны пиры до провайдеров. Все встречавшиеся мне SIP-провайдеры имеют стандартный шаблон секции конфига для Asterisk и предлагают именно его для прописывания в конфиги. Я так и сделал и у меня всё работает. Поэтому, я не буду приводить здесь их все, дабы не смущать никого. Покажу только мегафоновский шаблон для мультифона просто в качестве примера.

register => tcp://номер@multifon.ru:пароль:номер@sbc.megafon.ru/номер~60 ;это пример стандартного SIP-пира до провайдера сип-телефонии для входящей связи

[multifon]	;это тот же пир, только уже для исходящей связи
type=peer
secret=пароль
username=номер
host=sbc.megafon.ru
port=5060
insecure=port,invite
call-limit=1
context=incoming
canreinvite=no
qualify=yes
transport=tcp
dtmfmode=inband

;А теперь – самое интересное. Клиентов у нас довольно много, поэтому, чтобы не прописывать каждому одно и то же, мы используем шаблоны. Выглядит это так:

[defaults](!)
 canreinvite=no		;голосовой трафик только через сервер
 disallow=all
 allow=alaw
 allow=g729
 allow=g723

[peer](!,defaults)
 type=peer
 host=dynamic		;разрешаем цепляться откуда угодно
 qualify=yes			;постоянно держим связь с клиентом
 nat=yes			;предполагаем, что клиент может быть за NAT
 call-limit=1			;ограничиваем кол-во одновременных звонков
 busylevel=1			;сообщаем, когда отбивать с сигналом “занято”
 rtpkeepalive=5		;интервал в секундах для пинга клиента.

[ext1000](peer)
secret=secretsecretsecret

[ext1001](peer)
secret=secretsecretsecret

[ext1002](peer)
secret=secretsecretsecret

;Если нам надо что-то изменить или добавить, то выглядеть это будет так:

[ext1101](peer)                                         
secret=secretsecretsecret
transport=tcp					;разрешаем отдельному пиру SIP по TCP.
День пятый: nano extensions.conf

Не менее интересный файлик, в котором прописывается вся логика АТС. Очень полезными для понимания логики dial-plan-ов оказались вот эти статьи: http://inhibitz.ucoz.ru/publ/9-1-0-21, http://asterisk-pbx.ru/wiki/doku.php/asterisk_dialplan
Итак, поехали:

[general]
static=yes			;запрещаем изменения конфигов из CLI
writeprotect=yes		;запрещаем изменения конфигов из CLI

[globals]

;Далее идут макросы, которые определяют логику роутинга звонков.

[macro-dial-ext]	;макрос “что делать при наборе 4-значного экстеншна”
 exten => s,1,Answer()	;поднимаем трубку
 exten => s,2,Dial(SIP/ext${ARG1},20,tT)	;набираем номер, переданный как аргумент к макросу с таймаутом 20 секунд и разрешаем трансфер звонка любой стороне.
 exten => s,3,Goto(s-${DIALSTATUS},1)	;отрабатываем код полученный от приложения Dial.
 exten => s-NOANSWER,1,Macro(group-dial,${ARG1:0:2}00)	;перекидываем на группу
 exten => s-BUSY,1,Macro(group-dial,${ARG1:0:2}00)
 exten => s-CONGESTION,1,Macro(group-dial,${ARG1:0:2}00)
 exten => s-CHANUNAVAIL,1,Macro(group-dial,${ARG1:0:2}00)
 exten => _s-.,1,Hangup		;кладём трубку

[macro-dial-vip]	;макрос для пользователей голосовой почты
 exten => s,1,Answer()
 exten => s,2,Dial(SIP/ext${ARG1},20,tT)
 exten => s,3,Goto(s-${DIALSTATUS},1)
 exten => s-NOANSWER,1,Voicemail(${ARG1})	;вместо группы перекидываем на голосовую почту.
 exten => s-BUSY,1,Voicemail(${ARG1})
 exten => s-CONGESTION,1,Voicemail(${ARG1})
 exten => s-CHANUNAVAIL,1,Voicemail(${ARG1})
 exten => _s-.,1,Hangup

[macro-secretary]	;макрос для отработки вызова секретаря
 exten => s,1,Answer()
 exten => s,3,Dial(SIP/ext2222,15,tTm)                       ; вызываем секретаря
 exten => s,n,Goto(s-${DIALSTATUS},1)
 exten => s-NOANSWER,1,Macro(group-dial,${ARG1})	;перекидываем на группу из агрумента к макросу
 exten => s-CHANUNAVAIL,1,Macro(group-dial,${ARG1})
 exten => s-BUSY,1,Macro(group-dial,${ARG1})
 exten => s-UNKNOWN,1,Macro(group-dial,${ARG1})
 exten => s-CONGESTION,1,Macro(group-dial,${ARG1})
 exten => s-CHANUNAVAIL,1,Macro(group-dial,${ARG1})
 exten => _s-.,1,Hangup

[macro-group-dial]	;макрос для вызова группы
 exten => s,1,Answer()
 exten => s,n,Queue(${ARG1})	;вызываем queue, состав которой прописан в queues.conf
 exten => s,n,Goto(s-${DIALSTATUS},1)
 exten => s,n,Hangup
 exten => s-BUSY,1,Playback(all-circuits-busy-now)
 exten => s-BUSY,n,Macro(secretary,1100)	;если все заняты, возвращаем звонок секретарю
 exten => s-NOANSWER,1,Macro(secretary,1100)
 exten => s-CHANUNAVAIL,1,Macro(secretary,1100)
 exten => s-CONGESTION,1,Macro(secretary,1100)
 exten => _s-.,1,Hangup

;Теперь прописываем правила для выхода наружу.

[default]                                               ; Default context including all specials
include => incoming
include => multifon 			;включаем в default контекст для мультифона

;Логика обработки вызовов внутренних экстеншнов
exten => _[123]X00,1,Macro(group-dial,${EXTEN})
exten => _1[1-689]XX,1,Macro(dial-ext,${EXTEN})
exten => _17XX,1,Macro(dial-vip,${EXTEN})
exten => _[2]XXX,1,Macro(dial-vip,${EXTEN})
exten => _[3]XXX,1,Macro(dial-ext,${EXTEN})

;Далее у нас идёт логика обработки входящих вызовов.
;Весьма полезным для понимания оказался пример от Станислава Беликова у него в блоге:
;<a href="http://sbelikov.ru/2009/03/golosovoe-menyu-v-asterisk/">http://sbelikov.ru/2009/03/golosovoe-menyu-v-asterisk/</a>
;Здесь необходимо заметить, что используются самостоятельно записанные приветствия вместе с чужими звуковыми файлами. Хороший набор русских голосовых файлов качается отсюда: <a href="http://www.ivrvoice.ru/">http://www.ivrvoice.ru/</a>
;Инструкция по самостоятельной конвертации файлов для Asterisk тут: <a href="http://www.voip-info.org/wiki/view/Convert+WAV+audio+files+for+use+in+Asterisk">http://www.voip-info.org/wiki/view/Convert+WAV+audio+files+for+use+in+Asterisk</a>

[incoming]
 exten => s,1,Goto(s-${CHANNEL(peername)},1)	;во-первых, определяем откуда вызов и отправляем звонок в нужную секцию. Это нужно для приветствий на разных языках.

 exten => s-sipcity,1,Answer()		;это итальянский пир
 exten => s-sipcity,2,Background(it-greet)	;которому мы проигрываем итальянское приветствие
 exten => s-sipcity,3,Background(advert)
 exten => s-sipcity,4,Background(it-route)
 exten => s-sipcity,n,Waitexten()
 exten => s-sipcity,n,Macro(group-dial,1100)

 exten => номер,1,Answer()				;это мультифон-пир
 exten => номер,2,Macro(dial-vip,2001)		;вызовы идут сразу человеку в екстеншн

 exten => _s-zebra,1,Answer()			;это русский пир
 exten => _s-zebra,2,Background(ru-greet)		;поэтому, русское приветствие
 exten => _s-zebra,3,Background(advert)
 exten => _s-zebra,4,Background(ru-route)
 exten => _s-zebra,n,Waitexten()
 exten => _s-zebra,n,Macro(group-dial,1100)

 exten => s-eng,1,Answer()				;это английский пир
 exten => s-eng,2,Background(en-greet)		;им - по-аглицки
 exten => s-eng,3,Background(advert)
 exten => s-eng,4,Background(en-route)
 exten => s-eng,n,Waitexten()
 exten => s-eng,n,Background(en-route)
 exten => s-eng,n,Waitexten()
 exten => s-eng,n,Macro(group-dial,1100)

 exten => 5000,1,Answer()			;Это специальный внутренний номер для проверки логики IVR, а так же записанных рекламок. Очень удобно. 
 exten => 5000,2,Background(ru-greet)
 exten => 5000,3,Background(advert)
 exten => 5000,4,Background(ru-route)
 exten => 5000,5,Waitexten()
 exten => 5000,6,Background(ru-route)
 exten => 5000,n,Waitexten()
 exten => 5000,n,Macro(group-dial,1100)

;Здесь прописаны действия IVR на команды
 exten => 1,1,Macro(group-dial,1100)		;если нажато “1”, то отправляем на группу 1100
 exten => 2,1,Macro(group-dial,1200)
 exten => 3,1,Macro(group-dial,1300)
 exten => 4,1,Macro(group-dial,1400)
 exten => 5,1,Macro(group-dial,1500)
 exten => 6,1,Macro(group-dial,1100)                    
 exten => 9,1,Goto(s-sipcity,1)		;Если выбран вызов меню на другом языке - отправляем туда
 exten => 0,1,Goto(s-eng,1)
 exten => _1[1-689]XX,1,Macro(dial-ext,${EXTEN})	;обрабатываем вызов екстеншнов
 exten => _17XX,1,Macro(dial-vip,${EXTEN})
 exten => _2XXX,1,Macro(dial-vip,${EXTEN})
 exten => _3XXX,1,Macro(dial-ext,${EXTEN})

 exten => i,1,Goto(s-zebra,4)			;инвалидов возвращаем в начало
 exten => t,1,Goto(s-zebra,4)			;таймауты – туда же

;Здесь у нас прописываются правила набора номера
[zebra]

;Я договорился с “Зеброй”, что номерами мы обмениваемся в формате e164. Т.е. как в мобильниках, только без “+”. Например: 74951234567.

exten => _99ZXXXXXX,1,Dial(SIP/zebra/7495${EXTEN:2})	;Здесь прописано правило вызова обычного семизначного московского номера в коде 495. “99” – это “префикс выхода на внешнюю линию”, ZXXXXXX – Это любой 7-значный набор цифр, но первая цифра не должна быть меньше 1. Далее идёт вызов через пир zebra с дописыванием в начало номера цифр 7495, в то же время убирая “99” из переданного в Asterisk набора.

; Едем дальше. Прописываем все направления, куда можно звонить, в удобной нам форме.

;#############################
;      International
;#############################

;Italy
exten => _9939.,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99+39.,1,Dial(SIP/zebra/${EXTEN:3})
;Внимательные люди обратят внимание, что одно и то же прописано дважды, с плюсом и без. Это сделано для удобства пользователей SIP на мобильниках. Не все клиенты умеют нормальный rewrite, так что получается по две записи на направление.

;Belorussia
exten => _9937517XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99+37517XXXXXXX,1,Dial(SIP/zebra/${EXTEN:3})

;Kazakhstan
exten => _997727XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99+7727XXXXXXX,1,Dial(SIP/zebra/${EXTEN:3})

;Ukraine
exten => _99380XXXXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99+380XXXXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})

;#############################
;          cellular
;#############################
exten => _99790[3-9]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99791[0-79]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99792[569]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _997930XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99793[1-4678]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99795[0-3]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99796[0-578]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99798[0-5789]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _997997XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})

;#############################
;    cities starting at 3
;#############################
exten => _99730[12]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99734[1-35-79]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99735[1-3]XXXXXXX,1,Dial(SIP/zebra-out/${EXTEN:2})
exten => _99738[1-5]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _997388XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99739[01]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99739[45]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})

;#############################
;    cities starting at 4
;#############################
exten => _997401XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99741[1356]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99742[13467]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99747[1-5]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99748[1-7]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99749[1-689]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})

;#############################
;   cities starting at 8
;#############################
exten => _99781[1-8]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _997820XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _997821XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99783[13-6]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99784[0-8]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99785[15]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99786[1-35-7]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
exten => _99787[1-37-9]XXXXXXX,1,Dial(SIP/zebra/${EXTEN:2})
День шестой: nano Voicemail.conf, nano queues.conf

Пришла пора приделать голосовую почту.

Здесь, на самом деле, даже конфиги выкладывать нет смысла, ибо там почти ничего не меняется, а что меняется — глубоко специфично. Главной проблемой для меня была настройка MTA для передачи почты через нестандартный порт и с smtp-авторизацией. Убив пол-дня на курение форумов, в конце-концов поставил exim и настроил передачу почты через него.
Два момента, на которых я хотел бы заострить внимание – голосовые сообщения у меня убиваются на Asterisk-е сразу после отправки. Просто, чтобы не забивали винт. Ибо актуальность такого сообщения измеряется минутами, а заставлять пользователей следить ещё и за голосовым ящиком мне кажется глупым. Кроме того, я поставил формат wav49 для сообщений, т.к. лень было заморачиваться со сжатием файлов в mp3, да и на почтовике суровые правила бесчеловечно поступают с мультимедиа-приложениями – все mp3 заменяются на спектрумовский «Exolon» в виде mp3.

С queues.conf тоже всё просто:

[general]
persistentmembers = yes		;очередь постоянная, никто никуда не выходит
autofill = yes				;просто так надо
autopause = no			;если мембер не отвечает, то ему всё-равно звонить
monitor-type = MixMonitor



;Пример одной очереди
[1100] 					;екстеншн очереди
strategy = ringall			;стратегия обзвона группы – звонят все сразу
eventwhencalled = yes		;прилада для внешних мониторов типа Fop2
ringinuse = no				;занятых не дёргаем
timeout = 20				;таймаут
retry = 1				;повторный вызов всей группы через 1 секунду
wrapuptime = 0			;какая передышка у агента очереди после звонка (сек)
maxlen = 0				;сколько людей в очереди на ответ. 0=бесконечно

;ниже – просто список мемберов очереди
member => SIP/2222
member => SIP/1101
member => SIP/1102
member => SIP/1103
member => SIP/1104
member => SIP/1105
member => SIP/1106
member => SIP/1107
member => SIP/1108
member => SIP/1109
member => SIP/1110
День седьмой: Послесловие

Во-первых, хотелось бы отметить собственные ошибки а так же очевидные минусы такого решения:
– Ошибка: для пользователей был закуплен мешок обычных гарнитур, какие используются дома для общения по скайпу или в TS. Это совершенно неподходящее для офиса решение. Сидеть целый день с воткнутой в ухо гарнитурой обычному человеку очень утомительно. А профессиональные операторские гарнитуры стоят как билет на орбиту. Кроме того, женский коллектив не приемлет гарнитур с оголовьем – “у нас причёски!”. Решение – USB-трубки или настольные SIP-телефоны для тех, у кого хороший бюджет.
– Ошибка: спешка нужна при ловле блох. Если вы не знаете что такое Asterisk и с чем его едят, то лучше начните его изучать прямо сейчас. Изучать тщательно. Потому что эти знания обязательно понадобятся, причём, как обычно, со сроком “чтоб вчера было готово”. Не факт, что вам надо будет ставить именно Asterisk, но общая теория VoIP и конструкций Dial-plan-ов вам очень пригодится. Мне пришлось буквально “пожарными” темпами всё ставить и осваивать на ходу из-за жёсткого конфликта с телефонной компанией-монополистом в нашем офисном центре, поэтому, не обошлось без факапов.
– Надёжность. Пока не отрастил себе седых волос за процессом настройки Asterisk, я мониторю АТС постоянно. Просто я не уверен ещё, всё-ли сделал правильно. Пару раз она у меня без причины переставала обслуживать клиентов и я теперь побаиваюсь оставлять её без присмотра.
– Факсов просто нет. Точнее, они как бы есть, но чисто для галочки. Нормальная работа с факсами очень затруднительна без использования железных плат, которых я избегаю для сохранения мобильности.
– Негарантированное качество связи. На каком бы широком канале вы ни сидели, всё-равно с завидным постоянством вы будете получать претензии на “булькающую связь”. Несмотря на стремительное развитие технологий и расширение каналов передачи данных, всё-равно регулярно случаются проблемы. Самый простой пример: небольшой отель в Италии, в котором находится представитель фирмы. В отель проведены целых 2Мбита ADSL-интернета с аплинком в 256к, который раздаётся бесплатно постояльцам через WiFi. Представитель связывается с офисом, используя данный канал, и связь отвратительна — постоянно булькает и вообще. Просто кто-то в отеле решил запостить в одноклассники пачку 12мпиксельных фотографий. Обычное дело.
– Если бюджет не очень большой и на настольные телефоны не хватает, то пользователям приходится осваивать новые методы работы с телефоном – с помощью программных звонилок типа Zoiper или PhonerLite. Кроме того, набирать *77 для перевода звонка их тоже напрягает, хотят “как раньше”, коротким нажатием на рычаг, которого теперь вообще нет.
– Так же моих пользователей раздражает необходимость набирать номера не “по-старинке” 810(кодстраны)(кодгорода)(телефон), а в формате е164. Я бы мог оставить и 810, но в этом случае номер обычного итальянского отеля становится просто космической длины: 998103912345678901. А в е164 он на три цифры короче.

В общем, подавляющее большинство проблем вызваны нежеланием пользователей жить в эпоху перемен. Начиная с ворчания и заканчивая откровенным саботажем. Я бы мог ещё пару страниц перечислять претензии пользователей, но это будет жёсткий оффтоп. Единственное, что можно порекомендовать в данном случае — планируйте переезд на Asterisk тщательно. Постарайтесь сделать его как можно менее неудобным для пользователей. Бизнесу невыгодно тратить оплачиваемое время людей на их обучение новым штукам, которые могли бы работать по-старому, если бы всё было нормально спланировано.

Теперь плюсы решения:
+ Первый и самый очевидный – деньги. Мне удалось сократить расходы на связь примерно в 15 раз. Раньше средний счёт за телефонию у нас был около 5 тысяч долларов в месяц. За прошедший после внедрения Asterisk месяц даже трёхсот долларов не набежало. Львиная доля экономии — разговоры между сотрудниками в разных странах.
+ Мобильность. Если вдруг что-то случается, не важно что именно – будь то новый Московский блэк-аут или просто пожар в здании – я поднимаю виртуалку с Астериском на любом хостинге, который умеет их импортировать, и просто сообщаю клиентам новый IP АТС. Попробуйте представить время недоступности телефонной связи с обычной телефонией.
+ Просто фантастическая гибкость решения и его почти полная бесплатность. Конечно, мы платим своим временем экономя деньги на решениях “из железной коробки”, но лично мне интересно было узнать, как же всё это работает.

Один вопрос, который я сам себе пару раз задавал и который наверняка бы появился в комментариях, если б я на него не ответил здесь: “Почему не поставил Elastix, FreePBX, PiaF или типа того? По роадмапу за 10 минут ставится и работает годами!” Ответ простой: за веб-мордой не видно леса. Да, это удобно, но чтобы преодолеть функционал веб-морды, придётся править нестандартные конфиги, рискуя поломать всё к чёрту одной запятой. А я даже близко не могу представить, что нам понадобится через год. Кроме того, с веб-мордой никогда не узнаешь что и как работает. Поэтому, чистый Asterisk, комсомольцы не могут без трудностей.

Сейчас у меня Астериск с такими конфигами работает вполне удовлетворительно. Есть досадные мелочи, типа эха при звонке на некоторые странные городские АТС, или отвратительная работа некоторых встроенных звуковых карт (будь проклят один популярный производитель бюджетных материнок), но это – дело житейское – решается USB-трубками, с которыми очень хорошо стыкуется бесплатный Zoiper Free.
В общем и целом, я и моё руководство довольны проделанной работой. Надо только ещё поработать надфилем и можно будет приступать к следующему проекту.

Что ещё осталось доделать, для полного счастья:
Поставить и настроить Fop2, чтобы пользователи могли видеть кто из сотрудников в каком состоянии, чтобы не было ситуации перевода звонка на занятого абонента, когда звонок автоматом перекидывается на группу и человек попадает совсем не туда, куда хотел.
Поставить систему мониторинга, чтобы в реальном времени отслеживать состояние АТС, звонков, очередей.
Поставить какую-нибудь крайне простую систему отчётности по звонкам. Задача стоит всего-лишь во внятной визуализации количества звонков для проверки счетов.

Надежные софтфоны для Asterisk

Установка MicroSip, PhonerLite, LINPHONE и Zoiper

Скачайте установочный файл (подходит для Windows, macOS )

Запустите установочный файл:

Выберите язык программного телефона:

Запустите мастер установки, нажав «Далее»:

Ознакомьтесь с условиями лицензионного соглашения, нажмите кнопку «Принимаю»:

Укажите, что на рабочий стол нужно добавить ярлык программы, запускать MicroSIP при включении компьютера и нажмите кнопку «Далее»:

Укажите путь установки программы и нажмите кнопку «Далее»:

Нажмите «Установить»:

Установка завершена, нажмите «Готово»:

Нажмите «Разрешить доступ»:

Программный телефон MicroSip установлен, настроим его. Нажмите на кнопку с треугольником в правом углу, чтобы открылось меню с настройками:

Выбирайте «Добавить аккаунт»:

Укажите данные для подключения к АТС(можно узнать у администратора АТС):

Настройка успешно завершена. Это видно по статусу «Онлайн» в левом нижнем углу телефона:

После того как мы скачали и установили PhonerLite, нас встречает мастер настройки, который предлагает настроить учетную запись SIP для одного из известных VoIP-провайдеров или же продолжить в режиме ручной настройки. Мы будем использовать свою IP-АТС Asterisk, поэтому, выбираем ручную настройку и указываем IP-адрес нашего сервера и стандартный порт 5061 (используется CHAN_SIP со стороны Asterisk), куда софтфон будет отправлять запросы на регистрацию.

Далее указываем имя пользователя, который предварительно уже создан на Asterisk в качестве внутреннего номера (extension), и пароль(можно узнать у администратора АТС)

![Указываем имя пользователя

](../.gitbook/assets/phlext.jpg)

Далее предлагается выбрать устройство ввода и вывода звука на вашем компьютере

Подтверждаем выполненные настройки. Также предлагается дать название новому профилю. Лучше придумать какое-либо название, потому что по умолчанию профиль будет иметь название соответствующее IP-адресу вашей IP-АТС

Если все настройки были выполнены правильно, то напротив новой учётной записи мы увидим сообщение Registered, свидетельствующее о том, что софтфон успешно зарегистрировался на IP-АТС, теперь можно совершать звонки

Переходим во вкладку Download.

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

Распаковываем архив любым удобным для вас способом в любую папку.

Открываем папку и запускаем программу.

Начинаем настройку. Нажмите на «микросхему» выделенную на скриншоте красным.

Выбираем из выпадающего списка SIP.

Теперь вновь нажимаем на микросхему.

И попадаем в настройки.

Для успешной регистрации достаточно указать следующие параметры:

Username – указываем ваш sip-номер (он совпадает с внутренним sip-номером пользователя).

Phone number – аналогично предыдущему пункту указываем номер.

Proxy/Registrar – IP вашей АТС.

Local port – указываем порт (если вы используете стандартный порт, то ничего менять не нужно).

Preferred connection type – указываем тип подключения.

Displayed name – отображаемое имя (необязательный пункт, но желательный).

Пример заполнения представлен на скриншоте ниже – заполняйте по аналогии и не забудьте поставить галочку в чек-боксе рядом с Register.

После заполнения формы нажимайте ОК. Все – если вы все сделали правильно, то статус будет «зеленым», а вы сможете совершить звонок, к примеру, на свой мобильный.

Затем нужно выполнить стандартную процедуру установки, согласившись со всеми лицензионными правилами и указав путь к папке для установки программы.

В процессе установки вам предложат установить кодек Cisco H.264, рекомендуем согласиться с данным пунктом.

Когда установка будет завершена, вам предложат создать учётную запись для совершения звонков по протоколу SIP. Нажимаем Forward.

Далее нужно выбрать тип учётной записи. Доступно четыре варианта:

  1. создание учётной записи на сайте linphone.org;

  2. ввести аутентификационные данные ранее созданной учётной записи с сайта;

  3. указать URI удалённого сервера конфигурации.

Итак, выбираем I have already a sip account and I just want to use it.

Вводим учётные данные, которые мы уже создали ранее на нашей IP-АТС. Например, номер 1021.

Далее просто переносим их в Linphone, 192.168.1.148 – это адрес нашей IP-АТС.

Если всё было сделано верно, то после регистрации напротив наших учётных данных мы увидим зеленый круг – Online, свидетельствующий о том, что наша учётная запись активна и можно совершать звонки при помощи клиента Linphone.

Скачав приложение, переходим непосредственно к установке SIP-клиента:

  1. ставим галочку о согласии с правилами лицензионного соглашения;

  2. определяемся, какие дополнительные компоненты необходимо установить.

Далее необходимо создать аккаунт. Для этого вы должны знать 3 основных параметра подключения:

  • domain/outbound proxy – 555.55.55.5.

Этого будет достаточно, чтобы приступить к работе с Zoiper. Однако возможности этим не ограничиваются. Даже на бесплатной версии пользователю доступен большой функционал настроек.

Клиент может настроить программу “под себя” в таких вещах как, например:

  • настройки контактов: определяется место, где хранить данные – на сервере или локально, откуда подгружать данные и т.д.

  • настройка оповещений пользователя;

Некоторые полезные вещи доступны только в платной версии. Например: переадресация, автоответчик и т.д.

Настройка: Установку Phoner будем проводить на Microsoft Windows 7. Данный программный телефон можно скачать с официального сайта разработчика .

Для распаковки данного архива более чем достаточно будет использовать свободный файловый архиватор 7zip, который можно скачать бесплатно .

Рассмотрим настройки софтфона Linphone для работы с IP-АТС Asterisk. Устанавливать будем клиент для операционной системы Windows. Для этого нужно сначала скачать дистрибутив . Скачиваем самую последнюю версию. На момент написания статьи это 3.10.2 от 13 августа 2016.

ввести учётные данные ранее созданной учётной записи SIP
(нам подходит именно этот пункт, поскольку мы будем использовать учётные данные , который создали ранее на нашей IP-АТС);

Запустить установочный файл
Добавить ярлык на рабочий стол, запуск при включении компьютера
Нажмите на кнопку с треугольником
Укажите данные для подключения к АТС
Выбираем ручную настройку
Имеется мастер настройки звука, с помощью которого можно протестировать новые настройки.
В Zoiper можно выбрать один из 4 скинов

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как настроить сетевую карту на windows 10 на максимальную скорость
  • Abbyy finereader crack windows 7
  • Windows 10 pro шифрование
  • Как зафиксировать размер окна windows forms
  • Аналог шрифта san francisco для windows