diff --git a/Lib/ConnectorFMCConf.php b/Lib/ConnectorFMCConf.php index 3a082c7..c6f0b2d 100644 --- a/Lib/ConnectorFMCConf.php +++ b/Lib/ConnectorFMCConf.php @@ -82,6 +82,7 @@ public function extensionGenContexts(): string $conf .= ' same => n,Set(__M_CALLID=${CHANNEL(callid)})'.PHP_EOL; $conf .= ' same => n,Set(__TRANSFER_OPTIONS=t)'.PHP_EOL; $conf .= ' same => n,Set(M_TIMEOUT=600)'.PHP_EOL; + $conf .= ' same => n,ExecIf($["${CHANNEL(channeltype)}" != "Local"]?Gosub(set_from_peer,s,1))' . PHP_EOL; $conf .= ' same => n,Progress()'.PHP_EOL; $conf .= ' same => n,Playback(silence/1,noanswer)'.PHP_EOL; $conf .= ' same => n,GosubIf($["${DIALPLAN_EXISTS('.$trunk['id'].'-find-did-incoming'.',${EXTEN},1)}" == "1"]?'.$trunk['id'].'-find-did-incoming'.',${EXTEN},1) '.PHP_EOL; diff --git a/README.md b/README.md index 5356b28..f6e5531 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,79 @@ -# MikoPBX extension module template # +## MikoPBX Module: FMC Device Connection -*Read this in other languages: [English](README.md), [Русский](README.ru.md).* +Read this in other languages: [English](README.md), [Русский](readme.ru.md) -## Module description ## +### What it does +Connect FMC SIM cards to MikoPBX by emulating a SIP phone for each employee. Works with the MCN FMC SIM provider. The PBX registers on the MCN trunk and also "registers" SIMs on employees' SIP accounts, enabling full call control and recording on the PBX. -We are working on the module developing guide here [https://docs.mikopbx.com](https://docs.mikopbx.com/mikopbx-development/) +- Paid module. Provider supported: MCN (FMC SIM). +Reference: [MikoPBX docs — FMC devices (RU)](https://docs.mikopbx.com/mikopbx/modules/miko/podklyuchenie-fms-ustroistv) -### Questions ### -You are welcome to our telegram channel for developers [@mikopbx_dev](https://t.me/joinchat/AAPn5xSqZIpQnNnCAa3bBw) +### Benefits +- Use GSM for calls; employees stay reachable even without internet +- Record all conversations on the PBX +- CRM integrations remain available +- Full PBX control (IVR, routing, policies) for FMC calls + +### How it works +- SIM "registers" on an employee SIP account (e.g., extension `201`). +- Outgoing from SIM: PBX sees a call from internal `201`. +- Incoming to extension `201`: call is delivered to the employee’s SIM. + +### Prerequisites +- MikoPBX up and running +- MCN FMC SIM trunk credentials +- Employee mobile numbers stored in user profiles in international format `+7...` + +### Setup +1) In each employee card, set the mobile number with `+7` and on the Routing tab disable call forwarding to mobile. +2) Open module settings "FMC Device Connection": + - Outgoing calls: for Login and Password, click Update. + - Incoming calls: enter MCN trunk parameters. + - Employees: select all employees using FMC SIMs. + - FMC Provider: select MCN. +3) Save. The PBX will register on the MCN trunk and on internal accounts for selected employees. + +### Customization (optional) +By default, outgoing calls from SIM follow standard PBX routes. If you want the public caller ID to be the SIM number, add to the end of `extensions.conf` in Customization: + +```conf +[outgoing-custom] +exten => _.X!,1,Set(FMC_ID=SIP-FMC-XXXXXX) + ; Use SIM caller ID only for extensions listed in SIP-FMC-ENABLE-OUT + same => n,ExecIf($["${DIALPLAN_EXISTS(SIP-FMC-ENABLE-OUT,${CALLERID(num)},1)}" != "1"]?return) + ; Limit to calls coming from SIM user agent if needed + ;same => n,ExecIf($["${PJSIP_HEADER(read,User-Agent)}" != "miko-b24-fmc" ]?return) + same => n,GosubIf($["${DIALPLAN_EXISTS(all-outgoing-${FMC_ID}-custom,${EXTEN},1)}" == "1"]?all-outgoing-${FMC_ID}-custom,${EXTEN},1) + same => n,return + +[SIP-FMC-ENABLE-OUT] +exten => 201,1,NoOp(--- Out call ---) +exten => 202,1,NoOp(--- Out call ---) +``` + +- `SIP-FMC-XXXXXX` is the login shown in the module under "Outgoing calls from FMC". + +### MCN trunk specifics +MCN trunks are typically limited to 1 simultaneous call by default. Increase this limit to match your scenarios. Examples: + +- Incoming routed to SIM: + - 1 line: customer ➜ PBX + - 1 line: PBX ➜ SIM + +- Outgoing from SIM via another provider: + - 1 line: SIM ➜ PBX + - 1 line: PBX ➜ external provider ➜ customer + +- Outgoing from SIM where customer sees the SIM number: + - 1 line: SIM ➜ PBX + - 1 line: PBX ➜ MCN trunk ➜ customer + +- Incoming to a public number fan-out to 3 MCN SIMs: + - 1 line: customer ➜ PBX + - 3 lines: PBX ➜ three SIM numbers + +### Help +- Developer chat: [@mikopbx_dev](https://t.me/joinchat/AAPn5xSqZIpQnNnCAa3bBw) + +Source: [MikoPBX docs — FMC devices (RU)](https://docs.mikopbx.com/mikopbx/modules/miko/podklyuchenie-fms-ustroistv) diff --git a/readme.ru.md b/readme.ru.md index 4d09390..12087aa 100644 --- a/readme.ru.md +++ b/readme.ru.md @@ -1,20 +1,77 @@ +## Подключение FMC устройств для MikoPBX -### Чтобы вызов прошел с номера sim карты, а не по основным маршрутам -``` -[outgoing-custom]; -exten => _.X!,1,NoOp(-- ${PJSIP_HEADER(read,User-Agent)} --) +Читайте на других языках: [English](README.md), [Русский](readme.ru.md) + +### Назначение +Модуль подключает FMC SIM‑карты к MikoPBX, эмулируя SIP‑телефон на учётной записи сотрудника. Поддерживаемый провайдер: MCN (FMC SIM). Все вызовы проходят через АТС, доступны запись и маршрутизация. + +- Платный модуль. Провайдер: MCN. + +Ссылка на руководство: [Документация MikoPBX — Подключение FMC устройств](https://docs.mikopbx.com/mikopbx/modules/miko/podklyuchenie-fms-ustroistv) + +### Преимущества +- Звонки через GSM — связь есть даже без интернета +- Запись всех разговоров на АТС +- Возможна интеграция с CRM +- Полный контроль звонков средствами АТС (IVR, маршрутизация) + +### Принцип работы +- SIM «регистрируется» на внутреннем номере сотрудника (например, `201`). +- Исходящий с SIM: в АТС видно, как вызов с внутреннего `201`. +- Входящий на `201`: вызов направляется на SIM сотрудника. + +### Требования +- Рабочая MikoPBX +- Реквизиты транка MCN (FMC SIM) +- В карточке сотрудника указан мобильный номер в формате `+7...` + +### Настройка +1) В карточке сотрудника укажите мобильный с кодом `+7` и во вкладке «Настройка маршрутизации» отключите переадресацию на мобильный. +2) Откройте «Подключение FMC устройств»: + - Колонка «Исходящие звонки»: для «Логин» и «Пароль» нажмите «Обновить». + - Колонка «Входящие звонки»: введите параметры подключения к транку MCN. + - Поле «Сотрудники»: выберите всех пользователей с FMC SIM. + - Поле «Провайдер FMC»: укажите MCN. +3) Сохраните. АТС выполнит регистрацию на транке MCN и на внутренних номерах сотрудников. + +### Кастомизация (необязательно) +По умолчанию исходящие с SIM идут по стандартным маршрутам. Чтобы клиент видел номер SIM, добавьте в конец `extensions.conf`: + +```conf +[outgoing-custom] +exten => _.X!,1,Set(FMC_ID=SIP-FMC-XXXXXX) + ; Номер SIM использовать только для внутренних номеров из SIP-FMC-ENABLE-OUT same => n,ExecIf($["${DIALPLAN_EXISTS(SIP-FMC-ENABLE-OUT,${CALLERID(num)},1)}" != "1"]?return) - ;same => n,ExecIf($["${PJSIP_HEADER(read,User-Agent)}" != "miko-b24-fmc" ]?return) - same => n,GosubIf($["${DIALPLAN_EXISTS(all-outgoing-SIP-FMC-Z5HGGORU-custom,${EXTEN},1)}" == "1"]?all-outgoing-SIP-FMC-Z5HGGORU-custom,${EXTEN},1) + ; При необходимости ограничить вызовами с SIM User-Agent + ;same => n,ExecIf($["${PJSIP_HEADER(read,User-Agent)}" != "miko-b24-fmc" ]?return) + same => n,GosubIf($["${DIALPLAN_EXISTS(all-outgoing-${FMC_ID}-custom,${EXTEN},1)}" == "1"]?all-outgoing-${FMC_ID}-custom,${EXTEN},1) same => n,return - + [SIP-FMC-ENABLE-OUT] exten => 201,1,NoOp(--- Out call ---) -exten => 906,1,NoOp(--- Out call ---) -exten => 908,1,NoOp(--- Out call ---) -exten => 914,1,NoOp(--- Out call ---) -exten => 903,1,NoOp(--- Out call ---) +exten => 202,1,NoOp(--- Out call ---) +``` +- `SIP-FMC-XXXXXX` — логин из колонки «Исходящие звонки с FMC». -``` - - "SIP-FMC-6AC9FJ0E" - идентификатор \ No newline at end of file +### Особенности транка MCN +По умолчанию «транк» MCN ограничен одним одновременным звонком. Рекомендуется увеличить лимит под ваши сценарии. + +Примеры: +- Входящий на АТС ➜ SIM: + - 1 линия: клиент ➜ MikoPBX + - 1 линия: MikoPBX ➜ номер SIM + +- Исходящий с SIM через другого провайдера: + - 1 линия: SIM ➜ MikoPBX + - 1 линия: MikoPBX ➜ сторонний провайдер ➜ клиент + +- Исходящий с SIM, клиент видит номер SIM: + - 1 линия: SIM ➜ MikoPBX + - 1 линия: MikoPBX ➜ транк MCN ➜ клиент + +- Входящий на публичный номер, распределяем на 3 SIM MCN: + - 1 линия: клиент ➜ MikoPBX + - 3 линии: MikoPBX ➜ три номера SIM + +Источник: [Документация MikoPBX — Подключение FMC устройств](https://docs.mikopbx.com/mikopbx/modules/miko/podklyuchenie-fms-ustroistv) \ No newline at end of file