Уведомление на Yealink-телефоне "Разрешить удаленный контроль?"

Сегодня я хочу разобрать как удаленно взаимодействовать с телефонным аппаратом 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:~$

после чего на телефоне появляется сообщение вида:

Уведомление на Yealink-телефоне "Разрешить удаленный контроль?"

нажимаю "ОК" и отправленная команда включения режима DND активируется:

DND-режим включен через curl запрос

Отключаю 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.