Asterisk SayNumber nefunguje

SW PBX Asterisk, nastavení, konfigurace, rady, návody, zkušenosti.

Asterisk SayNumber nefunguje

Postby milan.benicek » 28 Jan 2013 08:31

Reakce na dotaz zde
stepos wrote:Hezký večer,
začínám s Asteriskem, a nejde mi spustit SayNumber

Code: Select all
 -- Starting simple switch on 'DAHDI/1-1'
    -- Executing [s@incoming:1] Set("DAHDI/1-1", "CHANNEL(language)=cs") in new stack
    -- Executing [s@incoming:2] SayNumber("DAHDI/1-1", "s") in new stack
    -- Executing [s@incoming:3] Hangup("DAHDI/1-1", "") in new stack
  == Spawn extension (incoming, s, 3) exited non-zero on 'DAHDI/1-1'
    -- Hanging up on 'DAHDI/1-1'
    -- Hungup 'DAHDI/1-1'
    -- Starting simple switch on 'DAHDI/1-1'
    -- Executing [s@incoming:1] Set("DAHDI/1-1", "CHANNEL(language)=cs") in new stack
    -- Executing [s@incoming:2] SayNumber("DAHDI/1-1", "s") in new stack
    -- Executing [s@incoming:3] Hangup("DAHDI/1-1", "") in new stack
  == Spawn extension (incoming, s, 3) exited non-zero on 'DAHDI/1-1'
    -- Hanging up on 'DAHDI/1-1'
    -- Hungup 'DAHDI/1-1'
    -- Starting simple switch on 'DAHDI/1-1'
    -- Executing [s@incoming:1] Set("DAHDI/1-1", "CHANNEL(language)=cs") in new stack
    -- Executing [s@incoming:2] SayNumber("DAHDI/1-1", "s") in new stack
    -- Executing [s@incoming:3] Hangup("DAHDI/1-1", "") in new stack
  == Spawn extension (incoming, s, 3) exited non-zero on 'DAHDI/1-1'
    -- Hanging up on 'DAHDI/1-1'
    -- Hungup 'DAHDI/1-1'


Když volám, v telefonu pouze zvoní tón, a pak se ozve asi po 4tvrtém zazvonění obsazovací tón.

extension.conf:

Code: Select all
[incoming]

exten => s,1,Set(CHANNEL(language)=cs)
exten => s,n,SayNumber(${EXTEN})
exten => s,n,Hangup()



co dělám špatně?
Díky za pomoc
Stepan


Já vidím 2 problémy:
1) V Asterisku je/byl trochu zmatek s language/country kódem pro češtinu. Minimálně do verze 1.4, možná 1.6 se používala zkratka cz (ISO 3166) namísto široce rozšířeného a správného cs (ISO 639). Dokonce jsme viděl patch, který to měl opravovat, ale nemyslím si, že to proběhlo. Vývojáři totiž rozlišují/pletou jazyk cs a zemi cz. Abych to zkrátil, já bych zkusil výraz
Code: Select all
Set(CHANNEL(language)=cz)


2) Jak je koneckonců vidět i z logu, snažíte se pomocí SayNumber vyslovit hodnotu proměnné EXTEN. Jenže tak jak jste to napsal to není číslo, ale výraz "s". To sice z hlediska Asterisk kódu není špatně, ale SayNumber to určitě nezpracuje a nevysloví. Dokonce bych čekal chybovou hlášku. Pro otestování SayNumber bych zkusil např. toto:
Code: Select all
exten => s,1,Set(CHANNEL(language)=cz)
exten => s,n,SayNumber(5)
exten => s,n,Hangup()

nebo toto:
Code: Select all
exten => s,1,Goto(5,1)
exten => 5,1,Set(CHANNEL(language)=cz)
exten => 5,n,SayNumber(${EXTEN})
exten => 5,n,Hangup()
milan.benicek
 
Posts: 66
Joined: 11 Jan 2013 13:41

Re: Asterisk SayNumber nefunguje

Postby stepos » 28 Jan 2013 12:00

Děkuji za odpověď

zkoušel jsem to s Set(CHANNEL(language)=cs) i Set(CHANNEL(language)=cz) a dokonce i bez.

Tentokrát v kontetu internal. Nemůže to nají ty soubory.
Mám je ve /var/lib/asterisk/sounds/digits/5.wav

Asi to bude problém, že to je ve wav. Kde to mám nastavit?


