LogoLogo
www.mikopbx.ruTelegram сообществоФорум
Russian
Russian
  • Руководство по MikoPBX
    • Быстрое начало работы
    • Знакомство с MikoPBX
    • Системные требования
  • Установка
    • Отдельный компьютер
    • Виртуальные машины
      • VMware ESXi
      • VMware Fusion
      • VirtualBOX
      • VMware Workstation Pro
      • Hyper-V
      • Proxmox
    • Облачные сервисы
      • Yandex Cloud
        • Магазин приложений
        • Произвольный образ
        • Коммандная строка YC
      • VK Cloud
      • 1С:Облачная инфраструктура
      • AWS
        • AWS подробная инструкция
        • AWS Маркетплейс
      • Microsoft Azure
      • Google Cloud
        • Google Cloud подробная инструкция
        • Google Cloud Маркетплейс
      • Hetzner cloud (Empty)
      • Vscale
      • Selectel
      • DigitalOcean
      • Alibaba cloud
      • Vultr
    • В Docker контейнере
      • Установка докера и cоздание пользователя и каталогов
      • Запуск MikoPBX в контейнере
      • Запуск MikoPBX с помощью docker compose
  • Руководство пользователя
    • Телефония
      • Сотрудники
      • Очереди вызовов
      • IVR меню
      • Конференции
      • Звуковые файлы
      • История вызовов
    • Маршрутизация
      • Провайдеры телефонии
      • Входящие маршруты
      • Исходящие маршруты
      • Нерабочее время
    • Модули
      • Регистрация в маркетплейсе модулей
      • Управление модулями
      • Приложения диалпланов
    • Обслуживание
      • Обновление системы
        • Обновление из web-интерфейса
        • Обновление из консоли MikoPBX
        • Обновление Docker
      • Диагностика системы
      • Перезагрузка и выключение системы
    • Сеть и Firewall
      • Сетевые интерфейсы
      • Сетевой экран
      • Защита от взлома
    • Система
      • Общие настройки
      • Дата и время
      • Почта и уведомления
        • Настройка E-mail уведомлений для почтового сервиса Gmail
        • Настройка E-mail уведомлений для почтового сервиса Yandex
        • Настройка E-mail уведомлений для почтового сервиса Mail.ru
      • Доступ к AMI
      • Кастомизация системных файлов
  • Часто задаваемые вопросы
    • Интеграция с 1С
      • Перехват на ответственного
        • Перехват на ответственного в панели телефонии 4.0 как в панели 1.0
        • Отменить перехват на ответственного для конкретного провайдера
    • Установка
      • Установка на MDADM RAID1
      • Тонкая настройка firewall
      • Перенос MikoPBX на другой сервер
        • Перенос с помощью резервного копирования
        • Перенос с помощью резервного копирования по расписанию
        • Перенос с помощью rsync
      • Сброс к заводским настройкам
      • Мониторинг провайдеров на MikoPBX
    • Обслуживание
      • Изменить имя для авторизации
      • Закончилось место на доп. диске, увеличение размера диска
      • Закончилось место на доп. диске, перенос данных на новый диск
      • Хранение записей в общей папке windows
      • Резервный интернет и перерегистрация провайдеров
      • Сброс пароля администратора из консоли MikoPBX
    • Диагностика проблем
      • Подключение к АТС с помощью SSH
        • Подключение к АТС с помощью SSH-клиента (Putty)
        • Подключение с помощью SSH (Windows)
        • Подключение с помощью SSH (Linux/MacOS)
      • Подключение к АТС с помощью WinSCP
      • Получение логов с помощью приложения tcpdump
      • Снятие лога в АТС с помощью Wireshark
      • Анализ трафика средствами Sngrep
      • Настройка громкости
      • Решение проблем со звуком
      • Настройка Jitter
    • Входящая маршрутизация
      • Выбор провайдера при переадресации на мобильный
      • Уведомление о занятости, Call Waiting
      • Маршрутизация по DID номеру
      • Черные и белые списки
      • Разрешить донабор внутреннего номера в очереди
      • Нормализация входящего номера телефона
      • Настройка индивидуального нерабочего времени для учетной записи провайдера
      • Вывод информации о did-номере
      • Пример реализации типового маршрута входящих вызовов
      • Базовый пример IVR
    • Исходящая маршрутизация
      • Добавить P-Preferred-Identity и Remote-Party-ID заголовок
      • Конференция с постоянным внешним абонентом
      • Исходящий с набором внутреннего номера
      • Убрать все спецсимволы из набираемого номера
      • Запрет звонка через резервный маршрут
      • Звонки на экстренные номера
      • Звонок через определенного провайдера
      • Шаблоны номеров
        • Равномерное распределение исходящих
        • Удаление кода города из номера
        • Добавление префикса "8" к номеру
        • Замена префикса номера с "8, 7" на "+7"
        • Замена префикса номера с "+7" на "8"
        • Пример шаблона: звонки в другую страну (Украина, Беларусь, Латвия)
        • Как запретить замену "+" на "00"
        • Нормализация набираемого номера телефона
    • Сценарии и кейсы
      • Программное создание сотрудников
      • Уведомление в телеграмм о пропущенных
      • Позвонить в компанию с мобильного и набрав добавочный позвонить сторонней компании
      • Отправка входящего факса на email
      • Оценка клиентом качества обслуживания
      • Имитация внешних звонков
      • Отключение "нерабочего времени" для VIP номеров
      • Регистрация нескольких учетных записей от одного провайдера
      • Настройка индивидуального нерабочего времени для нескольких провайдеров, на одном хосте
      • Отключить переадресацию на мобильный для внутренних звонков
      • Уникальная фоновая музыка для очереди
      • Пауза для агента очереди
      • Динамические агенты очередей
      • Настройка функции "Paging"
      • Ограничить количество авторизаций на одном SIP аккаунте
      • Как реализовать функцию супервизора
      • Голосовая почта
      • Конвертация истории звонков FreePBX -> MikoPBX
      • SSL сертификат для web-интерфейса MIKOPBX от OPNSense
      • Скрытие номера от сотрудника
    • Соединение нескольких АТС
      • Объединение двух MikoPBX
      • Объединение MIKOPBX и Grandstream UCM6202
      • Объединение MikoPBX и FreePBX (PJSIP)
      • Объединение MikoPBX и FreePBX (IAX)
    • Настройка провайдеров
      • Ростелеком
      • MTT
      • Zadarma (Novofon)
      • Мегафон
      • Билайн
      • МТС
      • UIS (uiscom.ru)
      • MANGO OFFICE
      • dom.ru
      • Яндекс телефония
      • NEW-TEL
      • sip.tg
      • Lifecell
      • SIP Коннектор Bitrix24
      • ID Phone(Казахтелеком)
      • Имитация внешних входящих и исходящих звонков
      • Телфин
    • Настройка софтфонов
      • Bria Solo
      • Sessiontalk
      • Groundwire
      • MicroSIP
      • Zoiper
      • Jitsi
      • PhonerLite
      • Linphone (MacOS)
      • Telephone(MacOS)
      • Настройка WebRTC клиента SIPML5
      • Softphone.pro
      • 3CX Softphone
      • PortSIP
      • SIP.tg (Telegram)
    • Voip шлюзы
      • GoIP4
        • SMS в Telegram
      • Yeastar NeoGate TG 400
      • Grandstream HT503
      • Звонки через 3G модем Huawei E173 (chan_dongle)
    • IP-Телефоны
      • Snom D120
      • Yealink T19
      • Yealink T21
      • Yealink T28
      • Fanvil X3SP
    • Перестает работать сеть в MikoPBX
  • Модули
    • Модули МИКО
      • Интеграция с 1С
        • Панель телефонии 1.0 для 1С
        • Панель телефонии 4.0 для 1С
        • Модуль умной маршрутизации
      • Интеграция с amoCRM
        • Описание функционала amoCRM
        • Настройка интеграции с amoCRM
      • Интеграция с CRM Bitrix24
        • Описание функционала CRM Bitrix24
        • Настройка интеграции с Bitrix24
      • Управление телефонными группами
      • Резервное копирование
      • Автоматическая настройка телефонов
      • Автообработка пропущенных
      • Let's Encrypt
      • Управление доступом в систему
      • Модуль Автоинформатор
      • Оценка качества разговора
      • Синхронизация с LDAP/AD
      • Провайдер для звонков Telegram
      • Zabbix агент
      • Телефонная книга
      • Расширенная история звонков
  • Прочее
    • История версий
      • MikoPBX 2024.1
      • MikoPBX 2023.2
      • MikoPBX 2023.1.223
