Русская версия | English
Модуль управления контактами для MikoPBX с автоматическим определением имени звонящего на входящих и исходящих вызовах.
- Определение имени звонящего — автоматический показ имени при входящих и исходящих звонках
- Интеграция с внешним API — поиск имени через внешние сервисы с кэшированием
- Импорт из Excel — массовая загрузка контактов из файлов Excel (.xlsx, .xls)
- Веб-интерфейс — управление контактами через DataTable с поиском и пагинацией
- Маска ввода — автоматическое форматирование номеров телефонов (опционально)
- Мультиязычность — поддержка 26 языков
- MikoPBX версии 2024.1.114 или выше
- Перейдите в Модули → Маркетплейс в панели администрирования MikoPBX
- Найдите модуль Телефонная книга
- Нажмите Установить
Или установите из GitHub релиза:
- Скачайте последний
.zipрелиз - Перейдите в Модули → Установка модуля
- Загрузите архив
- Откройте модуль Телефонная книга
- Нажмите кнопку Добавить
- Введите имя и номер телефона
- Нажмите Enter или кликните вне поля для сохранения
Подготовьте Excel файл с двумя колонками:
| Имя | Номер телефона |
|---|---|
| Иван Петров | +7 906 555-43-43 |
| ООО Компания | 84951234567 |
- Перейдите на вкладку Импорт
- Выберите Excel файл
- Нажмите Импортировать
Номера телефонов нормализуются автоматически — принимается любой формат.
Настройте внешний API для определения имени звонящего:
- Перейдите на вкладку Настройки
- Введите URL API с плейсхолдером
%number%:https://api.example.com/lookup?phone=%number%
- Установите время жизни кэша (в секундах, 0 = без кэша)
- Нажмите Сохранить
API должен возвращать текст с именем контакта.
При входящем звонке с номера +7 (906) 555-43-43, модуль нормализует его в 1065554343 и выполняет HTTP GET запрос:
Запрос:
GET https://api.example.com/lookup?phone=1065554343Ответ (обычный текст):
Иван ПетровИмя "Иван Петров" будет отображаться как определитель номера на телефоне. Если API вернет пустой ответ или ошибку, модуль продолжит работу без отображения имени.
Пример с названием компании:
GET https://api.example.com/lookup?phone=1495123456Ответ:
ООО Рога и КопытаКэш сохраняет ответ на настроенное время жизни, чтобы сократить количество запросов к API для повторяющихся номеров.
Номера нормализуются для единообразного хранения и быстрого поиска:
Ввод: +7 (906) 555-43-43
Шаг 1: 79065554343 (только цифры)
Шаг 2: 065554343 (последние 9 цифр)
Шаг 3: 1065554343 (добавлен префикс "1")Это обеспечивает корректное сопоставление независимо от формата набора номера.
Входящие звонки:
Asterisk → AGI скрипт → Поиск в PhoneBook → Установка CALLERID(name)Исходящие звонки:
Asterisk → CONNECTED_LINE_SEND_SUB → Поиск в PhoneBook → Установка CONNECTEDLINE(name)ModulePhoneBook/
├── agi-bin/
│ └── agi_phone_book.php # Точка входа AGI для Asterisk
├── App/
│ ├── Controllers/ # Контроллеры Phalcon MVC
│ ├── Forms/ # Определения форм
│ └── Views/ # Шаблоны Volt
├── Lib/
│ ├── PhoneBookConf.php # Интеграция с диалпланом Asterisk
│ ├── PhoneBookAgi.php # Обработчик AGI для Caller ID
│ ├── PhoneBookFind.php # Поиск через внешний API
│ └── PhoneBookImport.php # Обработчик импорта Excel
├── Models/
│ ├── PhoneBook.php # Модель контакта
│ └── Settings.php # Модель настроек
├── public/assets/
│ ├── css/ # Стили модуля
│ └── js/ # JavaScript (исходники ES6 + скомпилированные)
└── Messages/ # Переводы (26 языков)SQLite база данных: /storage/usbdisk1/mikopbx/custom_modules/ModulePhoneBook/db/module.db
m_PhoneBook — контакты:
id— первичный ключnumber— нормализованный номер для поискаnumber_rep— отображаемый форматcall_id— имя контактаsearch_index— поле для полнотекстового поискаcreated— временная метка (для истечения кэша API)
m_ModulePhoneBook — настройки:
disableInputMask— переключатель маски вводаphoneBookApiUrl— URL внешнего APIphoneBookLifeTime— время жизни кэша в секундах
# Компиляция ES6 в ES5 с помощью Babel
docker run --rm -v ~/mikopbx:/workspace ghcr.io/mikopbx/babel-compiler:latest /workspace/Extensions/[module]/public/assets/js/src/[file] extension`php -l Lib/PhoneBookConf.php- Email: help@miko.ru
- Вопросы: GitHub Issues
GPL-3.0 — см. файл LICENSE.