Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

спросил 2014-01-17 15:53:37 +0400

ralienpp Gravatar ralienpp

Transfer звонка с консоли, через chan_alsa

Я пытаюсь создать прототип домофона на Asterisk 1.8 и Raspberry Pi. Oсуществляетcя звонок с консоли, для обработки звука применяется chan_alsa.

Во время звонка нет возможности выполнить transfer на друогй extension; человек жмет на #5, CLI получает нажатие, но не реагирует на него:

 << Console call has been answered >>
 << Console Received digit 5 of duration 100 ms >>

Свойства канала

rasterisk*CLI> core show channeltype console
-- Info about channel driver: Console --
  Device State: no
    Indication: yes
     Transfer : no
  Capabilities: 0x40 (slin)
   Digit Begin: no
     Digit End: yes
    Send HTML : no
 Image Support: no

Если в chan_alsa.conf задать transfer=yes - это игнорируется.

Это некое ограничение канала? Как его можно обойти? Какие альтернативы можно применить?

нажмите, чтобы скрыть/показать версии 2
added more details about attempts to use chan_local
редактировать

Transfer звонка с консоли, через chan_alsa

Я пытаюсь создать прототип домофона на Asterisk 1.8 и Raspberry Pi. Oсуществляетcя звонок с консоли, командой console dial 100, для обработки звука применяется chan_alsa.

Во время звонка нет возможности выполнить transfer на друогй extension; человек жмет на #5, CLI получает нажатие, но не реагирует на него:

 << Console call has been answered >>
 << Console Received digit 5 of duration 100 ms >>

Свойства канала

rasterisk*CLI> core show channeltype console
-- Info about channel driver: Console --
  Device State: no
    Indication: yes
     Transfer : no
  Capabilities: 0x40 (slin)
   Digit Begin: no
     Digit End: yes
    Send HTML : no
 Image Support: no

Если в chan_alsa.conf задать transfer=yes - это игнорируется.

Dial из CLI не дает возможность передавать параметры (типа T, итд). В качестве альтернативы, попытался внедрить с помощью chan_local:

[console-context]
exten => 100,1,Dial(SIP/TestUser,15,tTr)
exten => _9.,1,Dial(Local/${EXTEN:1}@console-context,15,tTr)
exten => 5,1,Goto(opendoor,s,1)

Вместо 100, набираю 9100, в результате звонок проходит через chan_local. К сожалению это не меняет ситуацию. В консоли видно что нажатие на 5 ловится, но transfer не происходит.

Это некое ограничение канала? Как его можно обойти? Какие альтернативы можно применить?

нажмите, чтобы скрыть/показать версии 3
added details about how the call is made
редактировать

Transfer звонка с консоли, через chan_alsa

Я пытаюсь создать прототип домофона на Asterisk 1.8 и Raspberry Pi. Oсуществляетcя звонок с консоли, командой console dial 100, для обработки звука применяется chan_alsa.

Во время звонка нет возможности выполнить transfer на друогй extension; человек жмет на #5, CLI получает нажатие, но не реагирует на него:

 << Console call has been answered >>
 << Console Received digit 5 of duration 100 ms >>

Свойства канала

rasterisk*CLI> core show channeltype console
-- Info about channel driver: Console --
  Device State: no
    Indication: yes
     Transfer : no
  Capabilities: 0x40 (slin)
   Digit Begin: no
     Digit End: yes
    Send HTML : no
 Image Support: no

Если в chan_alsa.conf задать transfer=yes - это игнорируется.

Dial из CLI не дает возможность передавать параметры (типа T, итд). В качестве альтернативы, попытался внедрить с помощью chan_local:

[console-context]
exten => 100,1,Dial(SIP/TestUser,15,tTr)
exten => _9.,1,Dial(Local/${EXTEN:1}@console-context,15,tTr)
exten => 5,1,Goto(opendoor,s,1)

Вместо 100, набираю 9100, в результате звонок проходит через chan_local. К сожалению это не меняет ситуацию. В консоли видно что нажатие на 5 ловится, но transfer не происходит.

Это некое ограничение канала? Как его можно обойти? Какие альтернативы можно применить?

Update: как выполняется звонок

  1. Есть SIP client, программа PhonerLite под Windows
  2. Из консоли Asterisk выполняется console dial 100 (этот номер соответствует данному клиенту)

