Pickup will nicht...<---ich verzweifel

Mysterious

Neuer User
Mitglied seit
3 Nov 2005
Beiträge
158
Punkte für Reaktionen
0
Punkte
16
Hallo,
nach über einem Tag probieren wende ich mich an die Community um villeicht hier die Lösung zu finden.

Ich versuche Pickup einzurichten und irgendwie will das nicht.

Also, folgende Kosntellation:

Wir sind hier per PVX-Network über IAX2 angebunden an einen Asterisk 1.4.20.1 angebunden. Keine Bristuff PAtches oder sonstige Code-Änderungen. 2 Endgeräte mit der folgenden Konfiguration:
exntensions.conf:
Code:
[15]
include => lokal
include => mailbox
include => sipgate_out
include => dusnet_out
include => pbx_out
include => mailbox_ein_aus
include => testextension
include => pickup
[25]
include => lokal
include => mailbox
include => sipgate_out
include => dusnet_out
include => pbx_out
include => mailbox_ein_aus
include => testextension
include => pickup

Ein Anruf kommt über IAX2 von PBX-Network rein:
iax.conf
Code:
;Eingehende TelefonatePBX Network:

[code]
register = 111111:[email protected]

[111111]
type=user
disallow=all
allow=alaw,ulaw
insecure=invite
context=ankommend
qualify=yes

Wir an den Context "ankommend geroutet und Signalisiert das Endgerät 25:

extensions.conf
Code:
[ankommend]
exten => 4976111111,1,Macro(setCallerName|${CALLERID(num)})
exten => 4976111111,2(anrufer),GotoIf($[${AWS}=1]?ja:nein)
exten => 4976111111,3(ja),Dial,SIP/25|15|r
exten => 4976111111,4,Goto,r-mailbox|1
exten => 4976111111,5(nein),Dial,SIP/25|15|r
exten => 4976111111,6,Goto,r-mailbox|1

Wenn ich nun versuche von Endgerät 15 ein Pickup zu tätigen durch drücken von *825 welches ich hier definiert habe:
Code:
[pickup]
exten => _*8.,1,Pickup(SIP/${EXTEN:2}@ankommend)
bekomme ich folgende Meldung und kein Pickup wird ausgeführt:
Code:
    -- Accepting UNAUTHENTICATED call from 62.216.189.154:
       > requested format = alaw,
       > requested prefs = (ulaw|alaw),
       > actual format = alaw,
       > host prefs = (alaw|ulaw),
       > priority = mine
    -- Executing [4976111111@ankommend:1] Macro("IAX2/62.216.189.154:4569-14659", "setCallerName|076123456") in new stack
    -- Executing [s@macro-setCallerName:1] NoOp("IAX2/62.216.189.154:4569-14659", "set CallerName for 076123456") in new stack
    -- Executing [s@macro-setCallerName:2] AGI("IAX2/62.216.189.154:4569-14659", "get_callername.php|076123456") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/get_callername.php
    -- AGI Script get_callername.php completed, returning 0
    -- Executing [4976111111@ankommend:2] GotoIf("IAX2/62.216.189.154:4569-14659", "0?ja:nein") in new stack
    -- Goto (ankommend,4976111111,5)
    -- Executing [4976111111@ankommend:5] Dial("IAX2/62.216.189.154:4569-14659", "SIP/25|15|r") in new stack
    -- Called 25
    -- SIP/25-081f25e8 is ringing
 Extension Changed 15[hints] new state InUse for Notify User 25
    -- Executing [*825@15:1] Pickup("SIP/15-b6b01a28", "SIP/25@ankommend") in new stack
[Jun 19 15:53:11] NOTICE[2813]: app_directed_pickup.c:159 pickup_exec: No target channel found for SIP/25.

Egal ob ich das Pickup mit "@ankommend" oder ohne definiere oder ob ich nur "$Exten" oder "SIP/$Exten" in der Pickup Extension eintrage es kommt immer der selber Fehler auf der CLI nur mit dem Unterschie das er das "SIP" in der Meldung dann wegläst.