Powered by GitBook
On this page

Was this helpful?

Edit on GitHub
Export as PDF
  1. Часто задаваемые вопросы
  2. Сценарии и кейсы

Программное создание сотрудников

Пример использования REST API для генерации сотрудников

В релизе 2023.2 реализовано API для быстрого создания большого количества сотрудников, в процессе тестирования мы описали алгоритм генерации нового сотрудников в ChatGPT и провели нагрузочное тестирование по созданию 700 произвольных учетных записей на разных языках. На загрузку ушло около 1 минуты, тест прошел успешно.

Для выполнения этой задачи был написан запрос к ChatGPT следущего содержания.

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

Для получения структуры данных необходимо выполнить следующий GET запрос с пустым ID

http://127.0.0.1:8081/pbxcore/api/extensions/getRecord?id=

В ответ мы получим JSON примерно такого содержания:

{"jsonapi":{"version":"1.0"},
    "result":true,
    "data":
        {
            "type":"SIP",
            "show_in_phonebook":"1",
            "is_general_user_number":"1",
            "public_access":"0",
            "number":"275",
            "user_id":"",
            "user_avatar":"",
            "user_username":"",
            "user_email":"",
            "mobile_uniqid":"EXTERNAL-7870338E",
            "mobile_number":"",
            "mobile_dialstring":"",
            "sip_uniqid":"SIP-PHONE-5A230111",
            "sip_secret":"Nk9oOFI2ZXdDMEU9",
            "sip_type":"peer",
            "sip_qualify":"1",
            "sip_qualifyfreq":60,
            "sip_enableRecording":"1",
            "sip_dtmfmode":"auto",
            "sip_transport":" ",
            "sip_networkfilterid":"none",
            "sip_manualattributes":"",
            "fwd_ringlength":45,
            "fwd_forwarding":"",
            "fwd_forwardingonbusy":"",
            "fwd_forwardingonunavailable":""
        },
    "messages":[],
    "function":"getRecord",
    "processor":"MikoPBX\\PBXCoreREST\\Lib\\Extensions\\GetRecord::main",
    "pid":42448,
    "meta":{
        "timestamp":"2023-09-06T08:51:51+03:00",
        "hash":"a16f973985cb3d0cbe75abb2c10a7c39b2203a87"
        }
}

