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

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

1

Я пытаюсь создать прототип домофона на 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. Выбор пал на первый, так как с этим имел дело раньше.

удалить закрыть спам изменить тег редактировать

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

ralienpp Gravatar ralienpp
11 1 3

обновил 2014-01-19 14:35:56 +0400

Comments

Обновил вопрос, с учетом попытки провести через chan_local.

ralienpp ( 2014-01-17 18:56:32 +0400 )редактировать

а причем тут 5? вам надо сначала код транфера набрать. потом 5#.

meral ( 2014-01-18 16:34:22 +0400 )редактировать

хмм.. по моим наблюдениям - трансфер делается через #<extension>. На этом же сервере - именно этим методом я могу делать трансфер в SIP звонках, и это работает "out of the box"; по этому я не ожидал что есть что-то еще.

Как найти где в конфиге задается этот код трансфера, и как его поменять? (для меня желательно чтобы трансфер делался одной кнопкой)

ralienpp ( 2014-01-18 17:15:49 +0400 )редактировать

ну значит у вас # код трансфера. его вы в логах НЕ ВИДИТЕ. вообще прекращайте заниматся фигней.прочитайте сначала книжку какую умную.

meral ( 2014-01-18 18:23:46 +0400 )редактировать
1

Не понимаю, где в моих вопросах признак лени или некомпетентности? Как по другому поступить, чтобы было разумнее? Я убедился что передается ключ Т или t с помощью переброса через chan_local (так как по другому в консоли нельзя), проверил что код трансфера на самом деле # и убедился что трансфер работает в обычных звонках (не через консоль). По-моему, это вполне разумный debugging подход мыслящего человека. \n Книги тоже листал, просматривал архивы почтовых групп, но не смог найти решения этой задачи. Конечно, возможно я что-то упустил - по этому и прошу помощи.

ralienpp ( 2014-01-18 20:58:25 +0400 )редактировать

сначало должно написать что трансфер будет и сказать файл transfer. сделайте трансфер и сравните.

meral ( 2014-01-18 22:39:52 +0400 )редактировать

даю подсказку. откуда у вас вообще дтмф в аналоговом канале берется?

meral ( 2014-01-18 22:45:51 +0400 )редактировать

Обычный трансфер (когда звоню с клиента на клиент) проходит, и в логе отражается то, о чем вы говорите: имя файла который проигрывается, и что происходит blind transfer. При той же конфигурации, звонок на SIP клиент с консоли ведет себя по другому - трансфер не происходит, тем не менее DTMF воспринимается, так как в логе видно &lt;&lt; Console Received digit 5 of duration 100 ms &gt;&gt;. Вот что видно в консоли в обоих случаях: http://pastebin.com/UFpxwf6i. Не знаю на сколько ошибка и предупреждение в строке 16 и 26 имеет отношение к трансферу - я это интерпретирую как временная недоступность аудио устройства (что совпадает с эмпирическим наблюдением - звук слышен не сразу). \n ----- О подсказке - базируясь на то, что во время звонка система сообщает что она получила цифру 5, я пришел к выводу что проблема не в DTMF, тем более что и другие цифры тоже воспринимаются без проблем. Разве этого не достаточно для вывода что inband DTMF работает правильно?

ralienpp ( 2014-01-19 02:58:33 +0400 )редактировать

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

meral ( 2014-01-19 10:16:48 +0400 )редактировать

Я в этом сомневаюсь, так как в других сценариях SIP клиент передает DTMF корректно. Я обновил вопрос, добавив детали о сценарии применения. Согласен с тем, что задача не простая, но пока что не вижу в ней каких-то гипер-преград - получи звонок, сделай трансфер на extension, скажи электромагниту чтоб отпустил :-) Каждые из этих шагов понятны и выполнялись мною раньше, на Asterisk серверах с которыми сталкивался; разница только в том, что звонок исходит с chan_alsa - это я делаю впервые.

ralienpp ( 2014-01-19 14:25:07 +0400 )редактировать

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

ну и повесьте астериск на другой порт если клиент не может этого...

komrad123 ( 2014-01-19 15:31:11 +0400 )редактировать

не совсем ответ на ваш вопрос, но для решение поставленной задачи, используем вот такой девайс http://control-dostupa.ru/index.php/skud/page/pbxdp/#pbxsale . стабильно и неплохо работает. К тому же вандалозащищенный

bandys ( 2014-01-19 15:38:20 +0400 )редактировать

так так так. тоесть вы трансфер делаете с СИП клиента? а почему же у вас alsa пишет про dtmf? короче. чиатйте книжки и исходнкии астерсика. или наймите когото если это коммерческий проект.

meral ( 2014-01-19 18:01:20 +0400 )редактировать
1

короче. вы не так делаете. делайте через features.conf просто ставте feature например *5 которое выполнит ваш скрипт. вам ВООБЩЕ НЕ НУЖЕН ТРАНСФЕР.

meral ( 2014-01-19 18:03:43 +0400 )редактировать

1 Ответ

0

можете попробывать обойти через chan_local.

также наверно когда вы звоните НЕОБХОДИМО указывать клуч T или t в команде dial.

для домофона ваша задача с учетов вашего 0 опыта черезчур сложно решается. есть гараздо проще варианты. включая например pap2t вариант(если уж воип хочется)

в вашем варианте вам еще надо защитить эти провода от статики, что может быть сложновато с учетом выбраной вами технологии.

ссылка удалить спам редактировать

ответил 2014-01-17 16:18:56 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку
1 закладка

подписаться на rss ленту новостей

Статистика

Задан: 2014-01-17 15:53:37 +0400

Просмотрен: 1,608 раз

Обновлен: Jan 19 '14

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