# Подключить FreePBX к МойСклад

Результат: при звонке сотрудник видит в МойСклад карточку звонка с контрагентом, звонок с длительностью и записью попадает в журнал звонков МойСклад, а незнакомые номера превращаются в контрагентов, заказы покупателя или задачи по вашим правилам.

> [!CAUTION] Перед началом
> 1. [Настройте AMI](/setup/freepbx/ami-setup/): пользователь `callbee`, порт 5038 открыт для [IP Callbee](/ip-addresses/)
> 2. [Опубликуйте записи](/setup/freepbx/recording-publish/), чтобы ссылка на запись разговора открывалась из МойСклад
> 3. Войдите в МойСклад под администратором: понадобятся разделы **«Решения»** и **«Настройки»**

МойСклад работает только с FreePBX и Asterisk, транки на **chan_sip** и **chan_pjsip** подходят оба. Yeastar S и P с МойСклад не подключаются.

## Что потребуется

| Что | Откуда |
|---|---|
| Администратор МойСклад | Включает телефонию и выпускает ключи от своего имени (шаги 1 и 2) |
| Внутренние номера сотрудников на FreePBX | Вписываются в МойСклад на шаге 1 |
| Публичный адрес FreePBX и пароль AMI-пользователя `callbee` | [Настройка AMI](/setup/freepbx/ami-setup/) |
| Ссылка на записи | [Публикация записей](/setup/freepbx/recording-publish/) |

## Шаг 1. Включите телефонию в МойСклад

1. В МойСклад откройте **Решения → Мои решения → МойСклад Phone API**. Если решения нет в списке, найдите его в **Каталоге решений**, раздел **«Телефония»**, и установите.
2. В поле **«Адрес провайдера телефонии»** вставьте `https://api.callbee.io/crm/moysklad`, именно с `https://`. На этот адрес МойСклад отправляет звонок по клику на номер.
3. Нажмите **«Создать новый ключ доступа»** и скопируйте значение **«Ключ доступа»**. Это ключ Phone API для шага 3.
4. В блоке **«Внутренние номера»** впишите напротив каждого сотрудника, который работает со звонками, его внутренний номер на FreePBX, например `300`. По этому номеру МойСклад решает, кому показать карточку звонка, а Callbee при создании интеграции берёт отсюда внутренние номера сотрудников.
5. Отметьте **«Установлено»** и нажмите **«Сохранить»**.

![Окно «МойСклад Phone API»: адрес провайдера, ключ доступа, внутренние номера, флажок «Установлено»](../img/ms-phone-api-window.png)

> [!WARNING] Один сервис телефонии на аккаунт
> В аккаунте МойСклад одновременно подключается только один сервис телефонии. Если раньше была подключена другая телефония, после замены адреса в поле **«Адрес провайдера телефонии»** она отключится от МойСклад.

## Шаг 2. Создайте токен JSON API

Через JSON API Callbee ищет и создаёт контрагентов, создаёт заказы и задачи и загружает справочники: сотрудников, юрлица, статусы заказов.

1. Войдите в МойСклад под администратором, откройте меню пользователя (имя справа вверху) → **«Настройки»**.
2. Слева выберите **Обмен данными → Токены** и нажмите **«+ Токен»**.
3. Скопируйте токен: он понадобится на шаге 3.

![Раздел «Обмен данными → Токены» в настройках МойСклад](../img/ms-json-api-tokens.png)

> [!CAUTION] Новый токен отзывает прежний
> Новый токен отзывает предыдущий токен этого пользователя. Если токен этого пользователя уже использует другой сервис, после создания нового тот сервис перестанет работать. В таком случае выпустите токен от имени другого администратора.

## Шаг 3. CRM & PBX

