[Gelöst] Goto überträgt {EXTEN} aus dem letzten Context nicht richtig

Kip86

Neuer User
Mitglied seit
23 Sep 2008
Beiträge
84
Punkte für Reaktionen
0
Punkte
0
Hi

Ich möchte alle Anrufe ins Mobilnetz zu einem anderen Trunk leiten (jumblo-out). Der User hat context=sipphone901
Kompliziert ist das Ganze, weil die diversen User (in diesem Beispiel nur 901) verschiedene CALLERIDs haben, welche natürlich auch bei Anrufen ins Mobilnetz richtig angezeigt werden soll.

Ich habe versucht das so zu lösen, allerdings überträgt er bei einem Anruf zu 0664xxx offensichtlich aufgrund des Gotos die {EXTEN} aus dem letzten Context nicht richtig:
-- Executing [_X.@mobil:3] Dial("SIP/901-02d0b618", "SIP/_X.@jumblo-out,,r") in new stack


Festnetzanrufe funktionieren korrekt:
-- Executing [0732xxx@sipphone901:4] Dial("SIP/901-02d0b618", "SIP/0732xxx@av-out,,r") in new stack


extensions.conf:
Code:
[mobil]
exten => _X.,1,Set(CALLFILENAME=${CALLERID(num)}-${EXTEN}-${STRFTIME(${EPOCH},Europe/Berlin,%Y-%m-%d\,%H-%M-%S)})
exten => _X.,n,Monitor(wav,${CALLFILENAME},m)
exten => _X.,n,Dial(SIP/${EXTEN}@jumblo-out,,r)
exten => _X.,n,Hangup()


[901]
exten => _065[0-3579].,1,Set(CALLERID(num)=43720xxx)
exten => _065[0-3579].,n,Goto(mobil,_X.,1)
exten => _066[013-9].,1,Set(CALLERID(num)=43720xxx)
exten => _066[013-9].,n,Goto(mobil,_X.,1)
exten => _06[7-9]X.,1,Set(CALLERID(num)=43720xxx)
exten => _06[7-9]X.,n,Goto(mobil,_X.,1)
exten => _X.,1,Set(CALLFILENAME=${CALLERID(num)}-${EXTEN}-${STRFTIME(${EPOCH},Europe/Berlin,%Y-%m-%d\,%H-%M-%S)})
exten => _X.,n,Set(CALLERID(num)=43720xxx)
exten => _X.,n,Monitor(wav,${CALLFILENAME},m)
exten => _X.,n,Dial(SIP/${EXTEN}@av-out,,r)
exten => _X.,n,Hangup()


[sipphone901]
include => 901

Für jegliche Vorschläge zu einer Einfacheren Lösung wäre ich auch sehr dankbar. Aber wenn mir jemand sagen könnte, was an meiner "komplizierten" Lösung falsch ist, reicht mir das auch :blonk:

Asterisk Version 1.6.1.6

LG
 
Zuletzt bearbeitet:
allerdings überträgt er bei einem Anruf zu 0664xxx offensichtlich aufgrund des Gotos die {EXTEN} aus dem letzten Context nicht richtig

Doch, er macht genau das was Du ihm sagst. Goto(mobil,_X.,1) springt in den Context mobil, und dort auf die Exten "_X.", allerdings als String und nicht als Pattern. Du musst Goto(mobil,${EXTEN},1) machen, damit die exten=>_X. mit der entsprechenden Nummer angesprungen wird.

Warum setzt Du die abgehende Callerid nicht einfach anhand der internen? Beispiel hier.
 
Ich finde in Deinem Dialplan überhaupt kein nebenstellenabhängiges Set(CALLERID...). :gruebel:

In dem verlinkten Post macht die erste Codezeile genau das, was Du möchtest, nämlich der Nst 406 eine andere Callerid zu geben.

Du hast hoffentlich nicht für jede Nebenstelle einen eigenen Context (analog [901]), nur um die Callerid zu setzen, oder?
 
Doch *schäm* (hatte allerdings in meinen Anfängen keine Bedeutung, da die Nebenstellen aus anderen Gründen verschiedene Contexte hatten)

Das heißt, um das sauber zu lösen, müsste es so aussehen (ungetestet):
Code:
exten => _065[0-3579].,1,Set(CALLFILENAME=${CALLERID(num)}-${EXTEN}-${STRFTIME(${EPOCH},Europe/Berlin,%Y-%m-%d\,%H-%M-%S)})
exten => _065[0-3579]./901,n,Set(CALLERID(num)=43720xxx)
exten => _065[0-3579]./902,n,Set(CALLERID(num)=43664xxx)
exten => _065[0-3579].,n,Monitor(wav,${CALLFILENAME},m)
exten => _065[0-3579].,n,Dial(SIP/${EXTEN}@jumblo-out,,r)
exten => _065[0-3579].,n,Hangup()
[B]; wiederholt mit _066[013-9] und _06[7-9]X oder gibt es da auch etwas einfacheres??[/B]

exten => _X.,1,Set(CALLFILENAME=${CALLERID(num)}-${EXTEN}-${STRFTIME(${EPOCH},Europe/Berlin,%Y-%m-%d\,%H-%M-%S)})
exten => _X./901,n,Set(CALLERID(num)=43720xxx)
exten => _X./902,n,Set(CALLERID(num)=43664xxx)
exten => _X.,n,Monitor(wav,${CALLFILENAME},m)
exten => _X.,n,Dial(SIP/${EXTEN}@av-out,,r)
exten => _X.,n,Hangup()
 
