VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Принять внешний звонок и сохранить в файл то что скажут

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

odmin4eg
Сообщения: 12
Зарегистрирован: 12 янв 2013, 16:47

Re: Принять внешний звонок и сохранить в файл то что скажут

Сообщение odmin4eg »

# cat extensions_minivm.conf | grep exten => h,

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

; If the user hangs up during the recording, we need to clean up
exten => h,1,gotoif($[x${MINIVM_DELETE_STATUS} != x] ?h,stop)
exten => h,n,noop(------------------------------------------- HANGUP during voicemail recording   -------------)
exten => h,n,goto(minivmcleanup,1)
exten => h,n(stop),noop(---Minivm DONE----)

.....

exten => h,1,gotoif($[${MINIVM_RECORD_STATUS} = SUCCESS]?sendvmcleanup,1))

сколько примеров не искал так и не не понял как оно работает все пишут типо да тебе нужен контекст h, а что как почему :(
ded
Сообщения: 15627
Зарегистрирован: 26 авг 2010, 19:00

Re: Принять внешний звонок и сохранить в файл то что скажут

Сообщение ded »

В платном суппорте расскажут - что, как и почему.
odmin4eg
Сообщения: 12
Зарегистрирован: 12 янв 2013, 16:47

Re: Принять внешний звонок и сохранить в файл то что скажут

Сообщение odmin4eg »

Сделал вот так

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

exten => 31262,1,Playback(/var/lib/asterisk/sounds/helo8)
exten => 31262,2,Record(/tmp/asterisk/%d-${CALLERID(number)}-as:wav,,,noanswer)
exten => h,1,System(bash /request/${CALLERID(number)}/?temp_file=${RECORDED_FILE}.wav)
exten => h,2,Hangup
exten => 31262,3,System(bash /request/${CALLERID(number)}/?temp_file=${RECORDED_FILE}.wav)
exten => 31262,4,Wait(2)
exten => 31262,5,Hangup
Теперь если я бросаю трубку то всё отрабатывает...

типо всё круто, но если вдруг я после записи слов жму решотку, то вызов систем выполняется 2 раза.

что почитать на эту тему? какая переменная примерно отвечает за состояние звонка, чтоб исключить выполнения сначала
exten => 31262,3,System
а потом
exten => h,1,System

типо если выполнилось одно то второе не выполнять, можно это как-то флагами\переменными отловить?
odmin4eg
Сообщения: 12
Зарегистрирован: 12 янв 2013, 16:47

Re: Принять внешний звонок и сохранить в файл то что скажут

Сообщение odmin4eg »

ded писал(а):В платном суппорте расскажут - что, как и почему.
Тоже вариант, пойду туда когда будет стоять коммерческий интерес, проще конечно довериться спецам, чем самому городить, а так как-то не шибко интересно :(

я в своей области стараюсь помогать людям когда спрашивают в моей тематике, понятно что многих отправляем в гугл, типо бугага он не знает как собрать рейд и настроить маршрутизацию ;) но всёж :)
ded
Сообщения: 15627
Зарегистрирован: 26 авг 2010, 19:00

Re: Принять внешний звонок и сохранить в файл то что скажут

Сообщение ded »

Модуль Dictation стандартной конфигурации freePBX.
Вложения
Dictation.png
odmin4eg
Сообщения: 12
Зарегистрирован: 12 янв 2013, 16:47

Re: Принять внешний звонок и сохранить в файл то что скажут

Сообщение odmin4eg »

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