В [my.callbee.io](https://my.callbee.io) откройте **Интеграции** и нажмите **«Создать»**.

![Шаг 1 мастера для МойСклад: выбор CRM, ключ Phone API, ключ JSON API, PBX](../img/ms-mycallbee-step1.png)

| Поле | Значение |
|---|---|
| **Выбор CRM** | `MOYSKLAD` |
| **Ключ Phone API** | ключ доступа из шага 1 |
| **Ключ JSON API** | токен из шага 2 |
| **PBX** | `ASTERISK` |

Адрес аккаунта вводить не нужно: Callbee определяет аккаунт МойСклад по ключу JSON API. Подсказка **«Подключение МойСклад»** в мастере повторяет шаги 1 и 2, а кнопка **«Копировать»** копирует адрес `https://api.callbee.io/crm/moysklad`.

Нажмите **«Продолжить»**.

## Шаг 4. AMI

![Шаг 2 мастера: AMI сервер, имя пользователя callbee, пароль](../img/ms-mycallbee-step2.png)

| Поле | Значение |
|---|---|
| **AMI сервер** | публичный адрес FreePBX и порт через двоеточие: `pbx.company.by:5038` |
| **AMI имя пользователя** | `callbee` — имя секции в `manager_custom.conf` |
| **AMI пароль** | пароль из той же секции, без пробелов в начале и конце |

Все три поля обязательны: без имени пользователя или пароля мастер покажет под полем `Username is a required field` или `Secret is a required field` и дальше не пустит.

Нажмите **«Продолжить»**.

## Шаг 5. Asterisk

![Шаг 3 мастера: ссылка на запись разговора, игнорировать линии](../img/ms-mycallbee-step3.png)

| Поле | Значение |
|---|---|
| **Ссылка на запись разговора** | адрес, по которому папка записей FreePBX открывается из интернета, например `https://recs.company.by/`; адрес с `/monitor` или `/monitor/` на конце тоже подойдёт |
| **Игнорировать линии (DID)** | городские номера, звонки на которые не нужно передавать в МойСклад, через пробел. Обычно пусто |

Запись передаётся в МойСклад **ссылкой**, файл остаётся на АТС, поэтому адрес должен открываться из интернета. Рекомендуем **HTTPS** с действующим сертификатом: МойСклад открыт по HTTPS, и запись по `http://` браузер может не проиграть. Как строится ссылка — [Звонки в МойСклад](/config/moysklad/), раздел «Записи разговоров».

Поле можно оставить пустым и заполнить позже на вкладке **«Инфо»** (шаг 8). Пока оно пустое, ссылки на записи ведут на `https://norecordsurl.local/` и не открываются, а в **«Логах»** интеграции при запуске появляется `NO RECORD URL`.

Нажмите **«Продолжить»**.

## Шаг 6. Все линии (DID)

![Шаг 4 мастера: режим при исходящем вызове и режим входящих линий](../img/ms-mycallbee-step4.png)

Что создавать в МойСклад, если номер, с которого звонят или на который звонит сотрудник, в МойСклад не найден.

| Поле | Значения |
|---|---|
| **Режим при исходящем вызове** | **Ничего**, **Контрагент**, **Контрагент + Заказ** |
| **Входящие линии** | **Ничего**, **Задача**, **Контрагент**, **Контрагент + Заказ** — для всех городских номеров, у которых нет своей линии |

По умолчанию в обоих полях стоит **«Контрагент»**. Что делает каждый режим — [Звонки в МойСклад](/config/moysklad/). Юрлицо и статус заказа мастер не спрашивает, а ответственного за линию ставит сам: проверьте и при необходимости смените их после создания (шаг 10).

Нажмите **«Продолжить»**.

## Шаг 7. Регион

![Шаг 5 мастера: регион и часовой пояс, кнопка «Создать»](../img/ms-mycallbee-step5.png)

| Поле | Значение |
|---|---|
| **Регион** | код региона, где развёрнут ваш сервис Callbee: `BY` — Беларусь, `RU` — Россия, `DE` — Финляндия и остальная Европа |
| **Часовой пояс** | пояс офиса, например `Europe/Minsk`; по умолчанию подставляется пояс вашего браузера |

В этом поясе Callbee пишет время звонка в МойСклад и в комментарий заказа, по нему же работают расписания умной маршрутизации.

Нажмите **«Создать»**. Интеграция создаётся с пробной лицензией `TRIAL` на 14 дней и сразу получает статус `ACTIVE`.

---

## Шаг 8. Проверьте карточку интеграции

Новая интеграция появится в разделе **«Интеграции»**: `MOYSKLAD / ASTERISK`, название аккаунта МойСклад, лицензия и число пользователей.

![Список «Интеграции» с интеграцией МойСклад](../img/ms-integrations-list.png)

Чтобы открыть карточку, нажмите на **ID интеграции** или на кнопку настроек справа в строке. В карточке слева — состояние интеграции, кнопки запуска, перезапуска и остановки, **«ID интеграции»**, **«Аккаунт МойСклад»**, версия, регион и лицензия. Справа вкладки **«Инфо»**, **«Линии»**, **«Пользователи»**, **«Лицензия»**, **«Логи»**.

![Вкладка «Инфо» интеграции МойСклад: журнал звонков, настройка AMI, настройки, регион](../img/ms-card-info.png)

На вкладке **«Инфо»** четыре блока, у каждого кнопка **«Редактировать»**:

| Блок | Что в нём |
|---|---|
| **Журнал звонков** | подключён ли журнал звонков кабинета (пункт меню **«Журнал звонков»**). Журнал наполняет отдельный сервис на АТС, он ставится командой из этого блока; до этого блок показывает «не активен». На звонки в МойСклад журнал не влияет. Имена клиентов из МойСклад в журнал кабинета не подставляются |
| **Настройка AMI** | **Сервер**, **Имя пользователя**, **Пароль** — из шага 4 |
| **Настройки** | **Аккаунт МойСклад**, **Ключ Phone API**, **Ключ JSON API**, **Управление пользователями МойСклад**, **Ссылка на запись разговора**, **Игнорировать линии (DID)** |
| **Регион** | **Регион**, **Часовой пояс** — из шага 7 |

![Форма «Редактировать настройки»: ключи МойСклад, переключатель «Управление пользователями МойСклад», ссылка на запись](../img/ms-card-settings-edit.png)

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

## Шаг 9. Включите сотрудников

Список сотрудников и их внутренние номера Callbee берёт из МойСклад: при создании интеграции и по кнопке **«Синхронизация»** на вкладке **«Пользователи»**. Сам список не обновляется: если вы добавили сотрудника или поменяли внутренний номер в МойСклад, нажмите **«Синхронизация»**.

Кто участвует в звонках, решает переключатель **«Управление пользователями МойСклад»** на вкладке **«Инфо»**, блок **«Настройки»**:

| Переключатель | Кто участвует в звонках | Что видно на вкладке «Пользователи» |
|---|---|---|
| **OFF** (по умолчанию) | все сотрудники из списка с внутренним номером, в пределах лицензии. Умная маршрутизация, AA и MR не работают | **ID пользователя** и **Номер**, без настроек |
| **ON** | только сотрудники с флажком **«Активный»**. Новый сотрудник выключен, пока вы его не отметите | **Активный**, **ID пользователя**, **Номер**, **Умная маршрутизация**, **AA**, **MR**, **Редактировать** |

![Вкладка «Пользователи» при выключенном управлении пользователями](../img/ms-card-users-off.png)

> [!WARNING] После включения ON все выходят из звонков
> Сразу после включения **«Управления пользователями МойСклад»** ни один сотрудник не отмечен **«Активный»**: счётчик **«Активные пользователи»** падает до 0, и карточки звонков перестают приходить всем, пока вы не отметите каждого. На работающей интеграции включайте режим, когда готовы сразу отметить сотрудников.

Чтобы настроить сотрудников по одному, включите **«Управление пользователями МойСклад»** (**«Редактировать»** в блоке **«Настройки»** → переключатель → **«Сохранить»**) и откройте вкладку **«Пользователи»**:

1. У сотрудника нажмите **«Редактировать»** в конце строки.
2. Отметьте **«Активный»**.
3. Проверьте **«Номер»**: он должен совпадать с внутренним номером сотрудника в МойСклад (шаг 1) и на FreePBX. Иначе карточка звонка уйдёт не тому сотруднику или никому.
4. Для умной маршрутизации отметьте **«Умная маршрутизация»** и нажмите кнопку расписания рядом: по умолчанию пн–пт 09:00–18:00, суббота и воскресенье выключены.
5. При необходимости отметьте **AA** (автоответ: при звонке по клику телефон сотрудника снимет трубку сам) или **MR** (номер зарегистрирован на нескольких устройствах: при звонке по клику вызов пойдёт на все). Если отмечены оба, действует MR, автоответа нет.
6. Сохраните строку.

![Вкладка «Пользователи» при включённом управлении пользователями: активный, номер, умная маршрутизация, AA, MR](../img/ms-card-users-on.png)

![Окно «Время умной маршрутизации»: дни недели и часы](../img/ms-card-user-schedule.png)

Активных сотрудников может быть не больше, чем лицензий: счётчики **«Всего лицензий»** и **«Активные пользователи»** — в левой части карточки.

## Шаг 10. Настройте линии

Откройте вкладку **«Линии»**.

![Вкладка «Линии»: исходящие звонки и входящие линии](../img/ms-card-lines.png)

**Исходящие звонки.** Нажмите **«Редактировать»**, выберите **«Режим при исходящем вызове»** и сохраните. В режиме **«Контрагент + Заказ»** появляется **«Статус заказа»**, а если в МойСклад несколько юрлиц — ещё и **«Юрлицо»**.

**Входящие линии.** Строка **All lines** действует на все городские номера, у которых нет своей линии. Мастер создаёт её сам и сам ставит ответственного: проверьте его и при необходимости смените. Нажмите **«Редактировать»** в её строке и проверьте поля. Чтобы задать правила для отдельного номера, нажмите **«Добавить линию»**.

![Окно «Добавить линию (DID)»](../img/ms-card-add-line.png)

| Поле | Что делает |
|---|---|
| **Линия (DID)** | городской номер, как его передаёт FreePBX |
| **Описание** | подпись для себя |
| **Пользователь** (ответственный за пропущенные) | ведёт созданного контрагента и заказ, получает задачи |
| **Входящие линии** | что создать при входящем с номера, которого нет в МойСклад: **Ничего**, **Задача**, **Контрагент**, **Контрагент + Заказ** |
| **Юрлицо**, **Статус заказа** | на какое юрлицо и в каком статусе создаётся заказ в режиме **«Контрагент + Заказ»**; **«По умолчанию»** — первый статус заказа в МойСклад |
| **Задача по пропущенному** | задача ответственному по каждому пропущенному входящему, в любом режиме |
| **Умная маршрутизация**, **УМ по времени** | перевод входящего от известного контрагента на его владельца в МойСклад, в указанные часы; у сотрудника умная маршрутизация тоже должна быть включена (шаг 9) |

Списки юрлиц, статусов и сотрудников Callbee берёт из МойСклад при создании интеграции. Если вы добавили их в МойСклад позже, нажмите **«Синхронизация»** на вкладке **«Линии»**.

Сотрудники в списке **«Пользователь»** и на вкладке **«Пользователи»** показаны началом их ID в МойСклад, имена кабинет не хранит. Чтобы понять, кто есть кто, сверьте ID с колонкой **«Номер»** на вкладке **«Пользователи»**.

> [!NOTE] Несколько юрлиц
> Если в МойСклад больше одного юрлица и в линии оно не выбрано, заказ не создаётся, а контрагент остаётся.

## Проверка

Интеграция должна быть со статусом `ACTIVE`. Откройте вкладку **«Логи»**: после запуска в ней появляются строки `+++ integration start +++ employees: N`, `employees | … | count N`, где N — число сотрудников в звонках, и `AMI connected -> <адрес>, handler is ready`.

1. Позвоните с мобильного, которого нет в МойСклад, на городской номер компании. У сотрудника, чей внутренний номер звонит, в МойСклад появится карточка звонка.
2. Ответьте, поговорите несколько секунд и положите трубку. В журнале звонков МойСклад появится звонок с длительностью и ссылкой на запись. По режиму линии появятся контрагент `auto <номер>`, заказ или задача. Журнал звонков МойСклад — **CRM → Звонки**: время, тип, номер, контрагент, сотрудник, длительность разговора, комментарий и ссылка на запись. Нажмите **«Запись»** в строке звонка: запись должна открыться и проиграться.
3. Позвоните с другого мобильного и не отвечайте. В журнале появится пропущенный звонок с комментарием `Пропущенный вызов, линия <городской номер>`, а при включённой **«Задаче по пропущенному»** ответственный линии получит задачу `Пропущенный звонок с <номер> на <городской номер>`.
4. Нажмите на номер контрагента в МойСклад. Сначала зазвонит внутренний телефон сотрудника, после ответа АТС наберёт клиента. Если сотрудник не ответил за 12 секунд, звонок отменяется. Пока АТС соединяет, МойСклад показывает окно **«Исходящий звонок»** с контрагентом и номером.

## Если что-то не работает

| Симптом или строка в «Логах» | Причина и что делать |
|---|---|
| `LICENSE NOT VALID` | Лицензия не активна, интеграция остановлена. Проверьте вкладку **«Лицензия»** |
| `moysklad keys check failed (phone_token / json_api_token), stop` | МойСклад не принял ключ Phone API или токен JSON API. Выпустите их заново (шаги 1 и 2), вставьте в блоке **«Настройки»** на вкладке **«Инфо»** и перезапустите интеграцию |
| `moysklad is unavailable (…), stop` | МойСклад не ответил после трёх попыток при запуске. Интеграция перезапустится сама; если строка повторяется, проверьте, открывается ли МойСклад |
| `AMI authentication failed` | Неверное имя или пароль AMI. [Настройка AMI](/setup/freepbx/ami-setup/) |
| `Connection failed (<адрес>, 5038)…` | Порт 5038 закрыт для Callbee. [IP-адреса](/ip-addresses/) |
| Карточка не появляется у сотрудника | Включено **«Управление пользователями МойСклад»**, а сотрудник не отмечен **«Активный»**; его номер в кабинете не совпадает с внутренним номером в МойСклад; один внутренний номер записан у двух сотрудников — карточку получает только первый; городской номер в **«Игнорировать линии (DID)»** |
| Умная маршрутизация не переводит | У контрагента нет владельца в МойСклад, или владелец не участвует в звонках (без номера, сверх лицензии, не отмечен **«Активный»**); выключено **«Управление пользователями МойСклад»**; у владельца не отмечена умная маршрутизация или сейчас вне его расписания; у линии не отмечена **«Умная маршрутизация»** или сейчас вне её часов |
| `NO RECORD URL` | Не заполнена **«Ссылка на запись разговора»** в блоке **«Настройки»** |
| `link record not found` | FreePBX не записал этот разговор. Проверьте, что запись разговоров на АТС включена  |
| Ссылка **«Запись»** в **CRM → Звонки** не открывается или не играет | Адрес записей не открывается из интернета или опубликован по `http://`. [Публикация записей](/setup/freepbx/recording-publish/), рекомендуем HTTPS |
| `organization is not set and account has N organizations, order not created` | Выберите **«Юрлицо»** в линии или в исходящих звонках |
| `no responsible user, task not created` | Выберите **«Пользователя»** в линии |
| `line "0" is missing in settings, …` | Нет линии **All lines**: добавьте её на вкладке **«Линии»**  |
| `license maxusers=N, dropped extensions: […]` | Сотрудников больше, чем лицензий: перечисленные внутренние номера в звонках не участвуют. Увеличьте лицензию или выключите лишних сотрудников |
| `tz error '<имя>', fallback to Europe/Minsk` | Неизвестный часовой пояс: исправьте его в блоке **«Регион»** на вкладке **«Инфо»** |
| `ami settings and moysklad keys changed, restart the integration to apply them` | Вы изменили AMI или ключи МойСклад: перезапустите интеграцию |
| `click to call error - … not found in extension list` | Сотрудник не участвует в звонках на вкладке **«Пользователи»** |
| `click to call error - … has no internal number` | У сотрудника пустой **«Номер»** на вкладке **«Пользователи»** |
| `click to call <номер> status 1 / InUse` | Внутренний номер сотрудника занят |
| Клик по номеру в МойСклад: окно **«Исходящий звонок»** висит на «Соединение…», телефон сотрудника не звонит | Проверьте **«Адрес провайдера телефонии»** в окне **«МойСклад Phone API»**: должно быть `https://api.callbee.io/crm/moysklad` (шаг 1) |

Другие случаи: [Решение проблем](/troubleshooting/).

> [!SUCCESS] Готово
> Интеграция FreePBX + МойСклад работает: сотрудники видят карточку звонка, звонки с записями попадают в журнал МойСклад, а незнакомые номера обрабатываются по правилам линий.
