Dial-/Wähl-Skript für Ubuntu

[email protected]

Neuer User
Mitglied seit
11 Aug 2005
Beiträge
135
Punkte für Reaktionen
0
Punkte
0
Hallo Zusammen,

ich habe auf eine Webseite ein Wähl-Skript für Linux gefunden.
Mit dessen hilfe werden Telefonnummern an die Fritzbox weitergegeben und es klingelt am gweünschten standart Telefon.

Das Skript ist für eine Fritz!box 7170 ausgelegt, auf der eine etwas ältere Firmware lief.
Da ich von der Skripterstellung keine Ahnung habe die Frage an Euch, was in dem Skript geändert werden muss, damit es mit einer Fritz!box 7270 mit neuester Firmware läuft.
Vielleicht kann man daraus ggf. auch ein Addon für den FireFox machen, da Fritz!Dial ja nicht mehr geht.

Freue mich auf eine Antwort gecks

Holger
Code:
#!/bin/bash
# Martin
# VERSION=1.2.3
# Erfordert folgende Pakete (Debian-Paketnamen)
#    - libwww-perl für das Kommando "lwp-request"
#    - html2text zur Formatierung der HTML-Ausgaben der Fritz-Box
#    - mpg123 oder ogg123, wenn ein Signalton ausgegeben werden soll
#    - xclip zur Verwendung der Option "-c" (Wählen der Nummer aus Clipboard)
#
#
# Uebergebene Nummer:
ARG=${1:-"-h"}

##################################################
# Konfiguration
##################################################
# 
# Konfigurationspasswort der FritzBox
password="123456"

# Standard-Nebenstelle, die verwendet wird, wenn nicht beim Aufruf übergeben
dialport=${2:-"Büro"}

# Anzeigedauer der Infobox in Sekunden
DIALOG_TIMEOUT=0

# Ausgaben werden zur Fehlerdiagnose in diese Datei geschrieben:
LOGFILE=/tmp/$(basename "$0" .sh).log

# Klang abspielen, wenn der Hörer abgenommen werden muss; ("y" für Yes)
PLAY_SOUND=y
SOUND_FILE="/home/roger/.bin/KDE-Im-Sms.ogg"

# Bei Übergabe von "-c" die Nummer aus der Zwischenablage lesen:
USE_CLIP=1

##################################################
# Usage-Hinweis
##################################################
if [ "$ARG" = "-h" -o "$ARG" = "-?" -o "$ARG" = "--help" ]; then
	echo "Usage: $(basename ${0}) [ -c | <Nummer> ] [<Anschluss-Id>]"
	exit 0
else
	# Ungeeignete Zeichen aus der Nummer entfernen:
	dialnumber=$(echo ${1} | sed -e '
		s/+/00/
		s/[^0-9]//g
	')
fi

##################################################
# Nummernbereinigung
##################################################
clean_number() {
	# Ungeeignete Zeichen aus der übergebenen Nummer entfernen:
	#echo "clean_number: $@" >&2
	CLEANNUM=$(echo $@ | sed -e '
		s/+/00/
		s/[^0-9]//g
	')
	echo ${CLEANNUM}
	#echo "clean_number: ${CLEANNUM}" >&2
}

##################################################
# Klang-Abspiel-Funktion
##################################################
play_sound() {
	if ! test -r "$SOUND_FILE"; then
		echo "Klangdatei $SOUND_FILE nicht lesbar!" >&2
		return 1
	fi
	SUFFIX=${SOUND_FILE: -3:3}
	case $SUFFIX in
		mp3|MP3) PLAYER=mpg123;;
		ogg|OGG) PLAYER=ogg123;;
		*)	echo "Das Format ($SUFFIX) kann ich nicht!" >&2;
			return 2;;
	esac
	which $PLAYER 1>/dev/null || echo "Das Programm \"$PLAYER\" fehlt. Klang kann nicht abgespielt werden." >&2
	echo "Klang abspielen: $PLAYER $SOUND_FILE"
	$PLAYER "$SOUND_FILE"
}

##################################################
# Test der erforderlichen Programme
##################################################
which Xdialog 1>/dev/null || { 
	echo "Das Programm \"Xdialog\" fehlt. Installieren Sie das Paket \"xdialog\"." >&2
	exit 1 
}
which lwp-request 1>/dev/null || {
	echo "Das Programm \"lwp-request\" fehlt. Installieren Sie das Paket \"libwww-perl\"." >&2
	exit 1
}
which html2text 1>/dev/null || {
	echo "Das Programm \"html2text\" fehlt. Installieren Sie das Paket \"html2text\"." >&2
	exit 1
}
which xclip 1>/dev/null || {
	echo "Das Programm \"xclip\" fehlt, keine Verarbeitung der Zwischenablage. Installieren Sie das Paket \"xclip\"." >&2
	USE_CLIP=0
}