-- Executing [611@internal:1] SayNumber("SIP/1-00000003", "555") in new stack
[Jan 28 11:47:15] WARNING[5241]: file.c:644 ast_openstream_full: File digits/5 does not exist in any format
[Jan 28 11:47:15] WARNING[5241]: file.c:950 ast_streamfile: Unable to open digits/5 (format 0x4 (ulaw)): No such file or directory
[Jan 28 11:47:15] WARNING[5241]: file.c:644 ast_openstream_full: File digits/hundred does not exist in any format
[Jan 28 11:47:15] WARNING[5241]: file.c:950 ast_streamfile: Unable to open digits/hundred (format 0x4 (ulaw)): No such file or directory
[Jan 28 11:47:15] WARNING[5241]: file.c:644 ast_openstream_full: File digits/50 does not exist in any format
[Jan 28 11:47:15] WARNING[5241]: file.c:950 ast_streamfile: Unable to open digits/50 (format 0x4 (ulaw)): No such file or directory
[Jan 28 11:47:15] WARNING[5241]: file.c:644 ast_openstream_full: File digits/5 does not exist in any format
[Jan 28 11:47:15] WARNING[5241]: file.c:950 ast_streamfile: Unable to open digits/5 (format 0x4 (ulaw)): No such file or directory
-- Executing [611@internal:2] Hangup("SIP/1-00000003", "") in new stack
== Spawn extension (internal, 611, 2) exited non-zero on 'SIP/1-00000003'



Ostatní zvuky mam v /var/lib/asterisk/sounds/cs. Ale playback() je taky nemůže najít. Je to v adresáři cs, protože, když jsem měl v chan_dahdi.conf parametr language=cz, asterisk vracel chybu:

say.c: cz is not a standard language code. Please switch to using cs instead.


verzi mám Asterisk 1.8.5.0

Díky za pomoc
Štěpán
stepos
 

Re: Asterisk SayNumber nefunguje

Postby milan.benicek » 28 Jan 2013 13:59

Z toho co píšete to vypadá, že problém cs/cz už zřejmě vyřešili, tím lépe.

Přehrání čísla příkazem SayNumber se obecně skládá z jazykové gramatiky (jak to vyslovit) a z promptů (nahrávek jednotlivých fragmentů). Otázku gramatiky řeší nastavení jazyka a to se zdá být vyřešeno.
Zbývá dořešit prompty. Zkuste se podívat do adresáře /var/lib/asterisk/sounds/digits . Zde by měly být anglické číslovkové prompty a také podadresář cs (případně další jazyky) s českými prompty. Podle chyby, kterou vám to píše tipuji, že tam adresář /var/lib/asterisk/sounds/digits možná vůbec nemáte.
milan.benicek
 
Posts: 66
Joined: 11 Jan 2013 13:41

Re: Asterisk SayNumber nefunguje

Postby stepos » 28 Jan 2013 14:13

Nevyřešil, plavu v tom jako kapr.
Ten adresář tam mám, ale nemám v něm podadresář cs. I když ho nakopíruji, tak to nefunguje - stejné chyby.

1) Nerozumím, kde se globálně nastavuje celkově ta čeština, abych nemusel vždy psát Set(CHANNEL(language)=cs)? Nebo se to nedá nastavit globálně?
2) Chápu správně, že pak se bude asterisk dívat do podadresářů cs ve všech zvukových adresářích?
3) Jakou roli hraje nastavení languageprefix = yes v asterisk.conf?
4) Pokud mám všechny české zvuky ve formátu wav, musí se někde nastavit, že to je wav a ne gsm, nebo to nevadí?

Díky za odpovědi, omlouvám se za mé zmatky.
Stěpan
stepos
 

Re: Asterisk SayNumber nefunguje

Postby milan.benicek » 28 Jan 2013 14:44

No ... je to takhle, Asterisk má 2 typy způsobů pro ukládání jazykových nahrávek:

1) Starý způsob platný pro verze 1.2 a defaultně pro 1.4 (i když zde už je možnost volby) - pro češtinu se používají podadresáře např. digits/cs, letters/cs, phonetic/cs. Pro zpětnou kompatibilitu je v nových verzích Asterisku potřeba nastavit languageprefix=no

2) Nový způsob použitelný od verze 1.4 dále, kdy ve /var/lib/asterisk/sounds/ je podadresář cs a v něm pak další podadresáře digits, letters, phonetic (tedy teď už bez cs). Nastavení tohoto formátu odpovídá languageprefix=yes.

