Files
site_aegisone/other/Yeastar_S20.md
T

22 KiB
Raw Blame History

Yeastar S20 — Интеграция с AegisOne

Дата последнего обновления: 03.06.2026


1. Подключение к АТС

Сетевая схема

┌─────────────────────┐         ┌──────────────────────────┐
│ Сервер AegisOne     │         │ Локальная сеть (офис)    │
│ 81.177.141.34       │         │ 192.168.1.0/24           │
│                     │         │                          │
│  ┌───────────────┐  │  VPN/   │  ┌──────────────────┐   │
│  │ py_service    │──┼──port───┼──│ Yeastar S20      │   │
│  │ max_bot       │  │ forward │  │ 192.168.1.150    │   │
│  └───────────────┘  │         │  │                  │   │
│                     │         │  │  WAN:            │   │
│                     │         │  │  185.105.171.187 │   │
└─────────────────────┘         │  └──────────────────┘   │
                                └──────────────────────────┘

IP-адреса и порты

Ресурс Локальный IP Белый IP Порт (локал) Порт (проброс) Протокол
АТС (Web UI) 192.168.1.150 185.105.171.187 8088 45088 HTTPS
AMI 192.168.1.150 185.105.171.187 5038 45038 TCP
MySQL (CDR) 192.168.1.150 185.105.171.187 3306 43306 TCP
FTP 192.168.1.150 185.105.171.187 21 45021 TCP
SSH 192.168.1.150 185.105.171.187 8022 TCP

Проброс портов (на роутере/ файрволе офиса)

Направление Протокол Внешний порт → Внутренний IP:порт
Internet → АТС TCP 45038 → 192.168.1.150:5038 (AMI)
Internet → АТС TCP 45021 → 192.168.1.150:21 (FTP)
Internet → АТС TCP 43306 → 192.168.1.150:3306 (MySQL)
Internet → АТС TCP 45088 → 192.168.1.150:8088 (Web UI)

2. Учётные данные и параметры устройства

Параметры устройства (актуально на 03.06.2026)

Параметр Значение Источник
Модель Yeastar S20 FTP /support/tmp/deviceinfo.txt
Серийный номер 3691C1453100 FTP /support/tmp/deviceinfo.txt
Прошивка (software) 30.15.0.206 FTP /support/tmp/deviceinfo.txt
Железо (hardware) V1.30 0005-0000 FTP /support/tmp/deviceinfo.txt
OEM Yeastar S20 FTP /support/tmp/deviceinfo.txt
Asterisk 13.7.0 AMI CoreSettings
AMI версия 2.8.0 AMI CoreSettings
MySQL 5.1.61 MySQL greeting
PBX Center 1.24.2 Web UI App Center
SSH-сервер dropbear 2019.78 SSH banner (порт 8022)
FTP-сервер vsFTPd 3.0.2 FTP banner (порт 21)
CDR Включён AMI CoreSettings
Max звонков 10 AMI CoreSettings
REST API Не поддерживается на S20 Документация Yeastar

Web UI (админ-панель АТС)

Параметр Значение
URL https://192.168.1.150:8088 (локально) или https://185.105.171.187:45088 (интернет)
Логин admin
Пароль .-SHGWa_12

AMI (Asterisk Manager Interface)

Параметр Значение
Хост 192.168.1.150 (локально) или 81.177.141.34 (из сервера, через проброс)
Порт 5038 (проброс: 45038)
Логин 1cuser
Пароль 1csecret
Привилегии Ограниченные (нет Command, Originate)
Разрешённые IP 81.177.141.34/255.255.255.255 + 192.168.1.0/255.255.255.0

MySQL (доступ к CDR)

Параметр Значение
Хост 192.168.1.150 (локально) или через проброс 43306
Порт 3306 (проброс: 43306)
Логин 1cuser
Пароль 1csecret
ВАЖНО charset='utf8' (MySQL 5.1.61 не поддерживает utf8mb4!)
БД cdr

FTP (записи звонков)

Параметр Значение
Порт 21 (проброс: 45021)
Логин support
Пароль T4oQSU_?
Статус Работает!
Доступ Корневая ФС (чroot), /tmp недоступен

