По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Привет! Мы в одной из предыдущих статей уже рассказывали про то, как зарегистрировать IP-телефон в CME (CUCME) , работающий по протоколу SCCP. Сегодня поговорим про то, как зарегистрировать Third Party SIP телефоны (то есть от других производителей) в CME.
Настройка
Для начала инициализируем SIP звонки и сервер регистрации:
CME(config)#voice service voip
CME(conf-voi-serv)#allow-connections sip to sip
CME(conf-voi-serv)#sip
CME(conf-serv-sip)#registrar server
voice service voip – вход в режим конфигурации voip;
allow-connections sip to sip – по-умолчанию IOS не разрешает SIP вызовы;
sip – команда sip, введенная в меню конфигурации voice service voip позволяет использовать команды для настройки SIP;
registrar server – определяет CME как сервер регистрации для сторонних SIP телефонов;
Далее применим глобальные настройки CME:
CME(config)#voice register global
CME(config-register-global)#mode CME
CME(config-register-global)#max-dn 10
CME(config-register-global)#max-pool 10
CME(config-register-global)#source-address 192.168.1.1 port 5060
CME(config-register-global)#tftp-path flash:
CME(config-register-global)#authenticate register
CME(config-register-global)#camera
CME(config-register-global)#video
CME(config-register-global)#create profile
voice register global– вход в режим глобальных настроек CME;
mode CME – устанавливает поведение устройства как CME;
max-dn [X] – максимальное количество номеров dn (directory number);
max-pool [Y] – максимальное количество телефонов;
source-address X.X.X.X port Y – указываем откуда будут загружаться конфигурационные файлы для IP-телефонов;
tftp-path flash: - корневой каталог TFTP это flash память маршрутизатора;
authenticate register – аутентификация для телефонов, находящихся в другой подсети;
camera – команда включает камеру;
video – команда включает видео;
create profile – создает конфигурационные файлы;
После этого создадим номер:
CME(config)#voice register dn1
CME(config-register-dn) number 1001
voice register dn1 – создание ephone-dn с меткой 1;
number [номер] – указываем номер;
Далее зарегистрируем SIP телефон в CME:
CME(config)#voice register pool 1
CME(config-register-pool)#id mac 0123.45ab.cdef
CME(config-register-pool)#type 9971
CME(config-register-pool)#number 1 dn 1
CME(config-register-pool)#username admin password admin
CME(config-register-pool)#codec g711ulaw
CME(config-register-pool)#dtmf-relay rtp-nte
CME(config-register-pool)#camera
CME(config-register-pool)#video
voice register pool [X] – режим конфигурации SIP телефонов (тут pool означает телефоны);
id mac XXXX.XXXX.XXXX – mac-адрес устройства (для third-party можно ввести любой);
type – указываем тип телефона, для third party эта команда не обязательна;
number [X] dn [Y] – назначаем на копку X номер Y;
username XXXX password YYYY – включает аутентификацию для SIP телефонов с указанными данными;
codec g711ulaw – указываем используемый кодек;
dtmf-relay rtp-nte – указываем тип DTMF-relay;
Теперь переходим к настройке на самом third-party софтфоне (на примере софтфона 3CX):
Здесь необходимо заполнить следующие поля:
Extension – номер, который мы создали на CME;
ID – username, созданный на CME;
Password – пароль, созданный на CME;
IP of your PBX/SIP server – IP адрес CME;
Что это вообще такое?
Docker Compose является инструментом для определения и запуска контейнерных приложений. С Compose вы получаете возможность настраивать службы используя файл YAML. С помощью одной команды Compose вы создаете и запускаете все службы в соответствии с вашей конфигурацией.
Установка начинается с создания каталога проекта:
$ mkdir composetest
$ cd composetest
Создайте файл под названием app.py и вставьте в него следующие данные:
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.
'.format(count)
В нашем случае название хоста - redis, который использует порт 6379. Создайте файл под названием needs.txt в каталоге вашего проекта и вставьте его в:
flask
Redis
Теперь следует написать код для файла Dockerfile, содержащий все необходимые переменные для среды разработки.
В каталоге вашего проекта создайте файл с именем Dockerfile (файл будет определять среду приложения) и вставьте следующее содержимое:
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
Определение сервисов осуществляется при создании файла с именем docker-compose.yml в каталоге вашего проекта со следующей информацией:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
На основании содержания файла происходит запуск двух сервисов: Web и Redis, а в дальнейшем вы можете вносить в этот файл различные БД и иную важную информацию.
C помощью команды Compose создайте ваше приложение, после чего из каталога проекта запустите приложение, запустив docker-compose. Вот так:
$ docker-compose up
Creating network "composetest_default" with the default driver
Creating composetest_web_1 ...
Creating composetest_redis_1 ...
Creating composetest_web_1
Creating composetest_redis_1 ... done
Attaching to composetest_web_1, composetest_redis_1
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
redis_1 | 1:C 17 Aug 22:11:10.480 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 17 Aug 22:11:10.480 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 17 Aug 22:11:10.480 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
web_1 | * Restarting with stat
redis_1 | 1:M 17 Aug 22:11:10.483 * Running mode=standalone, port=6379.
redis_1 | 1:M 17 Aug 22:11:10.483 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
web_1 | * Debugger is active!
redis_1 | 1:M 17 Aug 22:11:10.483 # Server initialized
redis_1 | 1:M 17 Aug 22:11:10.483 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
web_1 | * Debugger PIN: 330-787-903
redis_1 | 1:M 17 Aug 22:11:10.483 * Ready to accept connections
Compose извлекает образ Redis, создавая образ для вашего приложения и запускает выбранные службы. В этом случае код копируется в образ во время сборки. Как вам такое?
Теперь попробуйте ввести http://localhost:5000/ в браузере, чтобы чекнуть запущенное приложение.
Если вы используете Docker для Linux, Docker Desktop для Mac или Docker Desktop для Windows, то теперь веб-приложение должно "смотреть" на порт 5000 на хосте Docker. Введите в своем веб-браузере адрес http://localhost:5000, чтобы увидеть сообщение Hello World. Если не сработает, вы также можете попробовать зайти на http://127.0.0.1:5000.
Если вы используете Docker Machine на Mac или Windows, используйте ip MACHINE_VM docker-machine для получения IP-адреса вашего хоста Docker. Затем откройте http://MACHINE_VM_IP:5000 в браузере.
Вы должны увидеть сообщение в своем браузере:
Hello World! I have been seen 1 times.
Переключитесь на другое окно терминала и введите docker image ls, чтобы вывести список локальных образов/контейнеров. Вывод на этом этапе должен показывать redis и web.
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
composetest_web latest e2c21aa48cc1 4 minutes ago 93.8MB
python 3.4-alpine 84e6077c7ab6 7 days ago 82.5MB
redis alpine 9d8fa9aa0e5b 3 weeks ago 27.5MB
Важно: Вы можете просматривать запущенные контейнеры с помощью Docker Inspect Tag или ID
Запустите docker-compose из каталога вашего проекта во втором терминале, либо нажмите CTRL + C в исходном терминале, где приложение уже запущено и отредактируйте файл Compose.
Отредактируйте docker-compose.yml в каталоге вашего проекта для внесения той или иной правки в веб-службе
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
Новый ключ редактирует каталог проекта на хосте внутри контейнера, что позволяет изменять код без необходимости перестраивать весь образ. Ключ среды устанавливает переменную FLASK_ENV, которая сообщает о запуске в режиме разработки и перезагрузке кода при изменении. Важно: этот режим должен использоваться только при разработке.
В каталоге проекта введите docker-compose up, чтобы создать приложение с обновленным файлом Compose, и запустите его.
$ docker-compose up
Creating network "composetest_default" with the default driver
Creating composetest_web_1 ...
Creating composetest_redis_1 ...
Creating composetest_web_1
Creating composetest_redis_1 ... done
Attaching to composetest_web_1, composetest_redis_1
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
…
Поскольку код приложения теперь добавляется в контейнер с помощью тома, вы можете вносить изменения в его код и мгновенно просматривать изменения без необходимости перестраивать образ.
Измените сообщение в app.py и сохраните его:
Hello from Docker!:
return 'Hello from Docker! I have been seen {} times.
'.format(count)
Обновите результат в вашем браузере (нажмите F5 или Ctrl + F5) . Приветствие должно быть обновлено, а счетчик должен увеличиваться.
Вы можете поэкспериментировать с другими командами. Если вы хотите запускать свои службы в фоновом режиме, вы можете сделать следующее:
docker-compose up and use docker-compose ps to see what is currently running:
$ docker-compose up -d
Starting composetest_redis_1...
Starting composetest_web_1...
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------
composetest_redis_1 /usr/local/bin/run Up
composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp
Команда docker-compose run позволяет вам применять одноразовые команды к вашим сервисов. Например, чтобы увидеть, какие переменные среды доступны для веб-службы:
$ docker-compose run web env
Выполните команду docker-compose –help, чтобы увидеть весь список доступных команд.
Если вы запустили Compose с помощью docker-compose up -d, то нужно будет остановить ваши службы после работы с ними, для этого поможет команда ниже:$ docker-compose stop
Если хотите полностью уничтожить контейнер, используйте команду down.
Функция Call Waiting (CW) по умолчанию включена в FreePBX, что позволяет использовать так называемую «вторую линию», то есть ставить вызов на удержание и принимать параллельно ещё один входящий звонок на одном телефоне. Несмотря на то, что данная функция видна в разделе Applications модуля Module Admin, её настройку можно выполнить либо глобально, либо локально для каждого экстеншена. Подробнее расскажем об этом ниже.
Локальная настройка для экстеншенов и конечных пользователей
В первую очередь, данный параметр устанавливается отдельно в настройках каждого экстеншена, что отображается следующим образом:
Для отключения данной опции необходимо зайти в настройки экстеншена, далее выбрать вкладку Advanced, и в разделе Extension Options выставить Disable напротив опции Call Waiting.
Ещё одним способом управления данной опцией является использование сервисных кодов – по умолчанию установлены *70 на активацию и *71 на деактивацию данной опции. Удобство данного способа заключается в том, что каждый юзер может управлять данной настройкой на своём телефоне без обращения к администратору АТС.
Способы глобальной настройки Call Waiting
Первый способ является, по сути, автоматизированным способом настройки экстеншена – с помощью модуля Bulk Extensions – то есть вам необходимо выгрузить .csv файл со всеми экстеншенами, найти в файле нужную опцию (она обозначается как ENABLED) и просто стереть её (отсутствие значения = отключению опции).
Советуем пользовать функцией Текст по столбцам и дальнейшей обратной конвертацией файла в обычный .csv с помощью конвертера для наглядности и удобства.
Вторым способом является выключение CW Enabled by Default в положение No – но для этого необходимо пересоздавать экстеншены, так что данной опцией пользоваться не рекомендуется: