Страница 1 из 2

В команде Dial не работает опция d

Добавлено: 08 авг 2012, 16:25
Spectr
Версия астериска

Код: Выделить всё

asterisk*CLI> core show version 
Asterisk 1.8.15.0 built by root @ asterisk on a i686 running Linux on 2012-08-08 08:33:04 UTC
из файла extensions.conf привожу кусок диалплана

Код: Выделить всё

[office-in]

exten=201,1,Answer()
      same=n,Dial(SIP/201,,d)
      same=n,Hangup

exten=1,Answer()
  same=n,Background(tt-monkeys)
  sane=n,Hangup
Вывод debug:

Звоню и нажимаю 1. Как я понимаю при нажатии на кнопку должен выполниться экстеншн с номером 1?

Код: Выделить всё

  == Using SIP RTP CoS mark 5
    -- Executing [201@office-in:1] Answer("SIP/205-00000028", "") in new stack
    -- Executing [201@office-in:2] Dial("SIP/205-00000028", "SIP/201,,tTd") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/201
    -- SIP/201-00000029 is ringing
[Aug  8 15:39:03] DTMF[1591]: channel.c:4090 __ast_read: DTMF begin '1' received on SIP/205-00000028
[Aug  8 15:39:03] DTMF[1591]: channel.c:4100 __ast_read: DTMF begin passthrough '1' on SIP/205-00000028
[Aug  8 15:39:03] DTMF[1591]: channel.c:4005 __ast_read: DTMF end '1' received on SIP/205-00000028, duration 140 ms
[Aug  8 15:39:03] DTMF[1591]: channel.c:4045 __ast_read: DTMF end accepted with begin '1' on SIP/205-00000028
[Aug  8 15:39:03] DTMF[1591]: channel.c:4074 __ast_read: DTMF end passthrough '1' on SIP/205-00000028
В dtmf дебаге видно что цифра 1 которую я нажал была принята. Почему тогда не отработал exten=1 ? Где я не прав? :|

Если дальше перебирать цифры то всё ок. Они все принимаются астериском но не обрабатываются в соответствии с экстеншенами.

Код: Выделить всё

[Aug  8 15:39:08] DTMF[1591]: channel.c:4090 __ast_read: DTMF begin '1' received on SIP/205-00000028
[Aug  8 15:39:08] DTMF[1591]: channel.c:4100 __ast_read: DTMF begin passthrough '1' on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4005 __ast_read: DTMF end '1' received on SIP/205-00000028, duration 120 ms
[Aug  8 15:39:09] DTMF[1591]: channel.c:4045 __ast_read: DTMF end accepted with begin '1' on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4074 __ast_read: DTMF end passthrough '1' on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4090 __ast_read: DTMF begin '2' received on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4100 __ast_read: DTMF begin passthrough '2' on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4005 __ast_read: DTMF end '2' received on SIP/205-00000028, duration 120 ms
[Aug  8 15:39:09] DTMF[1591]: channel.c:4045 __ast_read: DTMF end accepted with begin '2' on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4074 __ast_read: DTMF end passthrough '2' on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4090 __ast_read: DTMF begin '3' received on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4100 __ast_read: DTMF begin passthrough '3' on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4005 __ast_read: DTMF end '3' received on SIP/205-00000028, duration 100 ms
[Aug  8 15:39:09] DTMF[1591]: channel.c:4045 __ast_read: DTMF end accepted with begin '3' on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4074 __ast_read: DTMF end passthrough '3' on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4090 __ast_read: DTMF begin '4' received on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4100 __ast_read: DTMF begin passthrough '4' on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4005 __ast_read: DTMF end '4' received on SIP/205-00000028, duration 120 ms
[Aug  8 15:39:09] DTMF[1591]: channel.c:4045 __ast_read: DTMF end accepted with begin '4' on SIP/205-00000028
[Aug  8 15:39:09] DTMF[1591]: channel.c:4074 __ast_read: DTMF end passthrough '4' on SIP/205-00000028
Но! :) Если я немного переделаю логику и напишу что то вроде

Код: Выделить всё

[office-in]

exten=201,1,Answer()
      same=n,Background(vm-intro)
      same=n,Hangup

exten=1,Answer()
  same=n,Background(tt-monkeys)
  sane=n,Hangup
