Страница 1 из 1

SayNumber из файла

Добавлено: 24 окт 2018, 10:44
El_Vago
Добрый день. Хотел сделать произношение суммы из файла. Как понял с 13-го Астериска ReadFile не работает. Делаю конструкцией

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

exten => 230,1,Answer()
exten => 230,n,Set(summ=${FILE(/tmp/test.txt,4)})
exten => 230,n,SayNumber(${summ})
exten => 230,n,HangUp()
Файл /tmp/test.txt с числом присутствует. При этом слышу короткие гудки, в консоле:

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

    -- Executing [230@support:1] Answer("SIP/utde-0008779b", "") in new stack
    -- Executing [230@support:2] Set("SIP/utde-0008779b", "summ=") in new stack
    -- Executing [230@support:3] SayNumber("SIP/utde-0008779b", "") in new stack
Запись в файл с помощью Set(FILE(/tmp/test.txt)=1986) работает/ Или считывание делается иначе, чем с ReadFile?

Re: SayNumber из файла

Добавлено: 24 окт 2018, 11:17
Kroteg
https://wiki.asterisk.org/wiki/display/ ... _SayNumber
мэйби что-то подскажет?
О 13 Астериске
The module app_readfile was deprecated and has been removed. Users of ReadFile should use func_env's FILE function instead.

Re: SayNumber из файла

Добавлено: 24 окт 2018, 12:22
El_Vago
Просто

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

exten => 230,1,Answer()
exten => 230,n,SayNumber(1986)
exten => 230,n,HangUp()
Работает на Ура. Не работает именно с файлом. Может Вы ссылкой ошиблись, которую хотели дать? Раньше, когда-то считывание и произношение из файлов работало, но то было на ReadFile.

Re: SayNumber из файла

Добавлено: 24 окт 2018, 13:10
ded
А у вас хелп выгружает по команде
CLI> core show function FILE ??

там пример есть ваш

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

;reads from the 11th byte to the end of the file (i.e. skips the first 10).
    Set(foo=${FILE(/tmp/test.txt,10)})
Предложу

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

    exten => 230,1,Answer()
    exten => 230,n,System(cat /tmp/test.txt)
    exten => 230,n,Set(summ=${FILE(/tmp/test.txt,4)})
    exten => 230,n,NoOp(test.txt is not ${summ})
    exten => 230,n,SayNumber(${summ})
    exten => 230,n,HangUp()

Re: SayNumber из файла

Добавлено: 24 окт 2018, 13:59
El_Vago
Да, по этому хелпу и делал. Сейчас в консоли

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

-- Executing [230@support:1] Answer("SIP/utde-00087a94", "") in new stack
    -- Executing [230@support:2] System("SIP/utde-00087a94", "cat /tmp/test.txt") in new stack
    -- Executing [230@support:3] Set("SIP/utde-00087a94", "summ=") in new stack
    -- Executing [230@support:4] NoOp("SIP/utde-00087a94", "test.txt is not ") in new stack
    -- Executing [230@support:5] SayNumber("SIP/utde-00087a94", "") in new stack

Re: SayNumber из файла

Добавлено: 24 окт 2018, 14:01
ded
Ничего нету в файле?
cat /tmp/test.txt

Re: SayNumber из файла

Добавлено: 24 окт 2018, 14:07
El_Vago
Есть, четырехзначное число.
Хм... интересно, как добавил еще несколько чисел, воспроизведение идет. Т.е. игнорируются первые 4 числа. Я думал, что 4 в конфиге - это произносить первые 4 числа. Балбес...

Re: SayNumber из файла

Добавлено: 24 окт 2018, 14:16
ded
Я поставил

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

  exten => 230,1,Answer()
    exten => *2911,n,System(cat /tmp/test.txt)
    exten => *2911,n,Set(SUMM=${FILE(/tmp/test.txt)})
    exten => *2911,n,NoOp(test.txt is not ${SUMM})
    exten => *2911,n,SayNumber(${SUMM})
    exten => *2911,n,HangUp()
и у меня прочиталось

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

    -- Executing [*2911@from-internal:1] Festival("SIP/721-000003d6", "Привет, чудики!") in new stack
  == Parsing '/etc/asterisk/festival.conf': Found
    -- Executing [*2911@from-internal:2] Festival("SIP/721-000003d6", "Что за наваждение?") in new stack
  == Parsing '/etc/asterisk/festival.conf': Found
    -- Executing [*2911@from-internal:3] Set("SIP/721-000003d6", "SUMM=123454321
    -- ") in new stack
    -- Executing [*2911@from-internal:4] NoOp("SIP/721-000003d6", "test.txt is not 123454321
    -- ") in new stack
    -- Executing [*2911@from-internal:5] SayNumber("SIP/721-000003d6", "123454321
    -- ") in new stack
    -- <SIP/721-000003d6> Playing 'digits/1.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/hundred.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/20.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/3.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/million.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/4.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/hundred.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/50.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/4.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/thousand.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/3.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/hundred.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/20.ulaw' (language 'en')
    -- <SIP/721-000003d6> Playing 'digits/1.ulaw' (language 'en')
Потом добавил обрезание
exten => *2911,n,Set(SUMM=${FILE(/tmp/test.txtб4)})
и прочиталось 5 цифр

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

    -- Executing [*2911@from-internal:3] Set("SIP/721-000003d7", "SUMM=54321
    -- ") in new stack
    -- Executing [*2911@from-internal:4] NoOp("SIP/721-000003d7", "test.txt is not 54321
    -- ") in new stack
    -- Executing [*2911@from-internal:5] SayNumber("SIP/721-000003d7", "54321