Ads
Comments 54
UFO landed and left these words here
UFO landed and left these words here
зря не включили в контексты экстеншен i (illegal), что бы подхватывать те клавишы, которые не ожидались.
В работе постоянно их включаю :) тут решил не упоминать деревце то простое
Если кто-то будет учиться по Вашей статье — шишок набьет во время эксплуатации. В его текстах все отработает, а живые люди начнут нажимать незаложенные в меню клавиши.
Папка с звуковыми файлами лежит в «wav», а расширения файлов «ulaw», а сама АТС работает через кодек Alaw. Видя такие моменты, в начале, всегда сомневался — опечатка или нет. Кстати, можно использовать и wav-формат(я его и использовал), но тогда надо использовать PCM-кодек, 16 бит с частотой 8000Гц.
Да по сути не важно как называется папка, но согласен, что может запутать, за сим исправлю. Ну а по поводу расширения ulaw, то его ставит сам аудиоредактор у которого механизм конвертации выбран alaw/Mulaw. Wav файлы тоже использовал, но они сильнее грузят систему, да и места занимают больше.
UFO landed and left these words here
Хм… А если я закину три файла с одинаковыми именами, но разными расширениями, что из этого подцепит Астериск?
По возможности тот, который закодирован тем же кодеком, что и в медиа-потоке идет.
UFO landed and left these words here
Хочу заметить несколько моментов:
1. Астериску совершенно парараллельно на формат файлов. Лишь бы он был обучен их проигрывать. Лично у меня — gsm
2. Существенно меньшее кол-во глюков и заметный прирост в качестве звука получается, если создавать файлы в Wav-44КГц, а затем на машине с астериском конвертировать их в нужный формат с необходимым битрейтом программой sox.
3. Перекидывать сразу на секретаря при i я не стал. Все инвалиды идут по кругу на файл %lang%-route, пусть слушают внимательно, прежде чем нажимать.
4. Таймауты тоже сначала слушают %lang%-route ещё раз, а только потом перекидываются на секретаря.
Инвалид (i) — это человек. И звонит он скорее всего по делу. Не надо портить ему нервы лишним временем в меню. Не смог соединиться — на секретаря, пускай дальше сек направит. Есть хорошие SIP-аппараты для секретарей с кнопочными консолями, скажем, Cisco SPA932 с SPA962. На кнопки навешиваются наиболее часто вызываемые и все, секретарь за пару нажатий кнопки переправит куда надо.
На днях попал к нам на тест потенциальный телефон секретаря, даже волпаперы можно ставить :)
А у меня есть его младший брат. Несмотря что на трубке написано HD, а сам телефон умеет HD-кодеки, звук у него так себе :)
image
В идеале при неправильно нажатой цифре лучше проиграть сообщение, что выбрано несуществующее направление и заново проиграть меню. Но соединение с секретарем по таймауту спасет пользователей, телефонные аппараты которых находятся в импульсном режиме.
Первое желаение у любого нормального человека, когда он услышит автоматическое меню, бросить трубку. Поэтому каждая секунда проведенная в меню — критична.

Самое главное — сделать так, чтобы цифры отделов в меню не совпадали с первой цифрой номеров внутренних абонентов. Номер 104. Если в меню будет 1 — скажем отдел продаж, то после нажатия 1 астериск 5 секунд будет ждать, а вдруг юзер наберет еще «04»…
Мы сделали меню максимально кратким. С момента поднятия трубки роботом до окончания меню первого уровня проходит 21 секунда. Со второй секунды робот слушает ввод пользователя.

Ваше «самое главное» совершенно невыполнимо, если меню состоит из 10 пунктов.