Доступные каталоги через FTP:

  • /sounds/record/ — звуки (пусто)
  • /storage_share/mmc1 — симлинк → /tmp/media/mmc1 (нерезолвящийся через FTP)
  • /support/tmp/deviceinfo.txtинформация об устройстве
  • /support/ — системные файлы, bin
  • /gui_backups/ — бэкапы
  • /fax/, /www/, /var/, /etc/, /boot/, /cache/ — системные каталоги

Ограничение: записи звонков в /tmp/media/mmc1/autorecords/ недоступны/tmp за пределами FTP-чroot. Для доступа к записям нужен SSH.

SSH (файловая система)

Параметр Значение
Порт 8022
SSH-сервер dropbear 2019.78
Пароль T4oQSU_?
Логин НЕ ИЗВЕСТЕН
Статус Порт открыт, но логин не найден
Рекомендация Не использовать SSH — только MySQL + AMI

Хранилище данных (в Web UI)

Параметр Значение
Имя файла share
Логин share
Пароль 9tktYfM2
Назначение Сетевая папка (симлинк mmc1 -> /tmp/media/mmc1 в /storage_share/)

3. Где найти информацию об АТС

Серийный номер, модель, прошивка

Источник Способ
FTP /support/tmp/deviceinfo.txt Содержит: hardware, software, sn, product, oem
Web UI Dashboard или Settings > System > General > Preferences Отображается на главной странице
Web UI Settings > System > General > About Версия прошивки и модель

Содержимое deviceinfo.txt:

hardware:  V1.30 0005-0000
software:  30.15.0.206
      sn:  3691C1453100
 product:  Yeastar S20
     oem:  Yeastar S20

Версия Asterisk и компонентов

Источник Способ
AMI команда CoreSettings AsteriskVersion, AMIversion, CoreCDRenabled
AMI команда ListCommands Список доступных AMI-команд с привилегиями
Web UI Settings > System > General > About Версия PBX Center, прошивки

Конфигурация (абоненты, очереди, транки)

Источник Что даёт
AMI QueueStatus Очереди, участники, стратегии
AMI VoicemailUsersList Абоненты, голосовая почта
AMI PJSIPQualify Статус SIP-абонента
MySQL БД cdr История звонков, абоненты (из CDR)
Web UI Extensions Список расширений
Web UI Trunks SIP-транки
Web UI Call Queue Очереди

Записи звонков

Источник Способ
MySQL колонки recordpath, monitorfile Путь и имя WAV-файла на PBX
Web UI CDR and Recordings Ручное скачивание через браузер
FTP /storage_share/mmc1 Симлинк на /tmp/media/mmc1 (нерезолвится через FTP)
SSH порт 8022 Прямой доступ к файловой системе (логин неизвестен)

4. Абоненты и очереди

Внутренние номера (расширения)

Номер Назначение
1001 Основной (Инженер)
1002 Второй (Инженер)
1003 Дополнительный
1000 Тестовый

Очереди (Queue)

Номер очереди Стратегия Расширения
6700 ringall 1001, 1002
6701 rrmemory 1001
6702 ringall 1002

Транки (линии)

Транк Тип Назначение
Mango VoIP-провайдер Исходящие/входящие через SIP
Tele2 VoIP-провайдер Исходящие/входящие через SIP
YSGSM GSM-модуль Исходящие через GSM-SIM

5. База данных CDR

Структура

БД: cdr, таблицы: cdr (текущая) + cdr_YYYYMM (архивные).

Колонки таблицы cdr

Колонка Тип Описание
id int ID записи
datetime datetime Дата и время звонка
clid varchar Caller ID (кто звонит)
src varchar Номер отправителя
dst varchar Номер получателя
dcontext varchar Контекст диалплана
srctrunk varchar Транк отправителя
dstrunk varchar Транк получателя
lastapp varchar Последнее приложение (Dial, Queue, BackGround...)
lastdata varchar Данные последнего приложения (номер, очередь)
duration int Общая длительность (секунды)
billable int Биллируемая длительность (секунды)
disposition varchar Статус: ANSWERED, NO ANSWER, BUSY, VOICEMAIL, FAILED
calltype varchar Тип: Inbound, Outbound, Internal
accountcode varchar Код аккаунта
uniqueid varchar Уникальный ID звонка
recordfile varchar Имя файла записи (WAV)
recordpath varchar Путь к записи на PBX
monitorfile varchar Имя файла мониторинга
monitorpath varchar Путь к мониторингу на PBX
extfield1-5 varchar Дополнительные поля
didnumber varchar DID-номер (входящий номер)
srcchanurl varchar SIP URL канала отправителя
dstchanurl varchar SIP URL канала получателя
companycontact varchar Имя контакта компании
personalcontact varchar Имя личного контакта
contactnumber varchar Контактный номер

