Помогите пожалуйста со следующей проблемой, а то шесть утра, а я всё ещё на работе
Есть шлюз d-link dvg-6004s, к которому подключена внешняя линия. Есть Siemens GIGASET C470IP с двумя трубками. На трубках заведены аккаунты 700 и 701. Для первой входящей линии длинка сделан транк dvg1.
Задумка: При звонке длинк набирает номер горячей линии 1000, после чего астериск должен соединить его с аккаунтом 701, то есть перебросить на первую трубку. Владелец трубки с номером 701 должен в случае необходимости набрать решётку, затем 700, после чего разговор должен переключиться на трубку 700.
Что имеем на данный момент: При звонке на внешний номер, длинк набирает номер 1000, в mysql благополучно создаётся запись о звонке, начинается запись разговора, после чего начинают звонить ОБА телефона - и 700 и 701, причём на обоих телефонах на экране корректно отображается callerid звонящего. А при попытке перевести на другой номер, астериск разрывает соединение.
Как заставить звонить только один внутренний телефон и переводиться звонки и почему такое может происходить?
Содержимое sip.conf:
Код: Выделить всё
[dsets](!)
type=friend
host=dynamic
secret=kern77
nat=yes
context=incoming
disallow=all
allow=alaw
allow=ulaw
allow=gsm
usecallerid=yes
hidecallerid=no
[dvg0](dsets)
username=dvg0
secret=passdvg
[dvg1](dsets)
username=dvg1
[dvg2](dsets)
username=dvg2
[dvg3](dsets)
username=dvg3
[dvg4](dsets)
username=dvg4
[sets](!)
type=friend
context=office
host=dynamic
allowtransfer=yes
nat=yes
callgroup=1
pickupgroup=1
disallow=all
allow=alaw
allow=ulaw
allow=gsm
[700](sets)
username=700
secret=pass700
[701](sets)
username=701
secret=pass701
Код: Выделить всё
[incoming]
exten => 1000,1,noop("extended CDR")
exten => 1000,n,Set(CDR(hangupcause)=${HANGUPCAUSE})
exten => 1000,n,Set(CDR(peerip)=${CHANNEL(peerip)})
exten => 1000,n,Set(CDR(recvip)=${CHANNEL(recvip)})
exten => 1000,n,Set(CDR(fromuri)=${CHANNEL(from)})
exten => 1000,n,Set(CDR(uri)=${CHANNEL(uri)})
exten => 1000,n,Set(CDR(useragent)=${CHANNEL(useragent)})
exten => 1000,n,Set(CDR(codec1)=${CHANNEL(audioreadformat)})
exten => 1000,n,Set(CDR(codec2)=${CHANNEL(audiowriteformat)})
exten => 1000,n,Set(CDR(llp)=${CHANNEL(rtpqos,audio,local_lostpackets)})
exten => 1000,n,Set(CDR(rlp)=${CHANNEL(rtpqos,audio,remote_lostpackets)})
exten => 1000,n,Set(CDR(ljitt)=${CHANNEL(rtpqos,audio,local_jitter)})
exten => 1000,n,Set(CDR(rjitt)=${CHANNEL(rtpqos,audio,remote_jitter)})
exten => 1000,n,Set(fname=${STRFTIME(${EPOCH},,%Y.%m.%d-%H.%M.%S)}-${CALLERID(num)}.wav,,Tt)
exten => 1000,n,MixMonitor(/home/audio/${fname}.wav)
exten => 1000,n,Dial(SIP/701,45,Tt)
[office]
exten => 700,1,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M-%S)}-${CALLERID(num)-${EXTEN}})
exten => 700,n,MixMonitor(/home/audio/${fname}.wav)
exten => 700,n,Dial(SIP/700,10)
exten => 701,1,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M-%S)}-${CALLERID(num)-${EXTEN}})
exten => 701,n,MixMonitor(/home/audio/${fname}.wav)
exten => 701,n,Dial(SIP/701,10)
Код: Выделить всё
-- Executing [1000@incoming:1] NoOp("SIP/dvg1-02865028", ""extended CDR"") in new stack
-- Executing [1000@incoming:2] Set("SIP/dvg1-02865028", "CDR(hangupcause)=0") in new stack
[Nov 24 03:41:11] WARNING[72923]: func_channel.c:98 func_channel_read: Unknown or unavailable item requested: 'peerip'
-- Executing [1000@incoming:3] Set("SIP/dvg1-02865028", "CDR(peerip)=") in new stack
[Nov 24 03:41:11] WARNING[72923]: func_channel.c:98 func_channel_read: Unknown or unavailable item requested: 'recvip'
-- Executing [1000@incoming:4] Set("SIP/dvg1-02865028", "CDR(recvip)=") in new stack
[Nov 24 03:41:11] WARNING[72923]: func_channel.c:98 func_channel_read: Unknown or unavailable item requested: 'from'
-- Executing [1000@incoming:5] Set("SIP/dvg1-02865028", "CDR(fromuri)=") in new stack
[Nov 24 03:41:11] WARNING[72923]: func_channel.c:98 func_channel_read: Unknown or unavailable item requested: 'uri'
-- Executing [1000@incoming:6] Set("SIP/dvg1-02865028", "CDR(uri)=") in new stack
[Nov 24 03:41:11] WARNING[72923]: func_channel.c:98 func_channel_read: Unknown or unavailable item requested: 'useragent'
-- Executing [1000@incoming:7] Set("SIP/dvg1-02865028", "CDR(useragent)=") in new stack
-- Executing [1000@incoming:8] Set("SIP/dvg1-02865028", "CDR(codec1)=alaw") in new stack
-- Executing [1000@incoming:9] Set("SIP/dvg1-02865028", "CDR(codec2)=alaw") in new stack
-- Executing [1000@incoming:10] Set("SIP/dvg1-02865028", "CDR(llp)=0") in new stack
-- Executing [1000@incoming:11] Set("SIP/dvg1-02865028", "CDR(rlp)=0") in new stack
-- Executing [1000@incoming:12] Set("SIP/dvg1-02865028", "CDR(ljitt)=0") in new stack
-- Executing [1000@incoming:13] Set("SIP/dvg1-02865028", "CDR(rjitt)=0") in new stack
-- Executing [1000@incoming:14] Set("SIP/dvg1-02865028", "fname=2010.11.24-03.41.11-dvg1.wav,,Tt") in new stack
-- Executing [1000@incoming:15] MixMonitor("SIP/dvg1-02865028", "/home/audio/2010.11.24-03.41.11-dvg1.wav,,Tt.wav") in new stack
-- Executing [1000@incoming:16] Dial("SIP/dvg1-02865028", "SIP/701,45,Tt") in new stack
== Begin MixMonitor Recording SIP/dvg1-02865028
-- Called 701
-- SIP/701-11c98028 is ringing
-- SIP/701-11c98028 answered SIP/dvg1-02865028
Код: Выделить всё
[Nov 24 03:41:27] DTMF[72923]: channel.c:2840 __ast_read: DTMF begin '#' received on SIP/701-11c98028
[Nov 24 03:41:27] DTMF[72923]: channel.c:2850 __ast_read: DTMF begin passthrough '#' on SIP/701-11c98028
[Nov 24 03:41:27] DTMF[72923]: channel.c:2768 __ast_read: DTMF end '#' received on SIP/701-11c98028, duration 100 ms
[Nov 24 03:41:27] DTMF[72923]: channel.c:2808 __ast_read: DTMF end accepted with begin '#' on SIP/701-11c98028
[Nov 24 03:41:27] DTMF[72923]: channel.c:2824 __ast_read: DTMF end passthrough '#' on SIP/701-11c98028
-- Music class default requested but no musiconhold loaded.
-- <SIP/701-11c98028> Playing 'pbx-transfer.gsm' (language 'en')
[Nov 24 03:41:27] DTMF[72923]: channel.c:2840 __ast_read: DTMF begin '7' received on SIP/701-11c98028
[Nov 24 03:41:27] DTMF[72923]: channel.c:2844 __ast_read: DTMF begin ignored '7' on SIP/701-11c98028
[Nov 24 03:41:28] DTMF[72923]: channel.c:2768 __ast_read: DTMF end '7' received on SIP/701-11c98028, duration 100 ms
[Nov 24 03:41:28] DTMF[72923]: channel.c:2824 __ast_read: DTMF end passthrough '7' on SIP/701-11c98028
[Nov 24 03:41:28] DTMF[72923]: channel.c:2840 __ast_read: DTMF begin '0' received on SIP/701-11c98028
[Nov 24 03:41:28] DTMF[72923]: channel.c:2844 __ast_read: DTMF begin ignored '0' on SIP/701-11c98028
[Nov 24 03:41:28] DTMF[72923]: channel.c:2768 __ast_read: DTMF end '0' received on SIP/701-11c98028, duration 100 ms
[Nov 24 03:41:28] DTMF[72923]: channel.c:2824 __ast_read: DTMF end passthrough '0' on SIP/701-11c98028
[Nov 24 03:41:28] DTMF[72923]: channel.c:2840 __ast_read: DTMF begin '0' received on SIP/701-11c98028
[Nov 24 03:41:28] DTMF[72923]: channel.c:2844 __ast_read: DTMF begin ignored '0' on SIP/701-11c98028
[Nov 24 03:41:28] DTMF[72923]: channel.c:2768 __ast_read: DTMF end '0' received on SIP/701-11c98028, duration 100 ms
[Nov 24 03:41:28] DTMF[72923]: channel.c:2824 __ast_read: DTMF end passthrough '0' on SIP/701-11c98028
-- Executing [700@office:1] Set("SIP/dvg1-02865028", "fname=2010-11-24_03-41-28-dvg1") in new stack
-- Executing [700@office:2] MixMonitor("SIP/dvg1-02865028", "/home/audio/2010-11-24_03-41-28-dvg1.wav") in new stack
-- Executing [700@office:3] Dial("SIP/dvg1-02865028", "SIP/700,10") in new stack
== Begin MixMonitor Recording SIP/dvg1-02865028
-- Called 700
-- Nobody picked up in 10000 ms
-- Auto fallthrough, channel 'SIP/dvg1-02865028' status is 'NOANSWER'
== MixMonitor close filestream
== Executing [Tt.wav]
== MixMonitor close filestream
== End MixMonitor Recording SIP/dvg1-02865028
== End MixMonitor Recording SIP/dvg1-02865028
В какую сторону копать?