Computer2Telefon: Klick … mich … an ….

Von einer modernen VoIP Anlage verspricht man sich auch in Sachen CTI (Computer Telephone Integration) so einiges. So haben wir beispielsweise bereits eine Anbindung an die “Warenwirtschaft” selbst realisiert. Aus dieser kann nun ganz einfach eine Liste von Kunden angerufen werden – ohne die Nummer zu tippen oder den Hörer abzuheben. Andersrum haben wir auch bereits eigene Schnittstellen geschaffen, die nun bei einem Anruf Kundeninformationen einblenden. Das sind Beispiele dafür, wie sich eine VoIP Anlage recht schnell für eine Firma auch unter anderen Aspekten (also abgesehen von Kosten) rechnen kann.

Doch wie funktioniert die Anbindung eines Rechners an die Anlage oder das Telefon?

Früher wurde das ganze oft über die serielle Schnittstelle gemacht und der Rechner direkt mit dem Telefon verbunden. Nun, wie macht man das heute mit den “neuen” Telefonen? Natürlich gibt es noch immer Geräte die per serieller Schnittstelle oder USB angeschlossen werden. Das ist jedoch – meiner Meinung nach – eher etwas für zuhause und nicht im Firmenumfeld. Heute werden die Telefone oder die Telefonanlage per URL angesprochen. Ich mache das beispielsweise über einen Aufruf zum Server – aus Gründen der Authentifizierung. Es kann jedoch auch direkt das Telefon per URL angesprochen werden. Egal ob Server oder Telefon, prinzipiell funktioniert das so:


# bspw. Snom

http://<PhoneIP>/command.htm?number=<NUMBER>

Aufruf über eine Serveradresse

Ein Serveraufruf sieht quasi genauso aus. Hat allerdings aus meiner Sicht zwei Vorteile:

  • Der Aufruf ist immer gleich. Neues Telefon – gleicher Aufruf. Telefon IPs über DHCP? Egal
  • Man kann zentrale Passwörter auf die Telefone provisionieren (automatische Konfiguration) die niemand kennen muss

Da mein Gebilde an der Stelle etwas komplexer ist, werde ich das hier nicht genau zeigen können. Im groben sieht das so aus:

  1. Client ruft eine URL auf, http://<Server>/docall.pl?number=<NUMBER> und muss sich authentifizieren
  2. der Server prüft anhand der Benutzernamens (REMOTE_USER in Apache) an welchem Telefon der User sitzt und bekommt die IP, Benutzer und Passwort für das Telefon aus der Datenbank
  3. mit diesen Daten startet der Server einen URL Aufruf zum Telefon mit dem korrekten Benutzer, Passwort und der Zielnummer
  4. fertig

Aufruf direkt über das Telefon

Den Aufruf habe ich oben beschrieben (gilt nur für Snom Telefone!). Wie gesagt muss dafür der Benutzername und das Passwort bekannt sein. Je nach größe der Firma braucht man ja vielleicht auch kein Passwort auf dem Telefon.

Hier wird ein Anruf also direkt per URL Aufruf auf das Telefon initiiert. Unter Linux kann das auf der CLI ganz einfach per wget oder curl gemacht werden – auch zu Testzwecken nicht schlecht ;-)

Aha, das aber bisschen umständlich …

… wenn ich immer eine URL aufrufen muss. In der Zeit hab ich doch auch die Nummer im Telefon eingegeben, oder etwa nicht? Ja, is klar. Natürlich brauchen wir da Programme die uns das abnehmen. Für Firefox als auch für Thunderbird gibt es ein Addon – “Telify” (hier). Telify erkennt Nummern auf Webseiten, in Mails, im Adressbuch und erstellt Links aus diesen. Klickt man sie an, so wird eine Aktion ausgeführt. Dabei sind verschiedene Aktionen möglich. Für uns wichtig: es kann eine URL aufgerufen werden und diese ist komplett konfigurierbar. Prima Lösung wenn man mit Firefox und Thunderbird arbeitet. Für Chrome hab ich beispielsweise noch nicht sowas gefunden.

Wie wäre es das ganze ein wenig “globaler”?

Windows

Für Windows haben wir ein Programm gefunden, welches ohne Lizenzkosten angeboten wird. Der Name “ContactPad” (Link). Das Programm kann auf lokale Outlook Kontakte zugreifen und per ShortCut eine markierte Nummer wählen. Dabei ist es egal ob die Nummer in Outlook, im Notepad oder irgendwo anders markiert ist. Er wählt das markierte – nur Nummern. In den Outlook Kontakten (falls vorhanden) kann man direkt suchen und die hinterlegten Nummern anwählen.