Чтобы робот не слушал 5 секунд, надо ставить таймаут в три секунды.
Чтобы робот переключался сразу, как только услышал цифру, надо ставить в её начале символ подчёркивания.
Подчеркивание в начале — это признак шаблона (pattern). Например XXX — это три икса для астериска, а _XXX — три любые цифры. Когда пользователь нажимает на клавишу, во время команды Background, астериск ищет в текущем контесте, совпадающий номер и переходит на него, если под набранную комбинацию попадает более одного шаблона, то астериск ждет донабора еще одной цифры. Этот таймаут регулируется функцией TIMEOUT(digit)
extensions.ael гораздо легче читается. А ещё есть extensions.lua, но говорят если не знаешь этого lua лучше не соваться. Если кто иного мнения, отписывайтесь.
DTMF, DTMF,…
XXI век на дворе, господа. Для Астериска давно есть UniMRCP. Пора учить системы понимать человеческий голос:))
Да. Хотя в теории можно подключить любую платформу, работающую по MRCP.
Все, кто строит IVR на Asterisk, и использует русские голосовые файлы отсюда — downloads.asterisk.org/pub/telephony/sounds/, т.е. те файлы, которые вот вот войдут в состав Asterisk. Так вот, Вы можете заказать дозапись нужных вас фраз, ведь пакет подготовлен студией ivrvoice.ru ;-)
Можно записать единственную фразу с именем компании, остальные пару сотен фраз пойдут в виде бесплатной нагрузки.
Уберите WaitExten(7), если клиент затупил, то надо его сразу на секретаря переводить. Не будет он семь секунд в тишине сидеть, трубочку повесит и все. Еще у вас в факсах не хватает обработки ошибок во время приема.
Кстати, вместо:
exten => s,1,Answer()
exten => s,2,Background(/home/ulaw/IVR-zapis)
exten => s,3,WaitExten(7)

Сейчас пишут:
exten => s,1,Answer()
exten => s,n,Background(/home/ulaw/IVR-zapis)
exten => s,n,WaitExten(7)

Астериск сам умеет рассчитывать приорететы по положению команд в файле.
По поводу WaitExten, то его убирать я не вижу смысла возможно сделать в районе 3 секунд, но не совсем убирать.
Ну а по поводу расставления приоритетов — оно отработается в обоих случаях просто когда у меня 3 строки одного идентификатора, то несложно можно расставить приоритеты самому, когда 50, тогда можно уже и «n» использовать
«Чтобы отправить факс нажмите 9»
exten => 9,2,ReceiveFax(${FAXFILE}.tif)
и как, получается принмать факсы с аналоговых линий?
Вполне, и отправлять тоже.
И по Т.38 уже чаще работает, чем нет :)
C аналоговых линий вообще счастье одно факсы принимать :)
А VoIP — это вечная проблема(то джитер большой, то пакет потерялся).
Скорее, не проблема, а вопрос кармы и везения. У особо счастливых бывало что факсы успешно смогли по VoIP (sic!) в 711 кодеке насвистеть что-то, без всяких T.38 :)
А что удивительного? Вот если б в 709, тогда действительно было бы удивительно. У меня везде 711а с pass through проблем не наблюдаю (канал везде хороший)
Удивителен сколько не сам факт прохождения, сколько то, что это через VoIP-провайдера прошло. В pass-through через какой-нибудь SPA-2102 и Digium/Openvox в медь оно как раз весьма хорошо ходит.
Через 711 это вообще рулетка, на часть направлений может проходить на часть нет. Иногда операторы на стыках пережимают 711 и всё, капец факсу.

t.38 тоже не всегда рулит, у одного местного оператора видимо реализация не совместимая с t38modem.
exten => ххх,1,
exten => ххх,2,
exten => ххх,3,
exten => ххх,4,

Считаю, должно караться через карапупу, с запретом пользоваться арифметикой и оператором goto на 7 лет.
Хотелось бы уточнить:
1. А какая версия asterisk у Вас используется?
2. Может опубликуете полный диалплан внутренних вызовов в офисе и в город с перехватом неправильных номеров примерно так как сделано в trixbox если не ошибаюсь. (ну не Ваш конечно, а примерный диалплан)
3.Интересна реализация видеозвонков через программные voip клиенты.
4.Реализация конференций как голосовых так и видео.
5.Кто-то на хабре (или в журнале хакер это читал) писал вроде о том как можно звонить с сотового на астериск, астериск сам сбрасывает звонок в случае определения номера сотового, потом перезванивает на сотовый и дает возможность позвонить в офис или еще куда, тем самым пользователю сотового бесплатно получится — интересный момент для кол центров.
6.Есть еще одна проблема кол-центров это обрыв связи, человек перезванивает и может попасть другому оператору, а желательно к тому же.
У меня до всего этого тупо времени нет, но весь этот функционал хотелось бы использовать в фирме.
Была бы подробная статья как сделать это быстро и качественно — было бы очень кстати.
P.S. также интересно голосовая почта и обмен текстовыми сообщениями voip клиентов.
Эх, еще бы аналог trixbox сваять для русских пользователей и нужд без особых знаний во всей этой кухне :)

