Asterisk AMI: DTMF не получен на SIP-канале

Я отправляю DTMF в Asterisk, используя python и pyst. Код:

def playDTMF(self, channel, digit):
        print "DTMF: Sending %s to %s" % (digit, channel)
        response = self.manager.send_action({
            "Action" : "PlayDTMF",
            "Channel" : channel,
            "Digit" : digit
        })
        print "DTMF: %s - %s" % (response['Response'], response['Message'])

Вывод скрипта хороший:

DTMF: Sending 1 to SIP/S3bc9c3c-00000081
DTMF: Success - DTMF successfully queued

Но Asterisk реагирует на это так:

[Jul  2 17:48:53] DEBUG[6967] manager.c: Running action 'PlayDTMF'
[Jul  2 17:48:53] DEBUG[6967] channel.c: Set channel SIP/S3bc9c3c-00000081 to write format slin
[Jul  2 17:48:53] DEBUG[6967] channel.c: Scheduling timer at (50 requested / 50 actual) timer ticks per second
[Jul  2 17:48:53] DEBUG[6967] channel.c: Thread 140629726328576 Blocking 'SIP/S3bc9c3c-00000081', already blocked by thread 140628353554176 in procedure ast_
waitfor_nandfds

Интересно, что это происходит только на SIP-канале. На «Локальном» канале это работает как положено:

[Jul  2 18:00:07] DTMF[7951]: channel.c:4083 __ast_read: DTMF begin '1' received on Local/901@AC000001-19ca;1
[Jul  2 18:00:07] DTMF[7951]: channel.c:4093 __ast_read: DTMF begin passthrough '1' on Local/901@AC000001-19ca;1

Как я могу разрешить правильное воспроизведение DTMF на SIP-канале?

UPD

Нашел это в системе отслеживания ошибок Asterisk: https://issues.asterisk.org/jira/browse/ASTERISK-13224

Получается, что если я посылаю DTMF на SIP канал, то телефон просто воспроизводит его для себя, и дальше на Астериск он не идет. Есть ли способ справиться с этим?


person Ilya Khaustov    schedule 02.07.2013    source источник
comment
какую версию * вы используете, после этого вызов продолжается нормально (т.е. если dtmf 1, чем foo; else bar)   -  person mirkobrankovic    schedule 02.07.2013
comment
Он как-то реагирует, телефон пищит и воспроизведение останавливается. Звонок продолжается в обычном режиме. Кроме того, при использовании rfc2833 нет звукового сигнала или какой-либо другой реакции.   -  person Ilya Khaustov    schedule 02.07.2013
comment
Ошибка была закрыта как не-ошибка и датирована июнем 2011 года. Так что я почти уверен, что проблема не в этом. Я попытаюсь воссоздать вашу проблему на своей АТС сегодня днем ​​и свяжусь с вами.   -  person MichelV69    schedule 04.07.2013


Ответы (2)


используйте приложение SendDTMF. ОтправитьDTMF(цифры[|timeout_ms])

person Itzhak Harel    schedule 02.07.2013
comment
В Asterisk AMI нет такого действия, как SendDTMF. Я погуглил, что это доступно через AGI, но я помню, что были некоторые проблемы с AGI, которые не позволяли мне его использовать. - person Ilya Khaustov; 02.07.2013

В вашем SIP.CONF убедитесь, что у вас есть

dtmfmode=rfc2833

для вашего соответствующего SIP-транка. Часто отправка внутриполосного DTMF (аудио) с помощью SIP не работает так, как вы могли бы надеяться.

person MichelV69    schedule 02.07.2013
comment
rfc2833 вообще не работает. В ответе ниже я прокомментировал, что при использовании rfc2833 нет звукового сигнала или какой-либо другой реакции. - person Ilya Khaustov; 02.07.2013
comment
Проверьте pcap на это... Возможно, вы его не слышите, но он может быть просто в RTP-подобном пакете. В зависимости от того, как работает ваш ITSP, шлюз будет определять поведение в PSTN. - person dougBTV; 02.07.2013
comment
С rfc2833 звука в телефоне нет, но лог Астериска тот же. - person Ilya Khaustov; 03.07.2013
comment
По определению RFC2833 не будет воспроизводить звук на линии. Он отправляет DTMF как внеполосные командные сигналы. Это зависит от конечных точек для рендеринга звука, если они этого хотят. - person MichelV69; 04.07.2013