при нажатии на 1 dtmf обработает правильно и я услышу tt-monkeys :)

Или механику работы опции "d" в Dial я понимаю неправильно? Объясните что не так?

Re: В команде Dial не работает опция d

Добавлено: 08 авг 2012, 16:35
ded
Поставьте
exten=>201,1,Answer()
exten => same,n,Background(vm-intro)
exten => same,n,WaitExten()
exten => same,n,Hangup

и тогда tt-monkeys услышите по нажатию 1.

Не хотите книжки почитать? Там много примеров, почти все - рабочие.

Re: В команде Dial не работает опция d

Добавлено: 08 авг 2012, 17:12
Spectr
Да с командой Background всё и так работает :)
Не работает переход на другой экстеншн только при команде Dial(SIP/201,,d)
Книжки читаю примеры смотрю много рабочих, с этим всё прекрасно. Но я не нашел ни одного примера вменяемого с опцией "d" в Dial.
Почитал описание на http://voip.rus.net/tiki-index.php?page ... k+cmd+Dial где написано что:

Код: Выделить всё

 d: Этот флаг расширяет возможности параметра 'H' и позволяет перехватывать любые dtmf посылки, в процессе ожидания, пока вызываемый абонент ответит на вызов, и возвращает набранное значение. Это позволяет Вам набрать номер екстеншена для выхода пока, вызываемый Вами абонент, еще не ответил на вызов. Смотри описание команды: RetryDial 
Тоесть если в команде Dial есть эта опция, я могу осуществлять донабор в момент звонка до того как человек кому я звоню снимет трубку.
В первом посте топика видно что я во время звонка нажимаю "1" и экстеншн с именем 1 не вызывается.

Re: В команде Dial не работает опция d

Добавлено: 08 авг 2012, 17:34
zzuz
Не изобретайте велосипед, используйте WaitExten() и наслаждайтесь.

Re: В команде Dial не работает опция d

Добавлено: 08 авг 2012, 17:38
Spectr
Я кажется понял логику. Тоесть экстеншн выполнится только в момент когда человек ответит на входящий звонок?
А можно как нибудь набирать dtmf и выполнять команды до того как человек возьмёт трубку?
Например звоню секретарю. Секретарь по каким то причинам не снимает трубку. Я в рамках одного соединения набираю добавочный номер и попадаю к другому человеку.

Re: В команде Dial не работает опция d

Добавлено: 08 авг 2012, 18:29
ded
Шаблон затрещал, но выдержал.

Re: В команде Dial не работает опция d

Добавлено: 08 авг 2012, 18:39
Spectr
ded писал(а):Шаблон затрещал, но выдержал.
эм, что? :) :shock:
Разве шаблон:
ded писал(а):Поставьте
exten=>201,1,Answer()
exten => same,n,Background(vm-intro)
exten => same,n,WaitExten()
exten => same,n,Hangup
Подходит под описание:
Spectr писал(а): А можно как нибудь набирать dtmf и выполнять команды до того как человек возьмёт трубку?
Например звоню секретарю. Секретарь по каким то причинам не снимает трубку. Я в рамках одного соединения набираю добавочный номер и попадаю к другому человеку.
Ведь в момент выполнения exten => same,n,Background(vm-intro) сам звонок не поступает к секретарю а просто пригрывает vm-intro и ждёт донабора dtmf

Re: В команде Dial не работает опция d

Добавлено: 08 авг 2012, 19:55
ded

Re: В команде Dial не работает опция d

Добавлено: 08 авг 2012, 22:52
Spectr
ded писал(а):http://lurkmore.to/Разрыв_шаблона
Да ладно :lol:
Не всё же так плохо :)
Вопрос то простой. ))

Re: В команде Dial не работает опция d

Добавлено: 08 авг 2012, 23:17
ded
Дык, и ошибки простые. Вы уже тут два раза свои примеры копипастите, очевидных вещей не видите.

sane=n,Hangup

То что пишите в диалплане - это уровень Ваших представлений о том как это должно работать. А на самом деле это работает так, как это видит Астериск.
Командой
dialplan show office-in

всё это нелепо:
exten=201,1,Answer()
same=n,Dial(SIP/201,,d) - А лепо так:
exten=201,1,Dial(SIP/201,,d)