# Звонки через 3G модем Huawei E173 (chan\_dongle)

Huawei E173 — это USB 3G-модем от компании Huawei, который совместим с модулем **chan\_dongle** для Asterisk. Используя этот модем с chan\_dongle, вы можете настроить Asterisk для совершения голосовых звонков и отправки SMS через GSM-сеть, превратив модем в полноценный GSM-шлюз.

{% hint style="warning" %}
Dongle модемы работают не стабильно. Им необходимо надежное, стабильное питание и устойчивый GSM сигнал.
{% endhint %}

## Подготовка USB модема <a href="#podgotovka_usb_modema" id="podgotovka_usb_modema"></a>

1. Первым делом посмотрим какие USB устройства подключены к ПК:

```php
lsusb
Bus 001 Device 002: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
```

Тут нам интересно устройство «**12d1:1001** Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem».

* **12d1** - это идентификатор вендора.
* **1001** - идентификатор продукта.

Для корректной работы модема его необходимо перевести в режим «**1001** (только модем)».

2. Далее ищем информацию об устройстве по идентификатору вендора «**12d1**»:

```
dmesg | grep 12d1
[    2.828272] usb 1-1: New USB device found, idVendor=12d1, idProduct=1001, bcdDevice= 0.00
```

3. Далее ищем информацию по номеру USB устройства «**usb 1-1**»:

```php
dmesg | grep 'usb 1-1'

[    2.262750] usb 1-1: new high-speed USB device number 2 using ehci-pci
[    2.828272] usb 1-1: New USB device found, idVendor=12d1, idProduct=1001, bcdDevice= 0.00
[    2.828479] usb 1-1: New USB device strings: Mfr=3, Product=2, SerialNumber=0
[    2.828641] usb 1-1: Product: HUAWEI Mobile
[    2.828754] usb 1-1: Manufacturer: HUAWEI Technology
[    2.856994] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
[    2.861194] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[    2.864265] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
```

Теперь нам известны идентификаторы серийных устройств модема **ttyUSB0, ttyUSB1, ttyUSB2**.

{% hint style="info" %}
Если устройства найдены, то пол дела сделано. Если же они не появились, то вероятно модем подключен в режиме, отличном от **1001**, цифровой идентификатор режима может отличаться на разных прошивках.

На некоторых устройствах режим «Только модем» отображается как «**140c**»
{% endhint %}

## Проверка настроек модема <a href="#proverka_nastroek_modema" id="proverka_nastroek_modema"></a>

```
minicom -D /dev/ttyUSB0
```

Появится приглашение:

```
Welcome to minicom 2.8

OPTIONS: I18n                                                                
Compiled on Apr 26 2021, 18:06:16.                                           
Port /dev/ttyUSB0, 12:30:42                                                  
                                                                             
Press CTRL-A Z for help on special keys   
```

Теперь можно вводить команды **AT** для управления и настройки модема.

### Примеры команд <a href="#primery_komand" id="primery_komand"></a>

* **AT^CARDLOCK?** – проверка состояния блокировки модема и количества попыток ввода кода разблокировки:(ответ модема: CARDLOCK: A,B,0 , если A=2 модем разблокирован, A=1 модем заблокирован – SimLock, если A=3 здесь два варианта либо вы израсходовали все 10 попыток ввести код, либо у вас в модеме кастомизированная прошивка, B – количество оставшихся попыток ввода кода разблокировки (по умолчанию 10 раз))
* **AT^CARDLOCK=«NCK Code»** разблокировка модема, для возможности работы со всеми операторами связи
* **AT^CVOICE=?** – проверка состояния голосовых функций модема (0 - значит включено)
* **AT^CVOICE=0** – включение голосовых функций модема
* **AT^U2DIAG=0** - включение режима «**Только модем**»

### Что проверяем? <a href="#chto_proverjaem" id="chto_proverjaem"></a>

1. Убедитесь, что модем поддерживает голосовые функции
2. Модем должен работать в режиме «**Только модем**»
3. По возможности (при наличии кода) разблокируйте модем для возможности работы с любым оператором связи

## chan\_dongle Asterisk <a href="#chan_dongle_asterisk" id="chan_dongle_asterisk"></a>

1. В web интерфейсе АТС переходим в web интерфейсе «**Система**» - «**Кастомизация системных файлов**»
2. Открываем файл «**/etc/asterisk/modules.conf**»
3. Выбираем режим «**Добавлять в конец файла**»
4. Добавляем код

   ```
   load => chan_dongle.so
   ```
5. Открываем на редактирование файл «**/etc/asterisk/dongle.conf**»
6. Выбираем действие «Заменять полностью»
7. Копируем конфигурацию

   ```
   [general]
   interval=15

   [defaults]
   context=public-direct-dial
   group=0
   rxgain=0
   txgain=0
   autodeletesms=yes
   resetdongle=yes
   u2diag=-1	
   usecallingpres=yes
   callingpres=allowed_passed_screen
   disablesms=no

   language=en	
   smsaspdu=yes	
   mindtmfgap=45
   mindtmfduration=80
   mindtmfinterval=200

   callwaiting=auto
   disable=no
   initstate=start
   dtmf=relax

   [dongle0]
   audio=/dev/ttyUSB1
   data=/dev/ttyUSB2
   ```