Ve vašem případě, kdy zřejmě používáte nový formát, je potřeba zkontrolovat obsah /var/lib/asterisk/sounds/cs/digits, zda tam jsou promty - v testech se vám objevuje 5.wav resp. 5.gsm, tak jestli tam opravdu je.
Druhou variantou je, že to necháte tak jak to je - tzn. následující příkaz vypíše nějaké propty:
Code: Select all
ls -la /var/lib/asterisk/sounds/digits/cs/5*
pak stačí přepnout languageprefix=no a mělo by to taky fungovat.
milan.benicek
 
Posts: 66
Joined: 11 Jan 2013 13:41

Re: Asterisk SayNumber nefunguje

Postby milan.benicek » 28 Jan 2013 14:51

stepos wrote:Nevyřešil, plavu v tom jako kapr.
1) Nerozumím, kde se globálně nastavuje celkově ta čeština, abych nemusel vždy psát Set(CHANNEL(language)=cs)? Nebo se to nedá nastavit globálně?
2) Chápu správně, že pak se bude asterisk dívat do podadresářů cs ve všech zvukových adresářích?
3) Jakou roli hraje nastavení languageprefix = yes v asterisk.conf?
4) Pokud mám všechny české zvuky ve formátu wav, musí se někde nastavit, že to je wav a ne gsm, nebo to nevadí?


Ještě v rychlosti k vašim otázkám:
Ad 1) Lze nastavit výchozí jazyk pro konkrétní channel výrazem language=cs např. v chan_dahdi.conf, sip.conf, iax.conf atd.
Ad 2) Bude se dívat do cs adresářů podle zvolené metody viz předchozí post.
Ad 3) Viz. předchozí post - volba metody adresářové struktury jazykových mutací.
Ad 4) Nastavovat se to nemusí, Asterisk vždy hledá podle jména promptu a příponu si vybere sám, podle toho co zrovna potřebuje viz logovací hláška "... does not exist in any format"
milan.benicek
 
Posts: 66
Joined: 11 Jan 2013 13:41


Re: Asterisk SayNumber nefunguje

Postby stepos » 28 Jan 2013 17:43

Tak nevím...
ls -la /var/lib/asterisk/sounds/cs/digits/5*
-rw-r--r--. 1 asterisk asterisk 18892 8. zář 2009 /var/lib/asterisk/sounds/cs/digits/5_e.wav
-rw-r--r--. 1 asterisk asterisk 14586 8. zář 2009 /var/lib/asterisk/sounds/cs/digits/5_e3.wav
-rw-r--r--. 1 asterisk asterisk 14310 8. zář 2009 /var/lib/asterisk/sounds/cs/digits/5_e9.wav
-rw-r--r--. 1 asterisk asterisk 9010 8. zář 2009 /var/lib/asterisk/sounds/cs/digits/5.wav
-rw-r--r--. 1 asterisk asterisk 14434 8. zář 2009 /var/lib/asterisk/sounds/cs/digits/50.wav


a pak

Code: Select all
[s@incoming:1] Set("DAHDI/1-1", "CHANNEL(language)=cs") in new stack
    -- Executing [s@incoming:2] SayNumber("DAHDI/1-1", "555") in new stack
[Jan 28 17:37:29] WARNING[5808]: file.c:644 ast_openstream_full: File digits/5 does not exist in any format
[Jan 28 17:37:29] WARNING[5808]: file.c:950 ast_streamfile: Unable to open digits/5 (format 0x4 (ulaw)): No such file or directory
[Jan 28 17:37:29] WARNING[5808]: file.c:644 ast_openstream_full: File digits/set does not exist in any format
[Jan 28 17:37:29] WARNING[5808]: file.c:950 ast_streamfile: Unable to open digits/set (format 0x4 (ulaw)): No such file or directory
[Jan 28 17:37:29] WARNING[5808]: file.c:644 ast_openstream_full: File digits/50 does not exist in any format
[Jan 28 17:37:29] WARNING[5808]: file.c:950 ast_streamfile: Unable to open digits/50 (format 0x4 (ulaw)): No such file or directory
[Jan 28 17:37:29] WARNING[5808]: file.c:644 ast_openstream_full: File digits/5 does not exist in any format
[Jan 28 17:37:29] WARNING[5808]: file.c:950 ast_streamfile: Unable to open digits/5 (format 0x4 (ulaw)): No such file or directory


languageprefix = yes
aspoň doufám, ale nevím, jak to ověřit

musí být tedy zádrhel i v něčem jiném, protože jsem současně nechal soubory i v