Kann das sein das das daher komm da der Anruf über IAX2 reinkommt? Oder was mache falsch???
Komm grad echt nicht dahinte rund wäre um ein paar Tipps dankbar. Falls noch Angaben fehlen bitte mitteilen dann stelle ich diese gerne zur Verfügung.
 
Hmmm...keiner der Asterisk Cracks eine Idee?
 
Hallo,

ich hab im Moment das gleiche Problem, erhalte die gleiche Meldung bei einem Pickup, allerdings sowohl über eine eingehende IAX2 Leitung als auch eine SIP Leitung.
Was bei mir allerdings geht, ist ein Pickup von internen Gesprächen.

Also:

Ich rufe von 1 auf 2 an und sehe am Gerät 3, dass es bei 2 klingelt und kann ein Pickup machen.
Rufe ich allerdings von Extern auf 2 an, sehe ich dies auch am Gerät 3, allerdings erhalte ich beim Versuch eines Pickups auch die Fehlermeldung.

Ich hab bei mir 2 Hauptcontexte, einen für eingehende Gespräche von extern und einen für interne und ausgehende Gespräche. Im internen Context funktioniert also der Pickup, er ist auch hier definiert.
Im Context für eigehende Gespräche wird bei mir noch ein weiterer Context eingebunden.
Ich hab hinter Pickup jetzt schon alle Contexte durch probiert, er bekommt ihn nicht. Wenn ich jedoch die *8 wähle, dann nimmt er die Verbindung an.

Ich bin auch ratlos
 
Nach längerem Suchen/Testen habe ich meinen Asterisk 1.4 mit folg. Dialplan dazu gebracht Pickup zu machen, egal über welche Technologie das Gespräch reinkommt. Der PickUp funktioniert sogar für Queues.

Code:
[intern]
exten => _*8.,1,SET(GLOBAL(PICKUPMARK)=${EXTEN:2})
exten => _*8.,n,Pickup(${EXTEN:2}@PICKUPMARK)
 
Ja klasse, so funktioniert es wirklich wobei mich wundert das die normale Pickup Funktion nicht will. Gibts bei Pickupmark grvierende Unterschiede zur normlaen Pickup Funktion?

Aber erstmal danke für die Hilfe !
 
Das, wenn ich wüsste :) Ne, das is halt net stinknormale Pickup-Funktion. Da es bei mir auf Anhieb funktioniert hat, hab ich mich auch nicht weiter damit beschäftigt.

Aber ich lasse mich gerne überzeugen, wenn sich diese Funktion von der "normalen" Pickup-Funktion unterscheidet. Vielleicht hat sich ja nur der Syntax von Ast 1.2 auf 1.4 geändert. I don't know :)
 
kleine anmerkung am rande: "Pickup" ist eine (dialplan) applikation, keine funktion, für den fall, dass neulinge hier rüber stolpern.

grüße,
laureen
 
Also bei mir funktioniert es auch so, Danke für die Lösung.
Markierst du den Thread noch als gelöst, auf das Problem wird bestimmt noch mal jemand treffen.
 
Hatte das gleich Problem, hab es jetzt auch mit der oben beschrieben Methode umgangen...

Bei mir ging die Pickup() Funktion bei internen Anrufen ohne Probleme mit:
Code:
exten => _**1[0-4],n,Pickup(${nst})     ; ** für Grandstream bzw. für die Nebenstellen 10-14
Folgende Channels werden geliste:
Code:
*CLI> show channels
Channel              Location             State   Application(Data)
SIP/13-08324ec8      13@telefone:1        Ringing AppDial((Outgoing Line))
SIP/12-b5e11200      13@telefone:1        Ring    Dial(SIP/13)
Bei externen Anrufen ist das Problem das die Location von der eingehenden Extension stammt...
Code:
CLI> show channels
Channel              Location             State   Application(Data)
SIP/13-08324ec8      [color=red]2170522e0@telefone:1[/color] Ringing AppDial((Outgoing Line))
SIP/2170522e1-b5e086 2170522e0@von_sipgat Ring    Dial(SIP/13)
Ich nehme mal an, dass daher auch die Fehlermeldung kommt:
Code:
NOTICE[]: app_directed_pickup.c:159 pickup_exec: No target channel found for 13.
Kann man nicht diese Location anders setzen? Bzw. wodurch wird dieser Wert gesetzt?

Gruß Valentin
 
Versuch doch testweise mal beim Pickup-Aufruf diesen Special string zu verwenden.

New in Asterisk v1.4
If you use the special string "PICKUPMARK" for the context parameter, for example 10@PICKUPMARK, this application tries to find a channel which has defined a channel variable name PICKUPMARK with the same content as "extension".

Was hast Du denn in der Variable ${nst} stehen? Versuch doch mal diese zwei Zeilen Code

Code:
[intern]
exten => _*8.,1,SET(GLOBAL(PICKUPMARK)=${EXTEN:2})
exten => _*8.,n,Pickup(${EXTEN:2}@PICKUPMARK)

Letztendlich wird Pickup z.B. mit Pickup(10@10) augerufen, allerdings unter Nutzung von (notwendigem) PICKUPMARK.

Hier findest Du weitere Informationen, auch speziell zu Grandstream. Dort wird scheinbar DPickup verwendet:

Code:
exten => _**.,1,SET(GLOBAL(PICKUPMARK)=${EXTEN:2})
exten => _**.,n,DPickup(${EXTEN:2})

MfG

shrimps
 
Zuletzt bearbeitet:
Joa ja sorry ${nst} hab ich natürlich vorher gesetzt..
Code:
exten => _**1[0-4],1,Set(nst=${EXTEN:2})

Letztendlich funktioniert ja die PICKUPMARK Variante... ich wollte nur verstehen warum der andere Weg ohne globale Variable nicht funktioniert...

Laut das-asterisk-buch.de müsste man die normale Pickup-Funktion ja auch mit mehreren Contexten verwenden können...

Code:
Pickup([color=blue]Extension[/color][@[color=blue]Context[/color]][&[color=blue]Extension2[/color]@[color=blue]Context2[/color][&[color=blue]...[/color]]])

Na ja ich werd' mal am Wochenende weiter testen... danke auf für den Link, werde mal das bzgl. Grandstream:
Code:
;Grandstream BLF pickup link 24 dialls **24
exten => _**2X,1,ImportVar(ISDN_PICKUP=isdn|PICKUP_${EXTEN:2})
exten => _**2X,n,DPickup(${EXTEN:2}@internet) ;24@internet
exten => _**2X,n,DPickup(${ISDN_PICKUP}@isdn) ;466510710@isdn
exten => _**2X,n,Hangup()
testen...

Gruß Valentin
 
Letztendlich funktioniert ja die PICKUPMARK Variante... ich wollte nur verstehen warum der andere Weg ohne globale Variable nicht funktioniert...

Das habe ich wohl überlesen, dass es funktioniert. Ich kann es leider auch nicht ganz nachvollziehen und habe mehrere Stunden nach der Problematik und der entprechenden Lösung gesucht.

Soweit ich das verstanden habe liegt es an der Funktion pickup_exec() in der app_directed_pickup.c, weil dort die globale Variable PICKUPMARK verwendet wird. Habe mich dann aber nicht tiefer damit befasst...

Code:
...
if (!ast_strlen_zero(context) && !strcasecmp(context, PICKUPMARK)) {
  if (!pickup_by_mark(chan, exten))
    break;
  } else {
    if (!pickup_by_exten(chan, exten, !ast_strlen_zero(context) ? context : chan->context))
    break;
  }
  ast_log(LOG_NOTICE, "No target channel found for %s.\n", exten);
}
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.

IPPF im Überblick

Neueste Beiträge