Im Prinzip ja, man muss da nur unheimlich mit den Prioritäten aufpassen. Ich würd's deshalb so schreiben:

Code:
exten => _X.,1,Set(CALLFILENAME=${CALLERID(num)}-${EXTEN}-${STRFTIME(${EPOCH},Europe/Berlin,%Y-%m-%d\,%H-%M-%S)})
exten => _X./901,[COLOR="#FF0000"]2[/COLOR],Set(CALLERID(num)=43720xxx)
exten => _X./902,[COLOR="#FF0000"]2[/COLOR],Set(CALLERID(num)=43664xxx)
exten => _X.,[COLOR="#FF0000"]2,Noop()[/COLOR]
exten => _X.,n,Monitor(wav,${CALLFILENAME},m)
exten => _X.,n,Dial(SIP/${EXTEN}@av-out,,r)
exten => _X.,n,Hangup()

Wie andernorts bereits angemerkt, wenn es mehr Nebenstellen werden, empfielt sich der Einsatz einer Datenbank.

Man könnte den Dialplan schon noch zusammenfassen, zB. das setzen der Callerid in eine Subroutine (GoSub+Return).
 
Ok ich mach das ganze jetzt noch komplizierter: Einige Nebenstellen haben intern die selbe CID (welche sogleich eine Ringgroup ist und wenn man die intern anruft, läuten alle)
D.h. 901 und 902 haben 900 als CID und sollen aber extern unterschiedliche CID haben :confused:
 
Die Callerid 900 hast Du dann wohl in der sip.conf gesetzt, oder?

Auf die Schnelle würde ich sowas basteln:
Code:
exten => _X.,1,Set(chan=${CUT(CHANNEL,,1)})
exten => _X.,n,Set(chan=${CUT(chan,/,2)})
exten => _X.,n,ExecIf($[${chan}=901]?Set(CALLERID(num)=0815))
exten => _X.,n,ExecIf($[${chan}=902]?Set(CALLERID(num)=0816))

oder anhand des From Header:
Code:
exten => _X.,1,Set(chan=${SIP_HEADER(from)})
exten => _X.,n,Set(chan=${CUT(chan,@,1)})
exten => _X.,n,Set(chan=${CUT(chan,:,2)})
exten => _X.,n,ExecIf($[${chan}=901]?Set(CALLERID(num)=0815))
exten => _X.,n,ExecIf($[${chan}=902]?Set(CALLERID(num)=0816))

Geht vielleicht noch eleganter.
 
Vielen Dank, du hast mir schon sehr viel geholfen! :) Ich habe daraus jetzt schon einiges gebastelt:

Code:
exten => _065[0-3579].,1,Gosub(_X.,1)
exten => _065[0-3579].,n,Dial(SIP/${EXTEN}@jumblo-out,,r)
exten => _065[0-3579].,n,Hangup()
exten => _X.,1,Set(CALLFILENAME=${CALLERID(num)}-${EXTEN}-${STRFTIME(${EPOCH},Europe/Berlin,%Y-%m-%d\,%H-%M-%S)})
exten => _X./910,2,Set(CALLERID(num)=431xxx)
exten => _X.,2,Noop()
exten => _X.,n,Set(chan=${SIP_HEADER(from)})
exten => _X.,n,Set(chan=${CUT(chan,@,1)})
exten => _X.,n,Set(chan=${CUT(chan,:,2)})
exten => _X.,n,Noop(${chan})
exten => _X.,n,ExecIf($[${chan}=901]?Set(CALLERID(num)=43720xxx))
exten => _X.,n,ExecIf($[${chan}=902]?Set(CALLERID(num)=43664xxx))
exten => _X.,n,ExecIf($[${chan}=904]?Set(CALLERID(num)=43732xxx))
exten => _X.,n,Monitor(wav,${CALLFILENAME},m)
exten => _X.,n,Return()
exten => _X.,n,Dial(SIP/${EXTEN}@av-out,,r)
exten => _X.,n,Hangup()

Mir ist klar, dass das noch nicht ganz funktioniert, weil es ihn bei "exten => _X.,n,Return()" aufschmeisst, wenn er nicht aus einem Goto kommt. Aber irgendwie steht ich gerade an, wie ich es drehen muss, damit das nicht passiert :confused:
 
Ich habs bereits selbst rausgefunden (ist eigentlich eh total logisch). Ich gehe nun auch von den "normalen" Nummern über ein Goto in einen eigenen Context wo die CID gesetzt wird und dann wieder mit Return zurück.
 
... über ein Goto ... und dann wieder mit Return zurück.

Gosub, nicht Goto, oben hast Du es ja richtig. Im Normalfall macht man Subroutinen mit s-extensions, aber so funktionierts auch.

Wenn dieses Thema dann soweit erledigt ist, könntest Du bitte das Titel-Prefix auf Gelöst ändern (im 1. Post auf Bearbeiten -> Erweitert).
 
Gosub meinte ich, habe mich nur hier vertippt.
 
Kostenlos!

Statistik des Forums

Themen
248,460
Beiträge
2,291,871
Mitglieder
377,879
Neuestes Mitglied
MediConcept