ls -la /var/lib/asterisk/sounds/digits/cs/5*
-rw-r--r--. 1 asterisk asterisk 18892 8. zář 2009 /var/lib/asterisk/sounds/digits/cs/5_e.wav
-rw-r--r--. 1 asterisk asterisk 14586 8. zář 2009 /var/lib/asterisk/sounds/digits/cs/5_e3.wav
-rw-r--r--. 1 asterisk asterisk 14310 8. zář 2009 /var/lib/asterisk/sounds/digits/cs/5_e9.wav
-rw-r--r--. 1 asterisk asterisk 9010 8. zář 2009 /var/lib/asterisk/sounds/digits/cs/5.wav
-rw-r--r--. 1 asterisk asterisk 14434 8. zář 2009 /var/lib/asterisk/sounds/digits/cs/50.wav


jsem z to ho jelen... Děkuji za pomoc
stepos
 
Posts: 38
Joined: 28 Jan 2013 15:57

Re: Asterisk SayNumber nefunguje

Postby milan.benicek » 28 Jan 2013 18:05

Tak to je vážně divné. Ještě mě napadá - jak vypadá konfigurace /etc/asterisk/asterisk.conf ? Je dost možné, že adresář pro sounds je někde úplně jinde ...
milan.benicek
 
Posts: 66
Joined: 11 Jan 2013 13:41

Re: Asterisk SayNumber nefunguje

Postby stepos » 28 Jan 2013 18:08

[directories](!)
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astdbdir => /var/lib/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk

[options]
;verbose = 3
;debug = 3
;alwaysfork = yes ; Same as -F at startup.
;nofork = yes ; Same as -f at startup.
;quiet = yes ; Same as -q at startup.
;timestamp = yes ; Same as -T at startup.
;execincludes = yes ; Support #exec in config files.
;console = yes ; Run as console (same as -c at startup).
;highpriority = yes ; Run realtime priority (same as -p at
; startup).
;initcrypto = yes ; Initialize crypto keys (same as -i at
; startup).
;nocolor = yes ; Disable console colors.
;dontwarn = yes ; Disable some warnings.
;dumpcore = yes ; Dump core on crash (same as -g at startup).
languageprefix = yes ; Use the new sound prefix path syntax.
;internal_timing = yes
;systemname = my_system_name ; Prefix uniqueid with a system name for
; Global uniqueness issues.
;autosystemname = yes ; Automatically set systemname to hostname,
; uses 'localhost' on failure, or systemname if
; set.
;maxcalls = 10 ; Maximum amount of calls allowed.
;maxload = 0.9 ; Asterisk stops accepting new calls if the
; load average exceed this limit.
;maxfiles = 1000 ; Maximum amount of openfiles.
;minmemfree = 1 ; In MBs, Asterisk stops accepting new calls if
; the amount of free memory falls below this
; watermark.
;cache_record_files = yes ; Cache recorded sound files to another
; directory during recording.
;record_cache_dir = /tmp ; Specify cache directory (used in conjunction
; with cache_record_files).
;transmit_silence = yes ; Transmit silence while a channel is in a
; waiting state, a recording only state, or
; when DTMF is being generated. Note that the
; silence internally is generated in raw signed
; linear format. This means that it must be
; transcoded into the native format of the
; channel before it can be sent to the device.
; It is for this reason that this is optional,
; as it may result in requiring a temporary
; codec translation path for a channel that may
; not otherwise require one.
;transcode_via_sln = yes ; Build transcode paths via SLINEAR, instead of
; directly.
;runuser = asterisk ; The user to run as.
;rungroup = asterisk ; The group to run as.
;lightbackground = yes ; If your terminal is set for a light-colored
; background.
;forceblackbackground = yes ; Force the background of the terminal to be
; black, in order for terminal colors to show
; up properly.
;defaultlanguage = en ; Default language
documentation_language = en_US ; Set the language you want documentation
; displayed in. Value is in the same format as
; locale names.
;hideconnect = yes ; Hide messages displayed when a remote console
; connects and disconnects.
;lockconfdir = no ; Protect the directory containing the
; configuration files (/etc/asterisk) with a
; lock.

; Changing the following lines may compromise your security.
;[files]
;astctlpermissions = 0660
;astctlowner = root
;astctlgroup = apache
;astctl = asterisk.ctl

[compat]
pbx_realtime=1.6
res_agi=1.6
app_set=1.6
stepos
 
Posts: 38
Joined: 28 Jan 2013 15:57

Re: Asterisk SayNumber nefunguje

Postby stepos » 28 Jan 2013 18:25

koukám, že tam vůbec adresář /var/lib/asterisk/sounds není, že?
stepos
 
Posts: 38
Joined: 28 Jan 2013 15:57

Next

Return to Asterisk

 


  • Related topics
    Replies
    Views
    Last post
cron