Сегодня я хочу разобрать как удаленно взаимодействовать с телефонным аппаратом Yealink SIP-T31G
, т.е. не заходить через браузер в Web
-интерфейс телефона и выполнять функционал администрирования, а проделывать действия с консоли командной строки: либо с Windows
системы, либо с Ubuntu
системы:
Предварительные действия
Разъем Ethernet на телефоне подключаю в Switch
Рабочим компьютером я также подключен в Switch
К примеру, мне нужно периодически перезагружать телефоны дабы они через AutoProvision
подгрузили новые настройки, перезагружать, включать или отключать DND
режим и т.д.
Шаг №1:
Подключаюсь через Web
–интерфейс к телефонному аппарату посредством браузера Google Chrome
(к примеру, с Windows 10 Pro
)
https://IP&DNS - login&pass -
дефолтная авторизация
Логин: admin
Пароль: admin
и нажимаю "Логин"
Шаг №2:
Отключаю проверку сертификата:
https://IP&DNS - login&pass - Безопасность - Доверенные сертификаты -
Принимать только доверенные сертификаты: вместо "Включено" изменяю на "Отключено"
и нажимаю "Сохранить"
Шаг №3:
Разрешаю перезагружать телефоне если по телефону идет разговор:
https://IP&DNS - login&pass - Функции - Основные параметры -
Перезагружать в разговоре: по умолчанию Отключено, ставлю Включено
Шаг №4:
Разрешаю определенному адресу взаимодействовать с данным аппаратом:
https://IP&DNS - login&pass - Функции - Контроль подключений -
IP-адреса для отправки Action URI: указываю подсеть 192.168.9.128
Управление CSTA: включено
и нажимаю "Сохранить"
, телефон уйдет в перезагрузку
Шаг №5:
Инициирую подключение к телефонному аппарату из 192.168.9.0/24
сети, например, на включение DND
режима:
aollo@srv-tablo:~$ curl -v --insecure https://admin:admin@192.168.7.55/servlet?key=DNDOn
* Trying 192.168.7.55...
* TCP_NODELAY set
* Connected to 192.168.7.55 (192.168.7.55) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (OUT), TLS change cipher, Client hello (1):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Unknown (8):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS Unknown, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: C=CN; ST=Fujian; L=Xiamen; O=Yealink Network Technology Co.,Ltd.; OU=Yealink Equipment; CN=249ad82182f3; serialNumber=ffffffff-ffff-ffff-fff0-249ad82182f3; emailAddress=support@yealink.com
* start date: Sep 3 05:30:46 2022 GMT
* expire date: Aug 31 05:30:46 2032 GMT
* issuer: C=CN; ST=Fujian; L=Xiamen; O=Yealink Network Technology Co.,Ltd.; OU=yealink.com; CN=Yealink Manufacturing CA; emailAddress=support@yealink.com
* SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
* Server auth using Basic with user 'admin'
* TLSv1.3 (OUT), TLS Unknown, Unknown (23):
> GET /servlet?key=DNDOn HTTP/1.1
> Host: 192.168.7.55
> Authorization: Basic YWRtaW46YWRtaW4=
> User-Agent: curl/7.58.0
> Accept: */*
>
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS Unknown, Unknown (23):
< HTTP/1.1 200 OK
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< X-Content-Type-Options: nosniff
< Content-Type: text/html
< Content-Length: 58
< Date: Wed, 17 Nov 2021 00:01:53 GMT
<
* TLSv1.3 (IN), TLS Unknown, Unknown (23):
<html>
<body>
<div id="_RES_INFO_"></div>
</body>
* Connection #0 to host 192.168.7.55 left intact
</html>aollo@srv-tablo:~$
после чего на телефоне появляется сообщение вида:
нажимаю "ОК"
и отправленная команда включения режима DND
активируется:
Отключаю DND
-режим:
aollo@srv-tablo:~$ curl --insecure https://admin:admin@192.168.7.55/servlet?key=DNDOff
<html>
<body>
<div id="_RES_INFO_"></div>
</body>
</html>aollo@srv-tablo:~$
Если на телефоне указать несколько IP
–адресов (запросы с которых будет разрешено обрабатывать телефону):
IP-адреса для отправки Action URI: 192.168.9.128,192.168.9.126
то при отправке с другого IP-адреса команды на телефоне также будет сообщение "Разрешить удаленный контроль? Да/Нет"
На заметку: Также в этом поле "IP-адреса для отправки Action URI:"
можно указать значение Any
, и тогда телефон будет принимать все GET
-запросы с любых IP
-адресов, но опять же с уведомление на телефоне. Если же оставить это поле пустым, телефону будет запрещено принимать запросы HTTP GET
На заметку: Важно: при первом запросе с любого уникального разрешенного IP
-адреса на экране телефона появится сообщение "Разрешить удаленный контроль?"
. Необходимо предоставить разрешение, нажав клавишу ОК.
В дальнейшем при запросах c этого же адреса сообщения появляться не будут, а запросы будут выполняться моментально
Шаг №6:
Отключить сообщение "Разрешить удаленный контроль?"
на дисплее телефона.
Для отключения сообщения нужно скачать текущий конфигурационный файл
https://IP&DNS - login&pass - Настройки - Конфигурация - (Конфигурационный файл .cfg)
- Экспорт конфигурационного файла: выбираю
"Все настройки"
и нажимаю"Экспорт"
скачивается файл (у меня на Windows 10 Pro
) по адресу: C:\Users\aollo\Downloads\249ad82182f3-all.cfg
открываю данный конфигурационный файл через редактор Notepad++
#!version:1.0.0.1
### This file is the exported MAC-all.cfg.
action_url.show_msgbox = 1
features.action_uri_limit_ip = any
features.reboot_in_talk_enable = 1
### Static Configuration ###
static.security.trust_certificates = 0
### вношу ниже указанную строку
### 0 - выключено, 1 - включено
features.show_action_uri_option = 0
после сохраняю изменения в конфигурационном файле.
Шаг №7:
Импортирую измененный конфигурационный файл в телефон:
https://IP&DNS - login&pass - Настройки - Конфигурация
– (Конфигурационный файл .cfg) Импорт конфигурационного файла
– нажимаю "Обзор"
– указываю C:\Users\aollo\Downloads\249ad82182f3-all.cfg
и нажимаю "Открыть"
, а затем "Импорт" - OK
На заметку: файл 249ad82182f3-all.cfg
есть как MAC
-адрес телефона: Статус - (Общие)
MAC-адрес: 24:9A:D8:21:82:F3
Отправляю команду включения DND
-режима:
aollo@srv-tablo:~$ curl --insecure https://admin:admin@192.168.7.55/servlet?key=DNDOn
<html>
<body>
<div id="_RES_INFO_"></div>
</body>
</html>aollo@srv-tablo:~$
и на дисплее телефона отображается иконка, что режим DND
-включен.
Получается, что лучше все телефоны подключиться к системе Autoprovision
"Настройка AutoProvision for Yealink"
и уже для каждого телефонного аппарата предопределить данный параметр и телефоны сами его подтянут.
На заметку: Если отключить уведомление на телефонном аппарате, то это может негативно сказаться на безопасности, но я бы поспорил на этот счет, т.е. я в организации указываю не any, а только с определенных IP адресов могу инициировать подключение, использую https и нормальный логин и пароль.
Шаг №8:
Но вы не только можете включать и выключать DND
режим, есть еще команды, к примеру:
aollo@srv-tablo:~$ curl --insecure https://admin:admin@192.168.7.55/servlet?key=Reboot
<html>
<body>
<div id="_RES_INFO_"></div>
</body>
</html>aollo@srv-tablo:~$
Примеры полезных команд и сценарии их применения:
Команда: http://192.168.7.55/servlet?key=Reboot
Действие: перезагрузка устройства. С помощью сервера можно настроить перезагрузку по расписанию.
Команда: http://192.168.7.55/screencapture
Действие: снимок экрана. Позволяет администратору просматривать состояние экрана телефона сотрудника.
Команда: http://192.168.7.55/servlet?key=DNDOff
Действие: отключение функции “Не беспокоить”.
Команда: http://192.168.7.55/servlet?key=number=1006
Действие: совершение исходящего вызова с телефона. Аналогично вызову из веб-интерфейса телефона.
Команда: http://192.168.7.55/servlet?key=AutoP
Действие: форсированный запуск процедуры автопровижининга.
Команда: http://192.168.7.55/servlet?phonecfg=set[&features.usb_call_recording.enable=1][& features.auto_recording.enable=1]
Действие: внесение изменений в конфигурацию телефона. Позволяет администратору менять параметры настройки телефона.
Команда: http://192.168.7.55/servlet?key=AlwaysFwdOn=79123456789
Действие: установка переадресации по неответу на указанный номер.
Дополнительно: таблица команд
Команда | Значение | Действие |
key= | OK | Нажатие клавиши “ОК” |
ENTER | Нажатие softkey-клавиши “Enter/Вход” | |
SPEAKER | Переключиться на громкую связь | |
F_TRANSFER | Трансфер вызова | |
VOLUME_UP | Увеличить громкость | |
VOLUME_DOWN | Уменьшить громкость | |
MUTE | Отключить микрофон | |
F_HOLD | Удержание вызова | |
HOLD | Удержание вызова | |
F_CONFERENCE | Конференц-вызов | |
Cancel/CANCEL | Отменить действие, завершить вызов | |
X | Отменить действие, завершить вызов | |
0-9/*/# | Нажатие клавиши номеронабирателя | |
L1-LX | Активация DSS-клавиши X | |
LX_LONGPRESS | Длительное нажатие DSS-клавиши X | |
F1-F4 | Нажатие softkey-клавиши 1-4 | |
MSG | Вызов меню электронной почты | |
HEADSET | Переключиться на гарнитуру | |
RD | Повторный набор | |
UP/DOWN/LEFT/RIGHT | Клавиши навигации “Вверх/Вниз/Влево/Вправо” | |
BACK_IDLE | Возврат на экран ожидания | |
Reboot | Перезагрузка устройства | |
AutoP | Запуск автопровижининга | |
DNDOn | Активация DND | |
DNDOff | Отключение DND | |
number=xxx&outgoing_uri=y | Набор номера xxx | |
OFFHOOK | Поднять трубку | |
ONHOOK | Положить трубку | |
ANSWER/ASW/Asw | Ответить на вызов | |
Reset | Сбросить настройки телефона | |
ATrans=xxx | Сопроводительный трансфер на номер xxx | |
BTrans=xxx | Слепой трансфер на номер xxx | |
ATrans=callid_A@callid_B | Соединить 2 активных вызова и покинуть оба разговора | |
CallWaitingOn | Включить функцию ожидания вызова | |
CallWaitingOff | Отключить функцию ожидания вызова | |
CALLEND/CallEnd | Завершить вызов | |
SPLIT | Разбить конференц-вызов на отдельные вызовы | |
SWAP | Переключить активный вызов (предыдущий активный вызов будет поставлен на удержание) | |
ASW/CANCEL/HOLD/UNHOLD:xxx | Ответить/Завершить/Удержать/Вернуть вызов (xxx – Call ID вызова) | |
AlwaysFwdOn/BusyFwdOn/NoAnswFwdOn=xxx=n | Активация переадресации на номер xxx | |
AlwaysFwdOff/BusyFwdOff/NoAnswFwdOff | Деактивация переадресации на номер xxx | |
n/a | screencapture | Сделать скриншот экрана |
screencapture/download | Сделать скриншот экрана и скачать его | |
phonecfg=get[&accounts=x][&dnd=x][&fw=x] | Получить информацию об аккаунтах, статусе DND, получить конфиг, где x – цифра 0 (не получать) или цифра 1 (получить) | |
phonecfg=set[&параметр конфигурации=значение] | Установить параметр конфигурации (можно указать несколько параметров) | |
phonecfg=get[&параметр конфигурации] | Получить значение параметра конфигурации (можно указать несколько параметров) |
Итого, отлично что я задался целью разобрать как удаленно взаимодействовать с телефонными аппаратами, благо телефоны Yealink поддерживают такой функционал. Заметка будет дополняться.
На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.