Не уверен, что мой вопрос так уж глуп, но на всякий случай спрошу тут :)
Есть у меня GSM шлюз OpenVox, в нём есть 4 gsm канала и айпи. Ещё в эпоху когда он не умел IAX2 я создал там 4 SIP логина (ks1, mts, life, ks2 - по названиям используемых операторов), с которыми подключаюсь к шлюзу по IP сервером с астериском. С исходящими звонками проблем нет, но при любом входящем звонке получается, что все звонки на сервер приходят по одной SIP линии - ks1 - первой по счету. Т.е. получается что на сервере я не могу идентифицировать на какую именно карточку пришел звонок.
И меня это не особо напрягало, но на днях мы подключили облачную атс от укртелекома и там ситуация повторяется: у меня есть 4 логина, я ими подключаюсь, но на какой бы номер я не звонил, сервер всегда думает что пришел звонок по первой линии. Вот тут уже неудобно, т.к. некоторые линии должны напрямую пробрасываться в определённые отделы.
Вот конфиг УТ (для шлюза конфиг аналогичный)
Содержимое sip.conf:
[general]
limitonpeer=yes
context=incoming_fxo
language=ru
allowguest=no ;do not allow anonymous calls
alwaysauthreject=yes ;do not say whether wrong password or username
nat=force_rport,comedia
register => 61********245:pass1@cloud-pbx.ukrtelecom.ua ;49***1
register => 61********247:pass2@cloud-pbx.ukrtelecom.ua ;49***2
register => 61********251:pass3@cloud-pbx.ukrtelecom.ua ;49***4
register => 61********253:pass4@cloud-pbx.ukrtelecom.ua ;49***5
[UT](!)
type=friend
host=cloud-pbx.ukrtelecom.ua
dtmfmode=rfc2833
disallow=all
allow=gsm
allow=ulaw
insecure=invite
canreinvite=no
;49***1
[619*******245](UT)
fromuser=619*******245
secret=pass1
;49***2
[619*******247](UT)
fromuser=619*******247
secret=pass2
;49***4
[619*******251](UT)
fromuser=619*******251
secret=pass3
;49***5
[619*******253](UT)
fromuser=619*******253
secret=pass4
УТ линии идентичны в настройках.
Правда с УТ линиями есть ещё одна беда. При попытке сделать исходящий звонок (*81 - это код экстеншна для тестов, 448000 - это собственно номер куда я звоню), мне выдаёт вот такую ошибку:
-- Executing [*81448000@internal:1] Dial("SIP/user2-00001776", "SIP/61********245/448000") in new stack
-- Called SIP/61********245/448000
[Sep 12 13:22:40] WARNING[100458][C-00004eee]: chan_sip.c:23335 handle_response_invite: Received response: "Forbidden" from '"user2" <sip:61********245@server_ip>;tag=as0ea7faea'
== Everyone is busy/congested at this time (1:0/0/1)
-- Executing [*81448000@internal:2] Congestion("SIP/user2-00001776", "") in new stack
== Spawn extension (internal, *81448000, 2) exited non-zero on 'SIP/user2-00001776'
Если настроить линии на X-Lite, то как входящие, так и исходящие звонки отлично работают.
Может ли кто подсказать в какую сторону копать по этим двум вопросам?
# asterisk -V
Asterisk 13.6.0
Мда уж, вопрос был действительно глупым, странно что так никто и не ответил :)
Собственно, разделение входящих каналов стало возможным благодаря изменению регистрации в sip.conf следующим образом:
register => 61********245:pass1@cloud-pbx.ukrtelecom.ua/49***1
register => 61********247:pass2@cloud-pbx.ukrtelecom.ua/49***2
register => 61********251:pass3@cloud-pbx.ukrtelecom.ua/49***4
register => 61********253:pass4@cloud-pbx.ukrtelecom.ua/49***5
Ну а потом обработка входящих не в диалплане s, а в диалплане с конкретным номером, типа
exten => 49****1,1,Dial(SIP/support)
exten => 49****2,1,Dial(SIP/buh)
А вопрос с исходящими всё ещё открыт. Если кто знает в чем может быть проблема - пишите
Километровый, но таки пример. Там еще определяется можно ли звонить на сотовые с внутреннего номера и нужный ОПСОС
В диалплане макрос:
macro calling-mobile (calling,called) {
switch (${calling}) {
case 777:
Set(permissions=ALLOW);
break;
case 104:
Set(permissions=ALLOW);
break;
case 105:
Set(permissions=ALLOW);
break;
case 106:
Set(permissions=ALLOW);
break;
case 107:
Set(permissions=ALLOW);
break;
case 109:
Set(permissions=ALLOW);
break;
case 110:
Set(permissions=ALLOW);
break;
default:
Set(permissions=DENY);
break;
}
if ("${permissions}"="ALLOW") {
Set(OPSOS=OTHER);
Agi(opsos_selector.py,${called:1:3});
NoOP(### OPSOS = ${OPSOS} ###);
switch (${OPSOS}) {
case OTHER:
NoOP(### OPSOS ### switch to OTHER ###);
Set(dialprefix=10);
break;
case MEGAFON:
NoOP(### OPSOS ### switch to MEGAFON ###);
Set(dialprefix=11);
break;
case BEELINE:
NoOP(### OPSOS ### switch to BEELINE ###);
Set(dialprefix=12);
break;
case MTS:
NoOP(### OPSOS ### switch to MTS ###);
Set(dialprefix=13);
break;
default:
NoOP(### OPSOS ### switch to default-OTHER ###);
Set(dialprefix=10);
break;
}
Dial(SIP/${dialprefix}${called}@neogate,,r);
if (${dialprefix}>10) {
Set(SIPcause=${MASTER_CHANNEL(HASH(SIP_CAUSE,${CDR(dstchannel)}))});
Set(SIPcode=${CUT(SIPcause," ",2)});
NoOp(### SIPcode = ${SIPcode} ###);
if (${SIPcode} = 486) {
NoOp(### OPSOS ${OPSOS} IS BUSY NOW, TRY TO USE OTHER(MEGAFON2) ###);
Set(dialprefix=10);
Dial(SIP/${dialprefix}${called}@neogate,,r);
Hangup();
}
}
Hangup();
} else
NoOP(### CALL WAS DENIED, BECAUSE CALLING NUMBER IS NOT ALLOWED TO CALL MOBILE PHONES ###);
HangUP();
};
потом сами эестеншены
_[78]9XXXXXXXXX => {
&recording(${CALLERID(num)},${EXTEN});
&calling-mobile(${CALLERID(number)},${EXTEN});
};
_9XXXXXXXXX => {
&recording(${CALLERID(num)},${EXTEN});
&calling-mobile(${CALLERID(number)},${EXTEN});
};
ну и скрипт для определения ОПСОСа
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
def agi_command(cmd):
print cmd
sys.stdout.flush()
return sys.stdin.readline().strip()
tele2 = ['900', '902', '904', '908', '950', '951', '952', '953']
mts = ['910', '911', '912', '913', '914', '915', '916', '917', '918', '919', '987', '981', '982', '983', '984', '985', '986', '987', '988', '989']
megafon = ['920', '921', '922', '923', '924', '925', '926', '927', '928', '929', '930', '931', '932', '933', '934', '936', '938']
beeline= ['903', '905', '906', '909', '960', '961', '962', '963', '964', '965', '967']
if sys.argv[1] in mts:
response = agi_command("EXEC Set OPSOS=MTS")
elif sys.argv[1] in megafon:
response = agi_command("EXEC Set OPSOS=MEGAFON")
elif sys.argv[1] in beeline:
response = agi_command("EXEC Set OPSOS=BEELINE")
else:
response = agi_command("EXEC Set OPSOS=OTHER")
sys.exit(0)
Всё попробовал, ничего не поменялось.
Не пробовал только "fromdomain=cloud-pbx.ukrtelecom.ua". Насколько я понимаю, сюда надо записывать не cloud-pbx.ukrtelecom.ua, а мой домен. Но ведь при использовании софтфонов не надо указывать никакие домены...
В общем, сейчас настройки выглядят так:
[general]
limitonpeer=yes
register => 619F*******45:pass1@cloud-pbx.ukrtelecom.ua/49***1 ;49***1
register => 619F*******47:pass2@cloud-pbx.ukrtelecom.ua/49***2 ;49***2
register => 619F*******51:pass3@cloud-pbx.ukrtelecom.ua/49***4 ;49***4
register => 619F*******53:pass4@cloud-pbx.ukrtelecom.ua/49***5 ;49***5
context=incoming_fxo
language=ru
allowguest=no ;do not allow anonymous calls
alwaysauthreject=yes ;do not say whether wrong password or username
nat=force_rport,comedia
[UT](!)
type=peer
host=cloud-pbx.ukrtelecom.ua
dtmfmode=rfc2833
disallow=all
allow=gsm
allow=ulaw
insecure=invite
canreinvite=no
sendrpid=yes
nat=no
;49***1
[619F*******45](UT)
fromuser=619F*******45
defaultuser=619F*******45
cid_number=61949***1
secret=pass1
;49***2
[619F*******47](UT)
fromuser=619F*******47
defaultuser=619F*******47
cid_number=61949***2
secret=pass2
;49***4
[619F*******51](UT)
fromuser=619F*******51
defaultuser=619F*******51
cid_number=61949***4
secret=pass3
;49***5
[619F*******53](UT)
fromuser=619F*******53
defaultuser=619F*******53
cid_number=61949***5
secret=pass4
Ошибка выдаётся как и была:
-- Executing [*81425521@internal:1] Dial("SIP/ddvar-home-00001d2e", "SIP/619F*******45/425521") in new stack
-- Called SIP/619F*******45/425521
[Sep 16 15:00:37] WARNING[100458][C-00005274]: chan_sip.c:23335 handle_response_invite: Received response: "Forbidden" from '"user1" <sip:619F********45@asterisk-ip>;tag=as6b210809'
== Everyone is busy/congested at this time (1:0/0/1)
-- Executing [*81425521@internal:2] Congestion("SIP/user1-00001d2e", "") in new stack
== Spawn extension (internal, *81425521, 2) exited non-zero on 'SIP/ddvar-home-00001d2e'
Вот собственно экстеншн:
[globals]
UT1=SIP/619F*******45
UT2=SIP/619F*******47
UT3=SIP/619F*******51
UT4=SIP/619F*******53
[outgoing]
exten => _*81.,1,Dial(${UT1}/${EXTEN:3})
same => n,Congestion()
same => n,Hangup()
Вот чувствую, что ошибка какая-то глупая, но не могу разобраться :(
У меня так на серверах:
[94924924]
type=peer
secret=ololo
username=94924924
fromuser=94924924
defaultuser=94924924
fromdomain=14.55.77.11 ; <--- IP адрес АТС провайдера! Не мой!
host=14.55.77.11 ; <--- IP адрес АТС провайдера! Не мой!
realm=14.55.77.11 ; <--- IP адрес АТС провайдера! Не мой!
disallow=all
allow=alaw,ulaw
insecure = invite,port
hassip=yes
qualify=yes
;nat=yes
canreinvite=no