Дистрибутивный комплект Asterisk и пакет дополнений asterisk-sounds содержат около 1000 голосовых сообщений на английском языке (голос принадлежит дамочке по имени Allison Smith). В качестве альтернативы можно записать мессаджи на русском/украинском/суахили самостоятельно, но для этого необязательно прибегать к аудиоредактору типа Audacity. Нижеследующее дополнение в диалплан обеспечит возможность звонить на номер *98 и записывать сообщения в папку /tmp под именами myrecordНОМЕР.wav. После завершения записи (осуществляется нажатием #) звуковой файл будет воспроизведен, и соединение разорвется. Примечание: чтобы уровень громкости был постоянным, а «белый» шум, создаваемый системами отопления/охлаждения/кондиционирования, сведен к минимуму, для записи лучше воспользоваться аппаратным VoIP-телефоном.

exten => *98,1,Answer()
exten => *98,n,Wait(2)
exten => *98,n,Record(/tmp/myrecord%d:wav)
exten => *98,n,Wait(1)
exten => *98,n,Playback(${RECORDED_FILE})
exten => *98,n,Wait(1)
exten => *98,n,Hangup()

Не забудь скопировать/перенести полученный файл из временной директории в папку для звуковых файлов Asterisk и наделить его каким-нибудь осмысленным именем, вроде privetstvie.wav. Кстати, голосовые сообщения лучше не конвертировать в gsm/mp3/ogg, чтобы на проц не легла дополнительная нагрузка по преобразованию.
спасибо за информацию но вроде по постам выше я с этим разобрался.
odmin4eg
Сообщения: 12
Зарегистрирован: 12 янв 2013, 16:47

Re: Принять внешний звонок и сохранить в файл то что скажут

Сообщение odmin4eg »

пробую разрулить эту ситуацию через DIALSTATUS

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

exten => 31262,1,Playback(/var/lib/asterisk/sounds/helo8)
exten => 31262,2,Record(/tmp/asterisk/%d-${CALLERID(number)}-as:wav,,,noanswer)
exten => 31262,3, Dial(SIP/zadarma-00000001,60)
exten => 31262,n, Goto(${EXTEN}-${DIALSTATUS},1)

;Всё успешно
exten => 31262-ANSWER,1,System(bash request/${CALLERID(number)}/?temp_file=${RECORDED_FILE}.wav)
exten => 31262-ANSWER,2,Wait(2)
exten => 31262-ANSWER,3,Hangup
;Типо сбросили
exten => 31262-CANCEL,1,System(bash request/${CALLERID(number)}/?temp_file=${RECORDED_FILE}.wav)
exten => 31262-CANCEL,2,Wait(2)
exten => 31262-CANCEL,3,Hangup
;Это срабатывает почему-то когда жму # вконце
exten => 31262-CHANUNAVAIL,1,System(bash request/${CALLERID(number)}/?temp_file=${RECORDED_FILE}.wav)
exten => 31262-CHANUNAVAIL,2,Wait(2)
exten => 31262-CHANUNAVAIL,3,Hangup

куда только не пытался вставить вот это

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

exten => h,1,System(bash /request/${CALLERID(number)}/?temp_file=${RECORDED_FILE}.wav)
exten => h,2,Hangup
никак не избавился от 2ного срабатывания при том что я положил трубку :(
odmin4eg
Сообщения: 12
Зарегистрирован: 12 янв 2013, 16:47

Re: Принять внешний звонок и сохранить в файл то что скажут

Сообщение odmin4eg »

Криво косо но решил проблему поставил флаг удачной записи и в h сделал проверку на этот флаг

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

exten => 31262,1,Playback(/var/lib/asterisk/sounds/helo8)
exten => 31262,2,Set(Flag=1)
exten => 31262,3,NoOp(${Flag})
exten => 31262,4,Record(/tmp/asterisk/%d-${CALLERID(number)}-as:wav,,,noanswer)
exten => 31262,5, Dial(SIP/zadarma-00000001,60)
exten => 31262,n, Goto(${EXTEN}-${DIALSTATUS},1)
; тут проверка успешно ли прошла запись или нет если успешно то пропускаем системный выхов
exten => h,1,NoOp(${Flag})
exten => h,2,GotoIf($[${Flag}=0]?h,4)
exten => h,3,System(bash request/${CALLERID(number)}/?temp_file=${RECORDED_FILE}.wav)
exten => h,4,Hangup

; Сюда почему-то уходит если нажать решотку при окончании записи
exten => 31262-CHANUNAVAIL,1,System(bash request/${CALLERID(number)}/?temp_file=${RECORDED_FILE}.wav)
exten => 31262-CHANUNAVAIL,2,Wait(2)
exten => 31262-CHANUNAVAIL,3,Set(Flag=0)
exten => 31262-CHANUNAVAIL,4,NoOp(${Flag})
exten => 31262-CHANUNAVAIL,5,Hangup
и отдельный вопрос почему при успешном или сбросе не попадает вот сюда... :(

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

;exten => 31262-ANSWER,1,System(bash request/${CALLERID(number)}/?temp_file=${RECORDED_FILE}.wav)
;exten => 31262-ANSWER,2,Wait(2)
;exten => 31262-ANSWER,3,Hangup
;exten => 31262-CANCEL,1,System(bash request/${CALLERID(number)}/?temp_file=${RECORDED_FILE}.wav)
;exten => 31262-CANCEL,2,Wait(2)
;exten => 31262-CANCEL,3,Hangup
ded
Сообщения: 15627
Зарегистрирован: 26 авг 2010, 19:00

Re: Принять внешний звонок и сохранить в файл то что скажут

Сообщение ded »

Вы не читаете документацию, потому такие вопросы возникают. На шагах
exten => 31262,5, Dial(SIP/zadarma-00000001,60)
exten => 31262,n, Goto(${EXTEN}-${DIALSTATUS},1)
не всегда линейное последовательное выполнение кода далплана сверху вниз. На шестой шаг вниз переходит только при неблагоприятном исходе команды Dial, fа при благоприятном исходе (ANSWER) - уходит как-бы вбок. Где можно поймать по cтатусам
exten => s-ANSWER
exten => s-BUSY
exten => s-CANCEL
core show application Dial
*CLI>
-= Info about application 'Dial' =-

[Synopsis]
Place a call and connect to the current channel

[Description]
Dial(Technology/resource[&Tech2/resource2...][,timeout][,options][,URL]):
This application will place calls to one or more specified channels. As soon
as one of the requested channels answers, the originating channel will be
answered, if it has not already been answered. These two channels will then
be active in a bridged call. All other channels that were requested will then
be hung up.
Unless there is a timeout specified, the Dial application will wait
indefinitely until one of the called channels answers, the user hangs up, or
if all of the called channels are busy or unavailable. Dialplan executing will
continue if no requested channels can be called, or if the timeout expires.

This application sets the following channel variables upon completion:
DIALEDTIME - This is the time from dialing a channel until when it
is disconnected.
ANSWEREDTIME - This is the amount of time for actual call.
DIALSTATUS - This is the status of the call:
CHANUNAVAIL | CONGESTION | NOANSWER | BUSY | ANSWER | CANCEL
DONTCALL | TORTURE | INVALIDARGS
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH