.titleBar { margin-bottom: 5px!important; }

Via Goto() in ein Macro(${ARG1}) springen

Dieses Thema im Forum "Asterisk Rufnummernplan" wurde erstellt von guidoquiram, 11 Feb. 2007.

  1. guidoquiram

    guidoquiram Neuer User

    Registriert seit:
    25 Juni 2004
    Beiträge:
    50
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi, ich hab' versucht via Google, voip-info.org etc. eine Lösung zu finden, doch leider vergeblich... wie kann ich bitte mittels Goto() in ein Macro springen und ${ARG1} übergeben? Dialplan sieht in etwa so aus (für "Kurzwahl" 50)

    [macro-call]
    exten => s,1,Dial,${ARG1}|60|tT
    ...

    exten => _50,1,Goto(macro(call,SIP/0049xyz@SIPprovider),0049xyz,1)

    Auf der Konsole ist dann zu lesen (31 ist abgehendes SIP-Phone):
    -- Executing Goto("SIP/31-081608e0", "macro(call|SIP/0049xyz@SIPprovider)|0049xyz|1") in new stack
    -- Goto (macro(call,SIP/0049xyz@SIPprovider),2147483647)
    Feb 11 18:32:43 WARNING[3412]: pbx.c:2357 __ast_pbx_run: Channel 'SIP/31-081608e0' sent into invalid extension 'SIP/0049xyz@SIPprovider)' in context 'macro(call', but no invalid handler

    Asterisk interpretiert gemäss der Goto() Definition Goto(context,extension,priority) den context als 'macro(call' also nimmt die Klammer nicht wahr sondern sucht das erste Komma. Wie kann ich Asterisk sagen, dass der context gleich 'macro(call,SIP/0049xyz@SIPprovider)' lautet?

    Vielen Dank, Guido
     
  2. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    Hi, warum willst Du das denn machen?
    mit

    Macro(call,SIP/0049xyz@SIPprovider)

    bist du doch schon an der richtigen Stelle!!


    Also:

    Code:
    exten => _50,1,Macro(call,SIP/0049xyz@SIPprovider)
    
     
  3. guidoquiram

    guidoquiram Neuer User

    Registriert seit:
    25 Juni 2004
    Beiträge:
    50
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi, danke für die flotte Reaktion. So funktioniert das natürlich; völlig richtig. Mein Plan ist - ich hätte es besser darstellen sollen - dass ich via Goto() eine Art LCR aufbaue (finde leider gerade den Link hier im Forum nicht), und zwar nach dem Schema:
    exten => _0041,1,Goto(Macro(call,ProviderEins)...)
    exten => _0049,1,Goto(Macro(call,ProviderZwei)...)
    exten => _0034,1,Goto(Macro(call, ProviderDrei)...)
    wobei mein Macro call das ganze Procedere mit Leitung besetzt, Fehler etc. regelt. Idee?

    Danke, Guido
     
  4. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    das ist doch aber auch kein problem:

    Code:
    exten => _0041X.,1,Macro(call,ProviderEins,${EXTEN})
    exten => _0049X.,1,Macro(call,ProviderZwei,${EXTEN})
    exten => _0034X.,1,Macro(call,ProviderDrei,${EXTEN})
    
    oder

    Code:
    exten => _0041X.,1,Macro(ProviderEins,${EXTEN})
    exten => _0049X.,1,Macro(ProviderZwei,${EXTEN})
    exten => _0034X.,1,Macro(ProviderDrei,${EXTEN})
    
     
  5. Thomas007

    Thomas007 Aktives Mitglied

    Registriert seit:
    18 Sep. 2005
    Beiträge:
    1,455
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Es ist keine gute Idee in ein Macro mit GoTo zu springen.
    Die Variablenübergabe ist auch kein Problem da alle Variablen in einem Channel eh global sind.
    Du brauchst aus einem Macro auch nicht wieder zurückzukommen sondern kannst auch in einem Macro HangUp machen.