23.5. Heranholen eines Anrufs (Pickup)

In der bisherigen Konfiguration werden Gespräche des überwachten Teilnehmers nur angezeigt. Wir wollen aber auch die Möglichkeit schaffen, ein Gespräch heranholen zu können, das an einem anderen Apparat eingeht.[130]
Man unterscheidet dabei zwischen dem gezielten Heranholen eines Anrufs von einem einzelnen Benutzer (Directed Pickup) und dem Heranholen eines Anrufs von einer Benutzergruppe (Group Pickup). Hier betrachten wir zunächst den ersten, einfacheren Fall.

extensions.conf für Pickup

Für das Pickup ist es notwendig, noch einen weiteren Eintrag in der extensions.conf hinzuzufügen:
[interne-benutzer]

; ...

; Gesprächsübernahme (PickUp)
exten => _*8X.,1,Set(nst=${EXTEN:2})
exten => _*8X.,n,Verbose(1,${CALLERID(num)} will Anruf von ${nst} holen)
exten => _*8X.,n,Pickup(${nst}@interne-benutzer)
bzw. extensions.ael:
context interne-benutzer {
  
  // ...
  
  // Gesprächsübernahme (PickUp)
  _*8X. => {
    Set(nst=${EXTEN:2});
    Verbose(1,${CALLERID(num)} will Anruf von ${nst} holen);
    // hier könnte eine Berechtigungsprüfung eingebaut werden
    Pickup(${nst}@interne-benutzer);
  }
}
Damit haben wir in Asterisk eine Extension definiert, die besagt, dass beim Wählen von *8<Nebenstelle> (also z. B. *821) der Anruf herangeholt wird, der gerade auf dieser <Nebenstelle> (z. B. 21) im Context interne-benutzer klingelt.[131][132]

Konfiguration des Telefons für Pickup