Другие детали:

  • Если звонить с SIP clientа на SIP client (например PhonerLite-Phonerlite, Phonerlite-Linphone, etc), transfer выполняется без проблем - то есть понятно что клиент может грамотно передать # по DTMF.
  • Звонок выполняется когда гость жмет на кнопку на двери, что в свою очередь ловится Raspberry Pi по интерфейсу GPIO, что приводит к выполнению asterisk -rx "console dial 100"
  • Человек внутри дома получает звонок на свой SIP client, говорит с гостем, и делает трансфер на специальный extension, который в результате откроет дверь (послав сигнал через тот же GPIO на RasPi)

То есть, проблема в том, что когда осуществляется этот звонок с консоли, # передаваемый клиентом не ловится сервером (хотя в других звонках это все работает).

нажмите, чтобы скрыть/показать версии 4
explanations regarding the need to dial from the console and what chan_alsa has to do with it.
редактировать

Transfer звонка с консоли, через chan_alsa

Я пытаюсь создать прототип домофона на Asterisk 1.8 и Raspberry Pi. Oсуществляетcя звонок с консоли, командой console dial 100, для обработки звука применяется chan_alsa.

Во время звонка нет возможности выполнить transfer на друогй extension; человек жмет на #5, CLI получает нажатие, но не реагирует на него:

 << Console call has been answered >>
 << Console Received digit 5 of duration 100 ms >>

Свойства канала

rasterisk*CLI> core show channeltype console
-- Info about channel driver: Console --
  Device State: no
    Indication: yes
     Transfer : no
  Capabilities: 0x40 (slin)
   Digit Begin: no
     Digit End: yes
    Send HTML : no
 Image Support: no

Если в chan_alsa.conf задать transfer=yes - это игнорируется.

Dial из CLI не дает возможность передавать параметры (типа T, итд). В качестве альтернативы, попытался внедрить с помощью chan_local:

[console-context]
exten => 100,1,Dial(SIP/TestUser,15,tTr)
exten => _9.,1,Dial(Local/${EXTEN:1}@console-context,15,tTr)
exten => 5,1,Goto(opendoor,s,1)

Вместо 100, набираю 9100, в результате звонок проходит через chan_local. К сожалению это не меняет ситуацию. В консоли видно что нажатие на 5 ловится, но transfer не происходит.

Это некое ограничение канала? Как его можно обойти? Какие альтернативы можно применить?

Update: как выполняется звонок

  1. Есть SIP client, программа PhonerLite под Windows
  2. Из консоли Asterisk выполняется console dial 100 (этот номер соответствует данному клиенту)

Другие детали:

  • Если звонить с SIP clientа на SIP client (например PhonerLite-Phonerlite, Phonerlite-Linphone, etc), transfer выполняется без проблем - то есть понятно что клиент может грамотно передать # по DTMF.
  • Звонок выполняется когда гость жмет на кнопку на двери, что в свою очередь ловится Raspberry Pi по интерфейсу GPIO, что приводит к выполнению asterisk -rx "console dial 100"
  • Человек внутри дома получает звонок на свой SIP client, говорит с гостем, и делает трансфер на специальный extension, который в результате откроет дверь (послав сигнал через тот же GPIO на RasPi)

То есть, проблема в том, что когда осуществляется этот звонок с консоли, # передаваемый клиентом не ловится сервером (хотя в других звонках это все работает).

Update: почему звонок с консоли и почему chan_alsa? Задумка такова - к RasPi на котором работает Asterisk подключен микрофон и динамик,а так же кнопка и электромагнит. Когда человек жмет кнопку, Asterisk выполняет звонок в качестве клиента.

Для того чтобы Астериск мог получать\выдавать аудио, он применяет sound card который присутствует в Raspberry Pi и внешний USB микрофон.

Сначала я думал запустить на той же машине и SIP client, например linphonec - но это невозможно, так как он хочет привязаться к порту 5060, который уже занят Asterisk'ом.

Cоответственно, единственный выход который я пока нашел, это применить сам сервер в качестве клиента, что возможно осуществить с console dial в CLI. Чтобы консольный клиент мог передавать и принимать аудио, нужно применять chanalsa или chanoss. Выбор пал на первый, так как с этим имел дело раньше.

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.