3. Это не зависит от астериска. Включаете видео-кодек в SIP-пире и дальше уже если софтфон умеет — будет видео, нет — извините :)
4. Голосовая — просто кидаете канал в диалплане MeetMe(<conf-id>). Видеоконференция требует стороннего решения для микширования видеопотоков. Мы делали через red5 и flash, получилось нечто вроде многопользовательской чатрулетки.
5. Если интересно, могу показать, как это реализуется в диалплане.
Голосовая почта это стандартная фича, в voicemail.conf накидали ящиков и вперед :)
Текстовые сообщения хоят и поддерживаются SIP, астериск, можно сказать, не умеет. Хотя некоторые телефоны могут принимать и осмысленно показывать SIP-сообщения, отправляемые через sipsak, например.
Что-то не увидел никаких деревьев тут, обычный линейный IVR, даже в книжке «Asterisk — будущее телефонии» он более функционально и подробно описан.

В команде регистрации на провайдере лучше указывать добавочный номер и принимать звонки на него, а не на s — экстеншн, это позволит принимать и различать звонки когда у вас больше 1 внешнего номера.

Это что вообще за формат такой?
exten => _XXX,1,Dial(SIP/${EXTEN}@YourAsterisk)
Все проще:
exten => _XXX,1,Dial(SIP/${EXTEN})

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

Это вообще убило…
exten => s,1,Answer()
exten => s,2,Background(/home/ulaw/IVR-zapis)
exten => s,3,WaitExten(7)


Уже давно можно делать так:
exten => s,1,Answer
same => n,Background(/home/ulaw/IVR-zapis)
same => n,WaitExten(7)


Файлы лучше ложить в /var/lib/asterisk/sounds/ru/ivr, где ru — язык канала, а ivr — подпапка с вашими записями. Тогда вызывать можно по относительному gути:
same => n,Background(ivr/zapis)

Насчет формата файлов: ulaw — используется в северной америке, в европе используют alaw. Для конвертации можно воспользоваться sox и самим Asterisk:
sox <file_in>.wav -r 8000 -c 1 <file_out>.wav
asterisk -rx 'file convert <file_in> <file_out>'
Это вообще убило…
exten => s,1,Answer()
exten => s,2,Background(/home/ulaw/IVR-zapis)
exten => s,3,WaitExten(7)

Уже давно можно делать так:
exten => s,1,Answer
same => n,Background(/home/ulaw/IVR-zapis)
same => n,WaitExten(7)


Что изменится то? Функционал один и тот же, скажем, это дань уважения ныне почившим версиям астериска. И это вопрос поднимался в комментариях выше.

По поводу
Это что вообще за формат такой?
exten => _XXX,1,Dial(SIP/${EXTEN}@YourAsterisk)
Все проще:
exten => _XXX,1,Dial(SIP/${EXTEN})

Отчасти с вами согласен, но этот формат будет полезен, когда внутренние абоненты подключены через голосовые шлюзы, правда формат тогда будет не совсем такой:
exten => _XXX,1,Dial(SIP/${EXTEN}@YourDevice)

P.S. прошу прощения за такой длинный комментарий, запал enter :)
>>Это что вообще за формат такой?
>>exten => _XXX,1,Dial(SIP/${EXTEN}@YourAsterisk)
Это звонок на другой сервер с asterisk, например.
Это устаревший синтаксис, использовался еще до 1.4.
Для звонков на известные серверы лучше создавать записи в sip.conf и звонить так:
exten => _XXX,1,Dial(SIP/trunk_provider/${EXTEN})

А Ваша запись не позволяет задавать например параметры кодеков и многое другое.
У меня данный синтаксис успешно работает и на 1.4.39 и на 1.6, это дело вкуса.
Параметры кодеков мне задавать нет необходимости, везде g729(да, экономим канал)
Но согласитесь, что мало разницы между:

exten => _XXX,1,Dial(SIP/trunk_provider/${EXTEN})
и
exten => _XXX,1,Dial(SIP/${EXTEN}@trunk_provider)
Именно так, YourAsterisk — это обычный пир, с настройками кодека, и т.д., и именно этот синтаксис использую в 1.8
Сейчас поднял документацию, вы правы насчет устарелости — в доке к 1.8 указан только ваш способ, про @ ни слова. Но астериск еще не говорит что deprecated. Буду знать.
Предположим IVR приветствие длится 30 секунд.
Как заставить asterisk/freepbx сразу начать перебор операторов при входящем звонке, не ожидая этих 30 секунд, и досрочное прекращение IVR если оператор взял трубку раньше 30 секунд?
Only those users with full accounts are able to leave comments. , please.