Если параметр result в ответе будет равен true, то возьмем данные для создания нового пользователя 
из параметра data и выполним POST запрос на адрес http://127.0.0.1:8081/pbxcore/api/extensions/saveRecord,
используя полученный после модификации массив полей формы отправив его в формате x-www-form-urlencoded.

Скрипт должен быть написан на Python без использования NodeJS и позволять создать 100 различных сотрудников.
В поле user_username вписываем имя и фамилию произвольного человека, чтобы использовались национальные алфавиты.
В поле user_email произвольный адрес электронной почты.
В поле mobile_number произвольные мобильные номера телефонов, только цифры, без дублей.
В поле fwd_forwarding, fwd_forwardingonbusy заполнить значениями mobile_number.

При создании сотрудника, вывести user_username, user_email и number в консоль и сообщить о результате.

Если в результате запроса к saveRecord или getRecord мы получили result равный false, 
то также в консоль вывести параметр messages из полученного ответа. 
Если в результате ответа мы получили ошибку другого типа, или ответ невозможно разобрать,
то вывести в консоль полный текст полученный от API сервера.

В результате был сгенерирован Python скрипт, который позволил выполнить этот тест.

CreateRandomExtensions.py
import requests
import random
from faker import Faker

def generate_random_mobile():
    return ''.join(random.choice("1234567890") for _ in range(11))

def main():
    faker_ru = Faker('ru_RU')
    faker_en = Faker('en_US')
    faker_zh = Faker('zh_CN')
    faker_ja = Faker('ja_JP')

    for number in range(1, 699):
        # Получение шаблона данных для нового сотрудника
        get_response = requests.get("http://127.0.0.1:8081/pbxcore/api/extensions/getRecord?id=")

        if get_response.json().get('result', False) == False:
            print(f"getRecord error: {get_response.json().get('messages', 'Unknown error')}")
            continue

        data = get_response.json().get('data', {})

        # Генерация произвольных данных
        locale = random.choice(['ru_RU', 'en_US', 'zh_CN', 'ja_JP'])
        faker = locals()[f"faker_{locale.split('_')[0].lower()}"]
        data['user_username'] = faker.name()
        data['user_email'] = faker.email()
        data['mobile_number'] = generate_random_mobile()
        data['fwd_forwarding'] = data['mobile_number']
        data['fwd_forwardingonbusy'] = data['mobile_number']

        # Создание нового сотрудника
        post_response = requests.post("http://127.0.0.1:8081/pbxcore/api/extensions/saveRecord", data=data, headers={'Content-Type': 'application/x-www-form-urlencoded'})

        if post_response.json().get('result', False):
            print(f"Created user {number} -> Username: {data['user_username']}, Email: {data['user_email']}, Mobile: {data['mobile_number']}")
        else:
            print(f"saveRecord error for user {number}: {post_response.json().get('messages', 'Unknown error')}")

        if post_response.status_code != 200 or not isinstance(post_response.json(), dict):
            print(f"Unknown error: {post_response.text}")

if __name__ == "__main__":
    main()

Для запуска подобного скрипта, сохраним его в папке /tmp внутри MikoPBX. Т.к. скрипт имеет несколько зависимостей, добавим их через установщик пакетов pip3 и запустим скрипт для генерации.

cd /tmp
python -m venv venv --without-pip
source venv/bin/activate
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
pip3 install faker requests
python CreateRandomExtensions.py

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

Важно отметить, т.к. система read-only, то установку Python библиотек необходимо выполнять посое каждой перезагрузки, а папка /tmp будет очищена. Разработку и доработку скрипта необходимо вести во внешней системе.

При выполнении запросов, как в этом примере, с адреса 127.0.0.1 авторизация не требуется.

Last updated 4 months ago

Was this helpful?

При выполнении REST API запросов из внешних адресов, необоходимо выполнить авторизацию административным логином и паролем или создать пользователя с правами на указанные действия в модуле и авторизовываться им.

управления правами сотрудников
MikoPBX процесс нагрузочного тестирования интерфейса и REST API
MikoPBX результат работы скрипта генерации произольного набора сотрудников