##################################################
# Rufnummer festlegen/ermitteln
##################################################
if test "$ARG" = "-c" -a "$USE_CLIP" -eq 1 ; then
	NUM=$(xclip -o)
else
	NUM=${ARG}
fi
#echo "Rufnummer (ungesäubert): $NUM"
dialnumber=$(clean_number ${NUM})
#echo "Rufnummer (gesäubert): $dialnumber"
#exit

##################################################
# Konfiguration der Kommandos
##################################################
#
# lwp-request wird auf folgende Weise verwendet:
cmd_lwp="lwp-request -s -m POST http://fritz.box/cgi-bin/webcm"
# folgende Angaben soll lwp-request zum Anmelden bei der Fritzbox verarbeiten;
# die Zeichenfolge funktioniert nicht, wenn nicht ein Einstellungsparameter
# (hier "telcfg:settings/UseClickToDial ..." folgt. Warum, weiß ich nicht.
cmd_login="getpage=../html/de/menus/menu2.html\
&var:lang=de\
&login:command/password=${password}\
&telcfg:settings/UseClickToDial=1\

"
# folgende Angaben soll lwp-request für die Telefonwahl verwenden:
cmd_telcfg="getpage=../html/de/menus/menu2.html\
&var:lang=de\
&telcfg:settings/UseClickToDial=1\
&telcfg:command/Dial=${dialnumber}\
&telcfg:settings/DialPort=${dialport}"

##################################################
# Verarbeitung
##################################################
echo "Aufruf-Parameter: $@" > $LOGFILE
#echo -e "$cmd_login" | $cmd_lwp | html2text - >> $LOGFILE
#echo -e "$cmd_telcfg" | $cmd_lwp | html2text - >> $LOGFILE
#exit
{
	FEHLER=0
	echo "XXX Anmelden an FritzBox ... XXX"
	echo "Anmelden ... " >> $LOGFILE
	echo -e "$cmd_login" | $cmd_lwp | html2text - >> $LOGFILE || FEHLER=1
	if [ $FEHLER -eq 0 ]; then
		echo "XXX Wähle ${dialnumber} ... XXX"
		echo "Wählen ... " >> $LOGFILE
		echo -e "$cmd_telcfg" | $cmd_lwp | html2text - >> $LOGFILE || FEHLER=2
	fi
	if [ $FEHLER -ne 0 ]; then
		echo "XXX Fehler $FEHLER aufgetreten.\\nSiehe $LOGFILE. XXX"
		sleep 5
	else
		test ${PLAY_SOUND:-n} = "y" && play_sound 1>/dev/null
		echo "XXX Bitte Hörer abnehmen von Nebenstelle ${dialport}. XXX"
		sleep $DIALOG_TIMEOUT
		echo "XXXX"
	fi
} | Xdialog --title "Wählen über FritzBox" --cancel-label "Schließen" --infobox "Anwahl ${dialnumber} für Nst. \"${dialport}\" ..." 6 50 0

PS: Wenn es funktioniert, oder funktionieren kann, hat vielleicht noch jemand eine Idee wie es in ein Kontextmenü verfrachtet werden kann.
 
Ich habe das Problem wahrscheinlich gelöst.

Nach einem Firmware-Update meiner 7170 funktionierte mein Skript hier auch nicht mehr. Ursache war das von AVM geänderte Login-Verfahren mit Session-ID.

Dank eines Artikels auf
wehavemorefun.de
habe ich das neue Verfahren (zusätzlich zum alten) einbauen können.

Vermutlich hatte die 7270 das Verfahren schon früher.

Wer das probieren mag, kann das Skript herunterladen von:

http://download.schniewindnetz.de/LINUX/fritzdial.sh

@hoenloh: Ich weiß nicht, wo du das zitierte Skript her hattest, aber das ist, so wie es ausschaut, das von mir geschriebene. Leider ist die Quellenangabe auf meinen Vornamen verkürzt. Ich freue mich, wenn du bei Weitergabe die volle Angabe verwendest: "Martin Schniewind, http://www.schniewindnetz.de". Danke!
 
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.