8. Открываем на редактирование файл «**/etc/asterisk/modules.conf**»
9. Выбираем режим «**Добавлять в конец файла**»
10. Обязательно добавьте контексты для обработки sms и ussd

    ```
    [dongle-incoming-ussd]
    exten => ussd,1,Noop(Incoming USSD: ${BASE64DECODE(${USSDBASE64})})
    exten => ussd,n,Hangup()

    [dongle-incoming-sms]
    exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
    exten => sms,n,Hangup()
    ```
11. После настройки «**dongle.conf**» потребуется перезагрузить АТС

{% hint style="info" %}
Полезные ресурсы:

* Описание конфигурационного файла и опций можно получить на [странице](https://github.com/haha8x/asterisk-chan-dongle-16/blob/master/etc/dongle.conf).
* Более подробное [описание chan\_dongle](https://asterisk-service.com/en_US/page/chan-dongle-use).
  {% endhint %}

{% hint style="warning" %}
**dongle0** - произвольное имя линии, в дальнейшем будет использоваться в Dial команде для исходящих звонков.\
**audio**, **data** - значения этих параметров - адреса серийных устройств, определенных на предыдущем этапе. Верные значения придется определить экспериментально. Если не будет звука, то поменять местами.
{% endhint %}

## Настройка DID <a href="#nastrojka_did" id="nastrojka_did"></a>

Для корректной обработки входящих звонков какдому dongle необходимо настроить DID номер.

1. Запускаем консоль asterisk:

   ```
   asterisk -r
   ```
2. Смотрим список модемов

   ```
   mikopbx*CLI> dongle show devices
   ID      Group State RSSI Model Firmware         IMEI IMSI Number        
   dongle0 0     Free  12   E173  11.126.15.00.209 ***  ***  79255283744 
   ```
3. Если в колонке «Number» номер не указан, то необходимо выполнить команды

   ```
   dongle cmd dongle0 AT+CPBS=\"ON\"
   dongle cmd dongle0 AT+CPBW=1,\"79255283744\",145
   ```

{% hint style="warning" %}
Вместо «**dongle0**» укажите идентификатор своей линии\
Вместо «**79255283744**» номер телефона sim карты.
{% endhint %}

Перезагрузите АТС.

## Настройка входящего маршрута <a href="#nastrojka_vxodjaschego_marshruta" id="nastrojka_vxodjaschego_marshruta"></a>

1. В web перейлите в раздел «**Маршрутизация**» -> «**Входящие маршруты**»
2. Опишите новый маршрут, в поле DID укажите номер sim карты, настроенный на предыдущем этапе:

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FTlLFW2q6LQwF84BUuWyq%2FdidNumber.png?alt=media&#x26;token=20ff5b45-f457-47cf-b7a9-407ee3d7afbf" alt=""><figcaption><p>did номер</p></figcaption></figure>

## Настройка исходящих маршрутов <a href="#isxodjaschie" id="isxodjaschie"></a>

1. В разделе «**Маршрутизация**» - «**Провайдеры**» добавьте новую учетную запись **SIP со следующими параметрами:**

* "**Название"** - «Dongle0» (может быть произвольным)
* **"Хост или IP адрес"** - укажите **127.0.0.1**
* "**Тип учетной записи"** - Аутентификация по IP адресу, без пароля

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FiboNcDZc1rCJxysFYAZk%2FnewSipProvider2.png?alt=media&#x26;token=e25848c2-a23a-4f1d-bba6-a7f24f812c4c" alt=""><figcaption><p>Параметры провайдера</p></figcaption></figure>

2. Из адресной строки браузера скопируйте **ID** провайдера, он будет иметь вид **SIP-TRUNK-ECBE1168**

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FggB3t2n5FpvkygiUovPO%2FProviderID.png?alt=media&#x26;token=60485c34-fca6-493e-bf9e-d50d0a70ad73" alt=""><figcaption><p>ID провайдера</p></figcaption></figure>

3. В разделе «**Маршуртизация**» - «**Исходящие маршруты**» создайте новый маршрут со следующими параметрами:

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2Ftfsszg0IJWQDEzHyXjaV%2FoutgoingParameters.png?alt=media&#x26;token=7f627995-1fcc-4e71-ab1a-5aec3c79ce59" alt=""><figcaption><p>Параметры для нового правила обработки исходящих вызовов</p></figcaption></figure>

4. Перейдите в раздел "Система" -> "Кастомизация системных файлов". Откройте для редактирования файл "**/etc/asterisk/extensions.conf".** Выберите режим **"Добавлять в конец файла"** и вставьте следующий код:

```
[SIP-TRUNK-ECBE1168-outgoing-custom]
exten => _[0-9*#+]!,1,Set(DIAL_COMMAND=Dongle/dongle0/${number})
	same => n,return
```

{% hint style="info" %}
Замените SIP-TRUNK-ECBE1168 и dongle на ваши значения соответственно.
{% endhint %}

<figure><img src="https://3704471835-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPK4TuzRBnP7rt8htho-887967055%2Fuploads%2FNmuyfe4DIFnfdNTmJ9fp%2FCodeInExtensionsConf.png?alt=media&#x26;token=017c1b32-3750-459d-97f9-3a2e59945c39" alt=""><figcaption><p>Код для файла extensions.conf</p></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mikopbx.com/mikopbx/faq/voip-gateways/calls-through-huawei-e173.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