Dem Snom-Telefon muss jetzt noch mitgeteilt werden, welche Nummer zur Gesprächsübernahme gewählt werden muss. Anstatt wie oben beschrieben (Abschnitt 23.3, „Konfiguration der Telefone für BLF“) bei Ziel/Nebenstelle bzw. BLF nur die zu überwachende Nummer einzutragen, tragen Sie nun die Nummer gefolgt von einem | (Pipe-Symbol) und der oben definierten Zeichekette *8 für das Pickup ein – also für obiges Beispiel 21|*8. Das Telefon wandelt dies wieder in die passende SIP-URI um. Das Snom wird durch diesen Zusatz, der streng genommen nicht zur SIP-URI gehört, angewiesen, zum Heranholen *8 vor der Nebenstellennummer zu wählen, obwohl es ihm von Asterisk in der Status-Benachrichtigung nicht so mitgeteilt wird.[133] (Eine detaillierte technische Beschreibung, wie das Snom auf verschiedene Formen der SIP-NOTIFY-Nachrichten reagiert, finden Sie unter http://wiki.snom.com/Features/Call_Pick-Up.) Andere Telefone haben ähnliche Mechanismen (Grandstream z. B. ** statt *8, dafür muss man gegebenenfalls die in diesem Kapitel beschriebenen Extensions anpassen).

Wichtig

Ab den Firmware-Versionen 7.1.33 und 7.3 muss als Tastenfunktion BLF[134] statt Nebenstelle[135] verwendet werden. Weitere Informationen dazu von Snom auf http://wiki.snom.com/Features/Extension_Monitoring, http://wiki.snom.com/Features/Busy_Lamp_Field_(BLF) und http://wiki.snom.com/Features/Call_Pick-Up.
Jetzt können Sie am überwachenden Telefon einfach die Anrufe annehmen, die am überwachten Telefon eingehen, indem Sie die zur blinkenden LED passende Taste drücken.

Anmerkung

Um die Anzeige- und Übernahme-Funktionalität korrekt zu nutzen, müssen Sie in den Erweiterten Einstellungen des Snoms zwei Einstellungen anpassen. Das Setting Dialog-Info Call Pickup muss aktiviert sein, und Pakete vom Registrar filtern muss deaktiviert werden. Die erweiterten Einstellungen sind nur im Admin-Modus des Telefons verfügbar.

Anmerkung

Es wäre natürlich auch schön, wenn man sehen könnte, wer gerade auf der überwachten Leitung anruft, bevor man den Anruf entgegennimmt. Dies bietet Asterisk von sich aus leider nicht an. Im Internet gibt es aber diverse Patches, die auch das ermöglichen.
Sollen die erläuterten Einstellungen in Form einer automatischen Konfiguration ins Snom geladen werden, müssen beispielsweise folgende Parameter in der gerätespezifischen Konfiguration stehen:
filter_registrar: off
callpickup_dialoginfo: on
fkey5: dest 22|*8
fkey6: dest 23|*8

Anmerkung

Die Funktionstasten sind 0-indiziert. Um wie im Beispiel die Funktionstaste 6 zu belegen, muss der Parameter fkey5 gesetzt werden usw. Die Funktionstaste 1 wird mit fkey0 angesprochen.

Heranholen von einer Gruppe

Das Heranholen eines Anrufs von einer Gruppe von Teilnehmern (group pickup) ist sehr ähnlich und schnell beschrieben. Entweder baut man sich Pickup-Extensions wie z. B. die folgende:
context interne-benutzer {
  
  // Verkaufsabteilung
  hint(SIP/21&SIP/22&SIP/23) 20 => {
    Dial(SIP/21&SIP/22&SIP/23,40);
  }
  
  // Gesprächsübernahme (PickUp) von der Gruppe Verkauf
  _*820 => {
    Verbose(1,${CALLERID(num)} will Anruf von Gruppe Verkauf holen);
    Pickup(21@interne-benutzer&22@interne-benutzer&23@interne-benutzer);
  }
}
Als zu überwachende Nebenstelle würde man dann am Telefon die 20 eintragen (Snom: 20|*8).
Als gute Alternative bietet sich die PICKUPMARK-Funktionalität der Pickup()-Applikation (Abschnitt C.115, „Pickup()) an, mit der man flexibler ist. Beispiel:
context interne-benutzer {
  
  // Verkaufsmitarbeiter
  _2X => {
    Set(__PICKUPMARK=verkauf);
    Dial(SIP/${EXTEN},40);
  }
  hint(SIP/21) 21 => {}
  hint(SIP/22) 22 => {}
  hint(SIP/23) 23 => {}
  
  // Verkaufsabteilung
  hint(SIP/21&SIP/22&SIP/23) 20 => {
    Set(__PICKUPMARK=verkauf);
    Dial(SIP/21&SIP/22&SIP/23,40);
  }
  
  // Gesprächsübernahme von der Gruppe Verkauf
  _*820 => {
    Verbose(1,${CALLERID(num)} will Anruf von Gruppe Verkauf holen);
    Pickup(verkauf@PICKUPMARK);
  }
}
Will man keine Extra-Nebenstelle (im obigen Beispiel die 20) für die Pickup-Gruppe verbrauchen, so bietet sich für fortgeschrittene Anwender z. B. folgende Konfiguration an:
context interne-benutzer {
  
  // Verkaufsmitarbeiter
  _2X => {
    Set(__PICKUPMARK=200);
    // welcher Mitarbeiter zu welcher Pickup-Gruppe gehört, ließe sich
    // z. B. über ein ausgefeiltes AGI-Skript setzen
    Dial(SIP/${EXTEN}&Local/**${PICKUPMARK},40);
  }
  hint(SIP/21) 21 => {}
  hint(SIP/22) 22 => {}
  hint(SIP/23) 23 => {}
  
  // Pickup-Gruppen
  _**X. => {
    Verbose(1,Es klingelt in Pickup-Gruppe ${EXTEN:2});
  }
  hint(SIP/21&SIP/22&SIP/23) **200 => {}
  
  // Gesprächsübernahme direkt
  _*8X. => {
    Set(nst=${EXTEN:2});
    Verbose(1,${CALLERID(num)} will Anruf von ${nst} holen);
    // hier könnte eine Berechtigungsprüfung eingebaut werden
    Pickup(${nst}@interne-benutzer);
  }
  
  // Gesprächsübernahme von einer Gruppe
  _*8**X. => {
    Set(pmark=${EXTEN:4});
    Verbose(1,${CALLERID(num)} will Anruf von Pickup-Gruppe ${pmark} holen);
    // hier könnte eine Berechtigungsprüfung eingebaut werden
    Pickup(${pmark}@PICKUPMARK);
  }
}
Als zu überwachende Nebenstelle würde man dann am Telefon die **200 eintragen (Snom: **200|*8).


[130] Die Telefonanlagen-Funktion Pickup wird im Deutschen meist als Heranholen oder Rufübernahme bezeichnet.

[131] Zur Beschreibung der Applikation Pickup() siehe auch: Abschnitt C.115, „Pickup()

[132] Die Applikation Pickup() darf nicht verwechselt werden mit der Bristuff-Applikation PickUp() bzw. DPickup(), PickUp2() oder anderen Applikationen ähnlichen Namens, die in den diversen Internet-Foren usw. als Patches herumgeistern, auch wenn sie ungefähr das Gleiche bewirken.

[133] Das wird vermutlich in neueren Versionen von Asterisk behoben, siehe Asterisk Bug 5014.