Примеры запросов

-- Все звонки за сегодня
SELECT datetime, src, dst, duration, billable, disposition, calltype
FROM cdr.cdr
WHERE DATE(datetime) = CURDATE()
ORDER BY datetime DESC;

-- Звонки за конкретный месяц
SELECT * FROM cdr.cdr_202606 ORDER BY datetime DESC;

-- Входящие звонки на очередь 6700
SELECT datetime, src, dst, duration, disposition
FROM cdr.cdr
WHERE dst LIKE '6700%' AND calltype = 'Inbound'
ORDER BY datetime DESC;

-- Звонки с записями
SELECT datetime, src, dst, duration, recordfile, recordpath
FROM cdr.cdr
WHERE recordfile != ''
ORDER BY datetime DESC;

-- Статистика по дням
SELECT DATE(datetime) as day, COUNT(*) as calls,
       SUM(CASE WHEN disposition='ANSWERED' THEN 1 ELSE 0 END) as answered
FROM cdr.cdr
WHERE datetime >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY DATE(datetime)
ORDER BY day DESC;

Таблица queue_log

Содержит логи событий очередей (поступление, ответ, ожидание, сброс).


6. Записи звонков

Где хранятся

На файловой системе PBX: /tmp/media/mmc1/autorecords/YYYYMM/

Формат имени файла:

YYYYMMDDHHMMSS-UNIQUEID-SRC-DST-Direction.wav

Примеры из CDR:

20260110164821-1768052891.15-1001-+79531116788-Outbound.wav
20260402105623-1775116571.13-1001-89531116788-Outbound.wav
20260512162645-1778592395.0-+79898250183-1001-Inbound.wav

Как получить

  1. Путь в CDR: колонки recordpath, monitorpath (путь на PBX)
  2. FTP (support/T4oQSU_?): записи недоступны/tmp за пределами FTP-чroot
  3. SSH (порт 8022, пароль T4oQSU_?, логин неизвестен): теоретически доступен, но логин не найден
  4. Web UI: CDR and Recordings — ручное скачивание через браузер

7. AMI — Доступные команды

Работает с 1cuser/1csecret

Команда Описание Статус
Ping Проверка соединения
CoreStatus Статус ядра (uptime, кол-во звонков)
CoreShowChannels Список активных каналов
CoreSettings Настройки ядра (Asterisk, CDR)
QueueStatus Статус очередей + участников
VoicemailUsersList Список абонентов голосовой почты
PJSIPQualify Пинг SIP-абонента
Status Статус всех каналов
ListCommands Список доступных команд

Не работает (Permission denied)

Команда Описание
Command Выполнение CLI-команд (cdr show и т.д.)
Originate Исходящий звонок
ShowDialPlan Просмотр диалплана
Hangup Завершение звонка
Redirect Переадресация звонка

Real-time события

При включённых Events: On AMI автоматически отправляет:

  • Event: Cdr — при завершении звонка (содержит CDR-данные)
  • Event: Newchannel — при начале звонка
  • Event: Dial — при наборе номера
  • Event: Hangup — при завершении

8. Пример подключения (Python)

MySQL — запрос CDR

import pymysql

conn = pymysql.connect(
    host="192.168.1.150",  # или внешний IP через проброс
    port=3306,              # или 43306 через проброс
    user="1cuser",
    password="1csecret",
    database="cdr",
    charset="utf8",         # ВАЖНО: не utf8mb4!
    connect_timeout=5
)

cursor = conn.cursor()
cursor.execute("SELECT * FROM cdr ORDER BY datetime DESC LIMIT 10")
for row in cursor.fetchall():
    print(row)
conn.close()

AMI — real-time события

import socket
import time

def ami_connect(host, port, username, password):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((host, port))
    # Читаем приветствие
    greeting = sock.recv(4096).decode()
    # Логин
    login_msg = (
        f"Action: Login\r\n"
        f"Username: {username}\r\n"
        f"Secret: {password}\r\n"
        f"Events: On\r\n"
        f"\r\n"
    )
    sock.send(login_msg.encode())
    time.sleep(1)
    response = sock.recv(16384).decode()
    return sock