Dabei ist ContactPad für Snom Telefone optimiert. Kann sich also mit ihnen verständigen und sogar aufpoppen wenn ein Anruf eingeht (nicht ausprobiert). Des Weiteren kann das Programm sich als default Handler für sip://, dial:// und tel:// Links registrieren. Klickt man im Browser auf Links wie z.B. sip://11833, so wählt das Programm auch diese Nummer.

Linux

Unter Linux habe ich leider nichts passendes, fertiges gefunden. Aber das ist ja nicht so das Problem. Wenn wir uns einfach mal an den Features von ContactPad orientieren, so ist das ganze keine Hexerei.

1) sip:// Links

Einen Handler für sip:// Links zu registrieren geht ganz einfach und mit nur wenigen Schritten. Über das Programm “xdg-open” werden unter Linux Dateien oder URIs Programmen quasi “zugewiesen”. Das ganze geschieht über die MIME Types. Die verschiedenen “Typen” sind unter /usr/share/applications definiert. Dabei gibt es eine defaults.list und dann einzelne .desktop Dateien für die verschiedenen Typen.

Nun muss eine Datei angepasst und eine neu erstellt werden. Die defaults.list wird angepasst. Eine neue Zeile:


x-scheme-handler/sip=sip_call.desktop;

Damit haben wir die Anweisung, dass bei einem sip:// link die Konfiguration der Datei sip_call.desktop gezogen werden soll. Und die sieht so aus:


[Desktop Entry]
Version=1.0
Name=SIP Call
Exec=<PATH TO>/sip_call.sh %U
Terminal=false
Icon=call-start-symbolic
Type=Application
Categories=Network;
MimeType=x-scheme-handler/sip;

Das zugehörige Script kommt weiter unten …

Liegt das Script im angegebenen Pfad, so sollte das ganze nun schon funktionieren. Ein klick auf einen sip:// Link ruft im Hintergrund die URL auf und das Telefon ruft die angegebene Nummer an. Ein internes Telefonbuch (Intranet) könnte man um einen sip Link erweitern und so über einen einfachen Klick die Kollegen/-innen erreichen ;-)

2) markierte Telefonnummern wählen

Auch unter Linux möchte ich diese Funktion haben und es geht einfacher als man denkt. Es ist lediglich eine – grafische – Konfiguration notwendig. Über das Programm “Tastatur” lassen sich ShortCuts definieren. Unter Gnome 3 auch eigene Kommandos, die sich über einen ShortCut starten lassen.

Das wars schon. Als ShortCut haben wir STRG+Hoch ausgewählt. Das geht recht leicht von der Hand und bringt keine Konflikte mit anderen Programmen mit sich.

Nun aber bitte das Script!

Ja, hier also das Script. Es ist ein Script für beide Funktionen. Je nach Gusto irgendwo ablegen, Parameter einrichten und ab geht’s.


#!/bin/bash
# Handler for sip:// URIs and Phonenumbers in Clipboard
# for clipboard mode, you need to have xclip installed
#
# Ronny Becker, 11.2012

# Account Data
USER="user"
PW="password"

# Prefix?
PREFIX="0"
NAT_PREFIX="49" # ex. 49

# Action URL
# Snom
#URL="http://10.11.1.21/command.htm?number="
# *-Server
URL="http://10.11.1.10/biovoip/cgi/docall-direct.pl?number="

# Notify-Send
NOTIFY="notify-send --hint=int:transient:1 -t 2 -i call-start-symbolic SIP_CALL"

############### PROG ################################
# called by Browser or via shortcut (clipboard mode)?
if [ ${1} ]
then
 ##############
 # Browser Mode

# change the sip uri to something we need
 TOCALL=${1/sip:\/\//}
 if [[ $TOCALL =~ \+${NAT_PREFIX} ]]
 then
 TOCALL=${TOCALL/\+${NAT_PREFIX}/0}
 fi

 $NOTIFY $TOCALL
 CURL=`curl --connect-timeout 1 -s -u $USER:$PW "${URL}${PREFIX}${TOCALL}"`
 $NOTIFY "$CURL"
else
 ################
 # Clipboard Mode

# get Clipboard
 TOCALL="`xclip -o | grep -o '[0-9 ]*' | sed 's/ //g'`"
 if [ -z $TOCALL ]
 then
 $NOTIFY "bitte nur Zahlen"
 exit
 else
 if [[ $TOCALL =~ ^${NAT_PREFIX} ]]
 then
 TOCALL=${TOCALL/${NAT_PREFIX}/0}
 fi
 $NOTIFY "$TOCALL"
 CURL=`curl --connect-timeout 1 -s -u $USER:$PW "${URL}${PREFIX}${TOCALL}"`
 $NOTIFY "$CURL"
 exit
 fi
fi

Damit das ganze mit markierten Nummern funktioniert, muss das Programm xclip installiert sein!

Hoffe das ganze funktioniert bei Euch ;-)

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>