Amon_R90
Ответы в темах
-
АвторСообщения
-
14.12.2016 в 04:38 #13090Amon_R90Участник
Так через пробел. Первый будет $1, а второй $2, емнип.
Спасибо большое!:)
12.12.2016 в 06:02 #13076Amon_R90Участникпроблема решена, все сделал, все получилось.
05.12.2016 в 04:59 #13004Amon_R90УчастникИ убрать конструкцию while…
Спасибо большое!!!
Со скриптом разобрался, понял как передавать в него переменную, все получается. Звоним, оставляем ГС, создается .call-файл, перемещается в папку, дозванивается и предупреждает о наличии нового ГС.
Да, действительно, несколько строк кода можно теперь просто убрать:)А не подскажете как через System в скрипт передать два параметра? $1 – это у меня ${CONNECTEDLINE(number)}, и мне нужно второй передать в скрипт это – ${CALLERID(num)}. посмотрел получается либо через AGI, либо еще один скрипт создавать, в котором будет прописан список моих параметров передаваемых? ведь через “,” , “|” не получится…
02.12.2016 в 04:51 #12986Amon_R90УчастникВот смотрю я скрипт. А “number” он откуда бере…
“number” это файл в котором хранится номер того кому звонили(тот кто не ответил), а из этого файла и берется аргумент, и на его основе составляется .call-файл.
Я не знаю как по другому сделать, что бы не “Кмк создавать файл и потом его читать лишнее.”, со скриптами 3й день только работаю, раньше – в жизни не прикасался, поэтому некоторые аспекты для меня в новинку. Может подскажете тогда как это реализовать?)
Номер там без “+”, так как пока практикуюсь настраивать только внутреннюю сеть(номера там простые: 100,101,102, и тд).30.11.2016 в 03:07 #12974Amon_R90УчастникА файл в /var/spool/asterisk/outgoing создаётся? И содержимое его нормальное?
/outgoing это папка астериска, в которую перемещается .call-файл, и при попадании туда, астер начинает его сразу обрабатывать: читает, создает канал связи на основе пункта Chanel, и пытается дозвониться на номер который там указан(тот номер который только что позвонил, оставил голосовое сообщение). Если не дозвонился, то согласно пункту MaxRetries:3(к примеру) в .call-файле пытается дозвониться указанное количество раз(3), после того как дозвонился\нет, и этот файл полностью отработал, астер его удаляет(сам).
на сколько я понял, это строка указывает на то что файл $number выполнен, и с ним больше не работать. Единственная проблема, после проработки всего скрипта нужно явное указание файла( в моем случае это будет не $number, а файл с конкретным именем звонившего (700, к примеру) который создается строкой
[scrtest] exten => s,1,System(echo "${CALLERID(num)}" >> /var/spool/asterisk/temp1234/${CALLERID(num).txt)
и скрипт не отрабатывает эту команду, так как название файла не явное.(не знаю пока как сделать что бы была конкретная ссылка, работаю над этим). Если эту команду не написать, то скрипт(при исполнении для начала в консоли Centos, а не в астере), начинает выдавать ошибки, думая что 2 строчка скрипта – директория, а это не так, это тот файл который создается командой System(echo …) \выше которая\. Я пока только начал знакомство с bash, и всей логики пока не знаю, и не знаю как починить эту ошибку.
Копировать и скопировать можно и руками(или в ручную каждый раз запускать скрипт на создание .call-файла), но представьте, если будет большое количество абонентов, и много будет тех кто не ответят на вызов, это придется каждый раз в ручную смотреть логи кто кому звонил, когда, искать файл с необходимым номером дозвона, создавать .call-файл,и копировать в outgoing, а это не слишком уж важная(нужная) задача для того кто следит за корректной работой программы. Да и ведь не всегда будет получаться что человек будет находиться на своем рабочем месте, и поэтому хотел, что бы этот процесс запускался из самого астера автоматически.
28.11.2016 в 10:09 #12965Amon_R90УчастникСледует использовать GoSub и Return в конце вызываемого контекста. Ну или Macro (считается depricated).
проблему эта вроде бы пока решилась, и варнинги не выдает больше, перезапуск всего астера помог.
В экстеншенах поменял, то что Вы указали, спасибо, не знал, что не возвращает(видимо, где-то читал, но проглядел этот пункт:))А может быть Вы мне здесь поможете с предыдущим моим вопросом, связанный с созданием .call – файла?
Суть такова что: звоним на номер, не ответили, мы записываем голосовое сообщение, после создается $number – файл с номером звонившего, далее создается .call-файл, и дозванивается до абонента которому мы оставили голосовое сообщение(.call -файл начинает работу с эксеншена где просто проигрывается гол.сообщение о новой голосовой почте, вешает трубку).
В принципе, все что нужно выше изложено, только вот текст самого скрипта:#!/bin/sh while read number; do cat <<EOF > /var/spool/asterisk/$number Channel: SIP/$number Callerid: $number MaxRetries: 3 RetryTime: 20 WaitTime: 30 Context: out_voicemessage Extension: s Priority: 1 EOF chown asterisk:asterisk /var/spool/asterisk/$number mv /var/spool/asterisk/$number /var/spool/asterisk/outgoing done < /var/spool/asterisk/$number exit 0
когда просто создаю .call файл, копирую его в outgoing, то все нормально, создается вызов и тд, все хорошо. А вот с помощью скрипта…даже ни малейшего движения не наблюдается..
путь к файлу $number я переделал в экстеншенах, сейчас путями к файлам, папкам в порядке.25.11.2016 в 03:41 #12959Amon_R90УчастникСкорее всего вопрос доступа к папкам и сам файл должен иметь статус исполняемого.
Да, после создания файлов типа *.sh делаю их исполняемыми(chmod +x ). в командной строке все запускается. Теперь файл у меня создается с номером звонившего(сделал с помощью echo из диалплана). Теперь другая проблема возникла:
Когда создаю .call файл(не с помощью скрипта), перемещаю его в outgoing, то все получается, создается канал, идет вызов, все хорошо.
Когда делаю с помощью скрипта, то возникают проблемы:
1) перед тем как оборвать связь(hungup), командой system я запускаю скрипт на создание .call-файла(выше), он создает, и после завершения вызова в логе астериска пишет что номер занят(не может перезвонить). – следовательно как то нужно поменять время создания .call-файла(создать еще один скрипт что ли?).User ended message by pressing # -- <SIP/701-0000008a> Playing 'auth-thankyou.slin' (language 'ru') -- Recording was 0 seconds long but needs to be at least 4 - abandoning -- Executing [703@internal:7] Goto("SIP/701-0000008a", "scrtest,s,1") in new stack -- Goto (scrtest,s,1) -- Executing [s@scrtest:1] System("SIP/701-0000008a", "echo "701" >> /var/spool/asterisk/temp1234/701.txt") in new stack -- Executing [s@scrtest:2] System("SIP/701-0000008a", "/var/spool/asterisk/test_call_list.sh") in new stack -- Auto fallthrough, channel 'SIP/701-0000008a' status is 'BUSY'
В данном случае я в ручную прописывал путь к моему 701.txt файлу(в нем номер звонившего) в конце скрипта, где
done < var/spool/../701.txt
, это если статика. Но ведь каждый раз прописывать в скрипте в ручную путь к
тому файлу – это нонсенс, зачем тогда скрипт спрашивается,и поэтому из этого вытекает вторая проблема :2) я не знаю как сделать, что бы в скрипте в конце, где команда (done < var/../ЁЁЁ.txt) на месте ЁЁЁ – было имя того .txt-файла который создавался ранее(в нем номер звонившего), то есть мой CALLERID, который в шапке скрипта написан.
Еще раз приведу код:
[internal] exten => _XXX,1,Dial(SIP/${EXTEN},10) same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) same => n(unavail),VoiceMail(${EXTEN}@voicemail,u) same => n,GoTo(scrtest,s,1) same => n,Hangup() same => n(busy),VoiceMail(${EXTEN}@voicemail,b) same => n,GoTo(scrtest,s,1) same => n,Hangup() exten => 1,1,VoiceMailMain(${CALLERID(num)}@voicemail) same => n,Hangup() [scrtest] exten => s,1,System(echo "${CALLERID(num)}" >> /var/spool/asterisk/temp1234/${CALLERID(num)}.txt) exten => s,n,System(/var/spool/asterisk/test_call_list.sh) [out_voicemessage] ;exten => failed,1,Set(NumberDialed=${CUT(PassedInfo,,1)}) ;exten => failed,n,SetCDRUserField(${NumberDialed}) exten => s,1,Answer exten => s,n,Wait(2) exten => s,n,Background(/var/lib/asterisk/sounds/vm-youhave) exten => s,n,Background(/var/lib/asterisk/sounds/vm-INBOX) exten => s,n,Background(/var/lib/asterisk/sounds/vm-message) exten => s,n,Hangup
21.11.2016 в 10:07 #12941Amon_R90УчастникС созданием файлов разобрался и добавлением в них соответствующих CALLERID(num)…
Ошибки в синтаксисе и в семантике допустил.
Теперь буду решать вопрос о корректном создании и исполнении .call файлов21.11.2016 в 04:25 #12940Amon_R90Участникне успел дописать, вот необходимые строчки(выше).
21.11.2016 в 03:48 #12938Amon_R90УчастникС предыдущей задачей справился, вроде не так сложно как оказалось:) а вот по следующей задаче есть вопросы!
Допустим, мы позвонили нашему внутреннему абоненту, он не ответил, и мы оставили ГС. Необходимо как то послать ему уведомления(автодозвон), что бы он догадался проверить ГП(не всегда обращаешь внимание ведь). Так вот, решил сделать все с помощью .call файлов и скриптов, идея такая: как только мы оставили ГС, запускается скрипт для создания текстового файла в котором будет номер куда мы звонили, далее запускается скрипт на создание .call файла, с указанием на текстовой файл с номером. Проблема состоит в том что Астер игнорирует команду System(/../test.sh) в экстеншене. Подскажите в чем проблема?
[internal]
exten => _XXX,1,Dial(SIP/${EXTEN},10)
same => n,GotoIf($[“${DIALSTATUS}” = “BUSY”]?busy:unavail)
same => n(unavail),VoiceMail(${EXTEN}@voicemail,u)same => n,System(/var/…/test_txt_list.sh)
same => n,System(echo “${CALLERID(num)}” /var/spool/asterisk/temp1234/nomera.txt)same => n,Hangup()
same => n(busy),VoiceMail(${EXTEN}@voicemail,b)
same => n,Hangup()Скрипт на создание текстового файла:
#!/bin/bash
echo $1 > /var/spool/asterisk/temp1234/nomera.txt
exit 0Скрипт на создание .call файла(сам скрипт не мой, я в нем только адреса файлов поменял под мои):
#!/bin/sh
while read number; do
cat <<EOF > /var/spool/asterisk/test1234/$number
Channel: SIP/voip_trunk/$number
Callerid: $number
MaxRetries: 5
RetryTime: 1800
WaitTime: 30
Context: out_voicemessage ;тут описан экстеншн с дозвоном и проигрыванием ГС о присутствии ГС
;на почте у абонента
Extension: s
Priority: 1EOF
chown asterisk:asterisk /var/…/$number
mv /var/…/$number /var/spool/asterisk/outgoing
echo “$number”
number=expr $number + 1
while [ “$?” -eq “0” ]
do
count_files ()
{
count_f=ls /var/spool/asterisk/outgoing | wc -l
if [ “$count_f” -eq “30” ]; then
sleep 10
return 0
else
return 1
fi
}
count_files
done
done < /var/…/nomera.txt
exit 022.10.2016 в 20:13 #12716Amon_R90УчастникСпасибо большое!
-
АвторСообщения