Při volání na 3 různá čísla zobrazí vždy pouze první

Post a reply


This question is a means of preventing automated form submissions by spambots.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :| :mrgreen: :geek: :ugeek: :yes: :no:
BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON
Topic review
   

Expand view Topic review: Při volání na 3 různá čísla zobrazí vždy pouze první

Re: Při volání na 3 různá čísla zobrazí vždy pouze první

Post by Guest » 24 Jan 2014 15:49

Provozuju podobne nestastnou konfiguraci asterisku a resil jsem to jednoduse tim, ze jsem rozpitval INVITE zpravu (pomoci SIP header) a nasel jsem si na jake cislo se skutecne volalo.

Re: Při volání na 3 různá čísla zobrazí vždy pouze první

Post by milan.benicek » 20 Sep 2013 15:42

Tak sláva!
Ještě se na to podívám, asi je tam opravdu chyba a bude potřeba jít nahlásit.

Re: Při volání na 3 různá čísla zobrazí vždy pouze první

Post by stepos » 20 Sep 2013 15:03

Funguje to, jen to musí být takto
Code: Select all
U(incoming_spv_hint^s^1^${EXTEN:6:3})


a pak se načítá až 3. argument -
Code: Select all
exten => s,1,Set(DEVICE_STATE(Custom:linka${ARG3})=INUSE)


v navrhovaném zápise to předávalo s - tedy 1. argument.

Díky moc za pomoc

Re: Při volání na 3 různá čísla zobrazí vždy pouze první

Post by milan.benicek » 20 Sep 2013 14:03

Tak to je určitě lepší varianta.

Zkuste to co popisoval JardaX a uvidíte.

Re: Při volání na 3 různá čísla zobrazí vždy pouze první

Post by stepos » 20 Sep 2013 12:34

Naše verze je
Asterisk 11.2.1, myslím, že nejnovější.

Re: Při volání na 3 různá čísla zobrazí vždy pouze první

Post by JardaX » 20 Sep 2013 12:16

Jj, parametr U se totiž chová jako interní GoSub - proto je tam v té chybové hlášce následující:
Code: Select all
Internal Gosub(incoming_spv_hint,s,1(cislo8,1)) start

Jinak je to ale vážně divný. Jestli jste se tam někde neupsal, tak to vypadá na chybu v Asterisku.

V zásadě totiž můžete použít 3 varianty pro dosažení podobného chování:
  • G - přesune běh programu na context^exten^pri a pokračuje tam
  • M - spustí makro - makro vrací řízení zpět
  • U - spustí interní GoSub - Return v subrutině vrací řízení zpět
Špatně se to hledá, ale úplný formát syntaxe těchto parametrů by měl být (alespoň v posledních verzích asterisku):
Code: Select all
U([[context^]exten^]priority[(arg1[^...][^argN])])


Myslím, že to celkem odpovídá tomu, co se vám tam vygenerovalo. Všimněte si závorky s args - myslím, že by mělo jít i v případě BUGu vymyslet formát volání, kterým chybu obejdete a přesto do subrutiny dostanete ${EXTEN} ve formě argumentu ${ARG1}. Např.
Code: Select all
...
exten => _cislo[7-9],3,Dial(SIP/1&SIP/3&SIP/4&dahdi/4,60,U(incoming_spv_hint^s^1(${EXTEN:6:3})))
...

[incoming_spv_hint]
exten => s,1,Set(DEVICE_STATE(Custom:linka${ARG1})=INUSE)
exten => s,n,Return()


Jen tak pro zajímavost - jakou máte verzi asterisku?

Re: Při volání na 3 různá čísla zobrazí vždy pouze první

Post by milan.benicek » 19 Sep 2013 17:28

Problém bude v tomhle:
stepos wrote:(incoming_spv_hint,s,1(cislo8,1))

V závorce u U option se vyrobí nesmysl a extension s v tom kontextu pak skutečně není.

Buď tam máte překlep v kódu nebo je chyba ve vaší verzi asterisku. Už jsme v minulosti na něco podobného také narazili.

Re: Při volání na 3 různá čísla zobrazí vždy pouze první

Post by stepos » 19 Sep 2013 12:23

Také nefunguje,
píše to v konzoli, čemuž nerozumím, pokud správně chápu, že nemůže najít ten kontext a řádek.

Code: Select all
 -- SIP/1-000001c9 Internal Gosub(incoming_spv_hint,s,1(cislo8,1)) start
