Настройка GSM/VoIP шлюзов GoIP и OpenVox: SMS, USSD и звонки в Asterisk
- GSM-шлюз не регистрируется на Asterisk со статусом
UNREACHABLEили403 Forbidden. - Входящие звонки с SIM-карт не попадают в диалплан (ошибки
Call from trunk rejected: peer not found). - Зависание каналов (каналы остаются в статусе Busy при завершении разговора оператором сотовой связи).
- Необходимость автоматической отправки баланса через USSD-запросы в Telegram или на почту.
1. Сетевая топология подключения GSM-шлюза
GSM-шлюз (GoIP, OpenVox, Dinstar) преобразует сотовые радиоканалы 2G/3G/4G в SIP-протокол. Взаимодействие настраивается по схеме SIP Trunk (Peer-to-Peer без регистрации или с динамической регистрацией шлюза на PBX).
2. Настройка транка в /etc/asterisk/pjsip.conf
[gsm-gateway]
type=endpoint
context=from-gsm
disallow=all
allow=alaw
allow=ulaw
aors=gsm-gateway-aor
[gsm-gateway-aor]
type=aor
contact=sip:192.168.10.200:5060
[gsm-gateway-identify]
type=identify
endpoint=gsm-gateway
match=192.168.10.2003. Конфигурация веб-интерфейса шлюза (GoIP / OpenVox)
- SIP Configurations: Укажите Endpoint Type →
SIP Trunk; SIP Proxy →IP-адрес Asterisk (192.168.10.10); Port →5060. - Routing Configurations: Маршрут Call IN (GSM → SIP): перенаправлять все звонки на номер
7000. Маршрут Call OUT (SIP → GSM): принимать звонки с префиксом9.
4. Обработка входящих звонков и SMS в диалплане
[from-gsm]
; Входящие голосовые звонки с SIM-карт
exten => 7000,1,NoOp(=== Incoming Call from GSM SIM Slot: ${CALLERID(num)} ===)
same => n,Set(CALLERID(name)=GSM_${CALLERID(num)})
same => n,Dial(PJSIP/100&PJSIP/101,30,tT)
same => n,Hangup()
; Маршрут для отправки SMS через внутренний HTTP шлюз GoIP SMS Server
[sms-outbound]
exten => _X.,1,NoOp(=== Sending SMS to ${EXTEN} ===)
same => n,System(curl -u "admin:admin" "http://192.168.10.200/default/en_US/send.html?u=admin&p=admin&l=1&n=${EXTEN}&m=${URIENCODE(${SMS_TEXT})}")
same => n,Hangup()5. Скрипт автоматического опроса баланса SIM-карт через USSD
#!/usr/bin/env bash
# Отправка USSD команды проверки баланса *100# на порт 1 шлюза GoIP
GATEWAY_IP="192.168.10.200"
USSD_CODE="*100#"
# Отправка запроса по HTTP API
curl -s -u "admin:admin" "http://${GATEWAY_IP}/default/en_US/tools.html?type=ussd&line=1&smskey=1234&action=send&tel=${USSD_CODE}"
sleep 5
# Чтение ответа
RESPONSE=$(curl -s -u "admin:admin" "http://${GATEWAY_IP}/default/en_US/tools.html?type=ussd_info&line=1")
echo "Баланс SIM-карты: $RESPONSE" Частые вопросы (FAQ)
Почему после окончания разговора GSM-канал остается заблокированным (зависшим)?
Это происходит, если оператор сотовой связи не передает сигнал занятости (Busy Tone), либо частота тона отбоя на шлюзе отличается от стандарта. Настройте параметры CPT (Call Progress Tones) и включите опцию 'Disconnect Tone Detection' в веб-интерфейсе шлюза.
Как отправлять вызовы через определенную SIM-карту?
Настройте префиксы в диалплане Asterisk (например, 91 для Slot 1, 92 для Slot 2) и сопоставьте эти префиксы в правилах Call Out Routing на самом GSM-шлюзе.
Как бороться с блокировками SIM-карт со стороны сотовых операторов?
Используйте шлюзы с поддержкой смены IMEI (по регламенту), подключите SIM-сервер для автоматической ротации SIM-карт между слотами и установите лимиты на количество минут в сутки.
Можно ли принимать SMS сообщения прямо в Telegram-чат?
Да. Настройте на GSM-шлюзе отправку входящих SMS на локальный Webhook/HTTP URL (SMS Forwarding), который с помощью скрипта пересылает JSON-пакет в Telegram Bot API.