# Использование
sock = ami_connect("192.168.1.150", 5038, "1cuser", "1csecret")
# Слушаем события
while True:
    data = sock.recv(16384).decode()
    if data:
        print(data)

AMI — из сервера (через проброс)

# Подключение через проброс портов с сервера
sock = ami_connect("81.177.141.34", 45038, "1cuser", "1csecret")
# Или напрямую (если сервер в локальной сети)
sock = ami_connect("192.168.1.150", 5038, "1cuser", "1csecret")

9. Схема интеграции с AegisOne

┌──────────────────┐     MySQL:3306      ┌──────────────────┐
│ py_service       │◄────────────────────│ Yeastar S20      │
│ (CDR polling)    │                     │ (cdr БД)         │
│                  │     AMI:5038        │                  │
│ (real-time)      │◄────────────────────│ (события)        │
│                  │                     │                  │
│ ┌──────────────┐ │                     │ ┌──────────────┐ │
│ │ /service/    │ │                     │ │ Записи WAV   │ │
│ │ phone/       │ │     FTP:21         │ │ /tmp/media/  │ │
│ │ history      │ │◄──(когда будет)────│ │              │ │
│ │ playback     │ │                     │ └──────────────┘ │
│ └──────────────┘ │                     └──────────────────┘
└──────────────────┘
         │
         ▼
┌──────────────────┐
│ max_bot          │
│ (уведомления о   │
│  пропущенных)    │
└──────────────────┘

10. План интеграции (TODO)

Фаза 1: CDR (готово к реализации)

  • Модель БД для хранения звонков
  • Периодический опрос MySQL (каждые 5 мин)
  • Страница истории звонков в сервисном портале
  • Фильтры: по дате, номеру, типу, статусу

Фаза 2: Real-time

  • AMI-клиент для получения событий
  • Уведомления о пропущенных звонках (в max_bot)
  • Статус абонентов (online/offline)
  • Мониторинг очередей

Фаза 3: Записи

  • FTP логин найден: support / T4oQSU_?
  • FTP-чroot не даёт доступ к /tmp/media/mmc1/autorecords/ — нужен SSH или другой способ
  • Разобраться с SSH-логином (пароль T4oQSU_? известен)
  • Скачивание записей
  • Плеер для прослушивания в портале

Фаза 4: Управление

  • Исходящие звонки из портала (если AMI получит права)
  • Переключение звонков
  • Статистика и отчёты

11. Известные проблемы

  1. Записи звонков недоступны через FTP — логин support работает, но /tmp/media/mmc1/autorecords/ за пределами FTP-чroot. Нужен SSH (порт 8022, пароль T4oQSU_?, логин неизвестен)
  2. AMI ограниченные права — на S20 нельзя расширить привилегии AMI-пользователя через Web UI. Доступны только readonly-команды
  3. REST API не поддерживается — только для S50/S100/S300
  4. MySQL 5.1.61 — старая версия, не поддерживает utf8mb4. Использовать charset='utf8'
  5. Кириллица в CDR — имена контактов отображаются в кодировке CP1251/garbage (проблема кодировки MySQL-клиента)

12. Ссылки


13. FTP — Структура каталогов

/ (корень FTP, доступен как support)
├── boot/
├── cache/
├── etc/
├── fax/
├── ftp_media/          (пусто)
├── gui_backups/
├── imageupdate/
├── lost+found/
├── rcstop/
├── sounds/
│   ├── moh/            (музыка на удержании)
│   └── record/         (пусто)
├── storage_share/
│   └── mmc1 → /tmp/media/mmc1  (симлинк, нерезолвящийся)
├── support/
│   ├── tmp/
│   │   ├── deviceinfo.txt      ← ИНФОРМАЦИЯ ОБ УСТРОЙСТВЕ
│   │   └── testsysmailbox.eml
│   ├── autoptemplate/
│   ├── bin/
│   ├── customcfg/
│   └── fxotune/
├── syslog/
├── syslog_backup/
├── tftpboot/
├── var/
├── webupload/
├── www/
└── ysapps/

Ключевые файлы

Путь Содержимое
/support/tmp/deviceinfo.txt Серийный номер, модель, прошивка
/support/tmp/testsysmailbox.eml Тестовый шаблон почты
/storage_share/mmc1 Симлинк на записанные файлы (недоступен через FTP)