Amon_R90

 

Ответы в темах

Просмотр 11 сообщений - с 1 по 11 (из 11 всего)
  • Автор
    Сообщения
  • #13090
    Amon_R90
    Участник

    Так через пробел. Первый будет $1, а второй $2, емнип.

    Спасибо большое!:)

    #13076
    Amon_R90
    Участник

    проблема решена, все сделал, все получилось.

    #13004
    Amon_R90
    Участник

    И убрать конструкцию while…

    Спасибо большое!!!
    Со скриптом разобрался, понял как передавать в него переменную, все получается. Звоним, оставляем ГС, создается .call-файл, перемещается в папку, дозванивается и предупреждает о наличии нового ГС.
    Да, действительно, несколько строк кода можно теперь просто убрать:)

    А не подскажете как через System в скрипт передать два параметра? $1 – это у меня ${CONNECTEDLINE(number)}, и мне нужно второй передать в скрипт это – ${CALLERID(num)}. посмотрел получается либо через AGI, либо еще один скрипт создавать, в котором будет прописан список моих параметров передаваемых? ведь через “,” , “|” не получится…

    #12986
    Amon_R90
    Участник

    Вот смотрю я скрипт. А “number” он откуда бере…

    “number” это файл в котором хранится номер того кому звонили(тот кто не ответил), а из этого файла и берется аргумент, и на его основе составляется .call-файл.
    Я не знаю как по другому сделать, что бы не “Кмк создавать файл и потом его читать лишнее.”, со скриптами 3й день только работаю, раньше – в жизни не прикасался, поэтому некоторые аспекты для меня в новинку. Может подскажете тогда как это реализовать?)
    Номер там без “+”, так как пока практикуюсь настраивать только внутреннюю сеть(номера там простые: 100,101,102, и тд).

    #12974
    Amon_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, а это не слишком уж важная(нужная) задача для того кто следит за корректной работой программы. Да и ведь не всегда будет получаться что человек будет находиться на своем рабочем месте, и поэтому хотел, что бы этот процесс запускался из самого астера автоматически.

    #12965
    Amon_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 я переделал в экстеншенах, сейчас путями к файлам, папкам в порядке.

    #12959
    Amon_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 
    #12941
    Amon_R90
    Участник

    С созданием файлов разобрался и добавлением в них соответствующих CALLERID(num)…
    Ошибки в синтаксисе и в семантике допустил.
    Теперь буду решать вопрос о корректном создании и исполнении .call файлов

    #12940
    Amon_R90
    Участник

    не успел дописать, вот необходимые строчки(выше).

    #12938
    Amon_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: 1

    EOF
    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 0

    #12716
    Amon_R90
    Участник

    Спасибо большое!

Просмотр 11 сообщений - с 1 по 11 (из 11 всего)