[Sep 19 12:58:40] ERROR[6353][C-00000127]: app_stack.c:566 gosub_exec: Attempt to reach a non-existent destination for Gosub: (Context:incoming_spv_hint, Extension:s, Priority:1)



Code: Select all
[incoming_spv_hint]
exten => _cislo[7-9],1,Set(DEVICE_STATE(Custom:linka${EXTEN:6:3})=INUSE)
exten => _cislo[7-9],n,Return()

[incoming_spv]
exten => _cislo[7-9],1,Set(DEVICE_STATE(Custom:linka${EXTEN:6:3})=RINGING)
exten => _cislo[7-9],2,Set(SPL_LINKA=${EXTEN:6:3})
exten => _cislo[7-9],3,Dial(SIP/1&SIP/3&SIP/4&dahdi/4,60,U(incoming_spv_hint^${EXTEN}^1))
exten => _cislo[7-9],n,Hangup()



;polozeni hovoru
exten=> h,1,Set(DEVICE_STATE(Custom:linka${SPL_LINKA})=NOT_INUSE)
exten => h,n,Set(SPL_LINKA=0)

Re: Při volání na 3 různá čísla zobrazí vždy pouze první

Post by JardaX » 19 Sep 2013 11:14

A jo vlastně, hovor musí po vykonání řádků v hint_context skončit, protože tam nic dalšího není. Muselo by se to doplnit např. o Meetme nebo jinou metodu opětovného spojení call legs.

Sice by asi stačilo vytvořit MeetMe 1000 a upravit hint_context kontext takto:
Code: Select all
[hint_context]
exten => _cislo[7-9],1,Goto(konf)
exten => _cislo[7-9],2,NoOp(Strana volana)
exten => _cislo[7-9],n,Set(DEVICE_STATE(Custom:linka${EXTEN:8:1})=INUSE)
exten => _cislo[7-9],n(konf),MeetMe(1000)
exten => _cislo[7-9],n,Hangup


Tohle ale není moc elegantní

Možná by bylo lepší to zkusit pomocí U parametru. To by mohlo fungovat, ale nezkoušel jsem to.
Code: Select all
[incoming_spv]
exten => _cislo[7-9],1,Set(DEVICE_STATE(Custom:linka${EXTEN:8:1})=RINGING)
exten => _cislo[7-9],n,Set(SPL_LINKA=${EXTEN:8:1})
exten => _cislo[7-9],n,Dial(SIP/1&SIP/3&SIP/4&dahdi/4,60,U(hint_context^${EXTEN}^1))
exten => _cislo[7-9],n,Hangup()

;polozeni hovoru
exten => h,1,Set(DEVICE_STATE(Custom:linka${SPL_LINKA})=NOT_INUSE)
exten => h,n,Set(SPL_LINKA=0)

[hint_context]
exten => _cislo[7-9],1,NoOp(Spoustim hint_context pro volanou stranu)
exten => _cislo[7-9],n,Set(DEVICE_STATE(Custom:linka${EXTEN:8:1})=INUSE)
exten => _cislo[7-9],n,Return


Jestli to budete zkoušet, tak dejte vědět jak to dopadlo, taky by mě to zajímalo.

Re: Při volání na 3 různá čísla zobrazí vždy pouze první

Post by stepos » 19 Sep 2013 09:08

Tak tohle nefunguje,
ten přeskok do jiného kontextu vyvolal při zvednutí na pobočce obsazovací tón a rozpojení hovoru. I když to není přeskok do jiného kontextu, ale jen na následující řádek, hovor se po zvednutí rozpojí.

Code: Select all
[incoming_spv]
exten => _cislo[7-9],1,Set(DEVICE_STATE(Custom:linka${EXTEN:8:1})=RINGING)
exten => _cislo[7-9],2,Set(SPL_LINKA=${EXTEN:8:1})
.
exten => _cislo[7-9],3,Dial(SIP/1&SIP/3&SIP/4&dahdi/4,60,G(incoming_spv^${EXTEN}^4))
exten => _cislo[7-9],4,Set(DEVICE_STATE(Custom:linka${EXTEN:8:1})=INUSE)

exten => _cislo[7-9],n,Hangup()


;polozeni hovoru
exten=> h,1,Set(DEVICE_STATE(Custom:linka${SPL_LINKA})=NOT_INUSE)
exten => h,n,Set(SPL_LINKA=0)



exten => cislo7,hint,Custom:linka7
exten => cislo8,hint,Custom:linka8
exten => cislo9,hint,Custom:linka9

Top

cron