Info : LCR mit Preisansage und Fallback

DerDominic

Neuer User
Mitglied seit
1 Dez 2004
Beiträge
151
Punkte für Reaktionen
0
Punkte
0
Nach einigen Änderungen... am besten gleich auf Seite 2 weiterlesen ;)


Dominic
 
Sieht recht nett aus, bastele aber gerade selbst mit telefonsparbuch zusammen an einer loesung mit fallback, voip, forbidden und preselection. Erste Ergebnisse zwischen den Tagen dann hier im Forum.
 
Hi
@DerDominic:
Das cron-script liefert leider nur noch eine leere lcr.txt (zumindest bei mir).
Da ich von awk keine Ahnung habe ... hast du eine neue angepasste version?

Gruß
Thorsten
 
Auch HI,
ja, da gab es ständig Probleme mit Teltarif und habe ein neus Skript geschrieben, welches auf Telefonsparbuch zugreift.
Ist zwar noch nicht ganz so fertig wie ich will, kansnt Du aber auch verwenden, unterteilung zwischen Ort, Fern, Mobil und Ausland gibt es nicht mehr, dafür kansnt Du nun ein Fallback über mehrere Stufen machen.
Demnächst, wenn ich Lust und Laune habe werde ich das dann mal erweitern....

Gruß
Dominic

#!/bin/bash
wget 'http://www.telefon-sparbuch.de/tmpl/calc/telephone/std/profi/index.htm?type=Telephone&jscript=1&FORM=profi&ZNAME=ZNAME&
zone=a&zone=d&zone=e&zone=fi&day=%2B&time=%2B&submit=Anfrage+senden&MAX_RESULT=5&CBC0=1&_190=1&CONNECT=ANALOG&PERCENT_SAVED=1
&COSTS_SORT=DFT&COSTS_EXTRA=0&COSTS=3%3A01&comment=1&CENTS=1&PRICE_ONCE=1&PULSE_EXTRA=1&PULSE_EXTRA_CHOICE=60%2F60&CBC_AT=1&D
_TIME=6-18+%2F+18-21+%2F+21-6&DWEEK_TIME=&DWEEKEND_TIME=wie+bei+Werktag' -O /tmp/ttt.txt
grep Rangliste /tmp/ttt.txt | awk -F '<td nowrap>' '{print $2}' | awk -F '
' '{print $1}' | cat > /tmp/lcr-all.txt
grep Rangliste /tmp/ttt.txt | awk -F '<td nowrap>' '{print $6}' | awk -F '
' '{print $1}' | cat >> /tmp/lcr-all.txt
grep Rangliste /tmp/ttt.txt | awk -F '<td nowrap>' '{print $10}' | awk -F '
' '{print $1}'| cat >> /tmp/lcr-all.txt
grep Rangliste /tmp/ttt.txt | awk -F '<td nowrap>' '{print $14}' | awk -F '
' '{print $1}'| cat >> /tmp/lcr-all.txt
 
Hi
>unterteilung zwischen Ort, Fern, Mobil und Ausland gibt es nicht mehr

Das verstehe ich nicht?!
Dass es keine Unterteilung für kurz&lang gibt kann ich ja noch nachvollziehen...
Die erstelle lcr-all.txt datei hat 4 Zeilen - wobei mir nicht klar ist wonach diese liste erstellt wurde!
Gruß
Thorsten
 
es gibt doch ein fertiges LCR fuer telefonsparbuch ... sucht doch mal nach 'LCR komplett'
 
hi
@allesok: ist klar - aber so ein einfaches LCR hat auch seinen reiz. ich wollte nicht die komplexe LCR-geschichte installieren....
aber wenn mir nichts anderes übrig bleibt schaue ich mir das mal an.

Gruß
Thorsten
 
So, im Falle des Interesses weil einem die AllesOK-Lösung zu gewaltig/groß/sonstwas ist......
Hier ein neues LCR, die Daten werden von Billiger-Telefonieren.de gezogen, dabei reichtes einmal am Tag diese zu holen.


bla bla bla... alter kram entfernt .....
 
Hi
wie bindet man den das Pacal ein? (bin in diese rrichtung ein anfänger). Unter debian gibt es den gpc (GNU Pascal Compiler) - ist das ok?
wie sieht das bt.agi aus? ist das direkt das ausführbare compilat?

Gruß
Thorsten
 
1. Mit apt-get install fp-compiler den fpc installieren.
2. fpc bt.pas
3. cp bt /var/lib/asterisk/agi-bin/bt.agi

Gruß
Dominic
 
Hi Dominic,
das ganze sieht soweit sehr gut aus!
Frage: wie stelle ich sicher dass der Download nach 0:00 Uhr stattfindet? Sonst habe ich ja am Samstag die Liste vom Freitag?
Ist das sichergestellt wenn ich das Downloadscript einfach ein cron.daily ablege?

2 Kleine Wünsche:
a) dein Script wählt ja automatisch die Vorwahl sofern die Nummer nicht mit 0 beginnt. Wenn ich die Vorwahl mitwähle (bin es halt schon gewohnt) nimmt dein Script aber den Tarif für Fern - kann man das ändern?
b) Da die Preise ja mit runtergeladen werden - währe eine Übergabe an das Script genial. So könnte man seine eigene Preisansage machen...

Ansonsten: DANKE! Gutes Script.

Gruß
Thorsten
 
Hi Thorsten,
füge einfach in Zeile 89 folgendes ein :
if pos (paramstr(2),callerString)> 0 then Distance := local;

Ja, an die Preisgeschichte habe ich auch schon gedacht, die könnte man dann vorher ansagen...
Mal kucken wie man das macht...
Vorschlag, ich setze eine Varibale Costs und Du kuckst nach wie man das Ansagt ;)


Gruß
Dominic
 
Wenn ich mir recht erinnere gibt es doch das was mit Saynum, geht das damit nicht einfacher ?
 
Dann auf ein neues :
Hier unser kleiner Pascal :

program lcr;

uses Dos;

const
fallback : boolean = false;
pre : string = '';

Type
t_Distance = (none,local,DE,Mobile,Foreign);

var
infile : Text;
tString : string;
Distance : t_Distance;
CallerString : String;

procedure trim(var is :string);
begin
while (pos (' ',is) > 0) do delete (is,pos (' ',is),1);
end;

function timeOK:boolean;
var
h,m,s,hund : word;
fromT,toT : byte;
temp : string[5];
begin
timeOK:=false;
if pos('Uhr',tString) > 0 then
begin
GetTime (h,m,s,hund);
temp := copy (tString,1,pos('-',tString)-1);
trim (temp);
val (temp,fromT,hund);
temp := copy (tString,pos('-',tString)+1,2);
trim (temp);
val (temp,toT,hund);
timeOK:= (h>=fromT) and (h<=toT);
{ writeln (tString);}
end;
end;

procedure workOn;
const
start = 7;
var
count : byte;
cost,
lcr : string[12];
startp : byte;
endp : byte;
begin
if Distance = local then count := start;
if Distance = DE then count := start+1;
if Distance = Mobile then count := start+2;
if Distance = Foreign then count := start+3;
if fallback then count:=count+4;
while (not EOF(infile)) do
begin
readln (infile,tString);
if count = 0 then begin
writeln (tString);
lcr := copy (tString,1,pos(' ',tString)-1);
startp := pos('>',tString)+1;
endp := pos (' c',tString);
writeln ('Start : ',startp, ' Ende : ',endp);
cost := copy (tString,startp, endp-startp);
writeln ( 'SET VARIABLE LCR ',lcr,pre);
writeln ( 'SET VARIABLE COSTS ',cost);
end;
dec(count);
end;
end;

function setDistance:boolean;
begin
Distance := none;
if callerString[1] <> '0' then Distance := local;
if callerString[1] = '0' then Distance := DE;
if pos ('01',callerString) = 1 then Distance := Mobile;
if pos ('00',callerString) = 1 then Distance := Foreign;
if pos (paramstr(2),callerString)> 0 then Distance := local;
if Distance = local then pre := paramstr(2);
setDistance := Distance <> none;
end;

begin
{ Parameter
1 : gewaehlte Nummer
2 : lokale Vorwahl
3 : Fallback
}
Assign (infile, '/tmp/bt-call-cost.txt');
Reset(infile);
callerString := paramstr(1);
fallback := paramstr(3) = 'fallback';
if setDistance then
begin
while (not EOF(infile)) do
begin
readln (infile,tString);
if timeOK then workOn;
end;
end;
writeln;
end.

Der mit diesem Script gefüttert wird :
#!/bin/bash
#wget 'http://www.billiger-telefonieren.de/tarife/tagesuebersicht.php3?maxanzeige=2&inlandszone%5B%5D=Ort&inlandszone%5B%5D=Fern&inlandszone%5B%5D=D1&inlandszone%5B%5D=NULL&inlandszone%5B%5D=NULL&auslandszonen%5B%5D=Frankreich&auslandszonen%5B%5D=&zeitraum=wt&tageszeitraum=0-24&kompakt=y&ids%5B%5D=8378&taktmax=60&tarif_ansage=n&inc_190=on&berechnen=berechnen&ids%5B%5D=8516&ids%5B%5D=8494&ids%5B%5D=8636&ids%5B%5D=8621&ids%5B%5D=8614&ids%5B%5D=8610&ids%5B%5D=8580&ids%5B%5D=8345&ids%5B%5D=8058&ids%5B%5D=8639&ids%5B%5D=8343&ids%5B%5D=8496&ids%5B%5D=8633&ids%5B%5D=8561&ids%5B%5D=8254&ids%5B%5D=8619&ids%5B%5D=8550&ids%5B%5D=8061&ids%5B%5D=8563&ids%5B%5D=8638&ids%5B%5D=8604&ids%5B%5D=8611&ids%5B%5D=7775&ids%5B%5D=8059&ids%5B%5D=8634&ids%5B%5D=8562&ids%5B%5D=8377&ids%5B%5D=8615&ids%5B%5D=8605&ids%5B%5D=8057&ids%5B%5D=8631&ids%5B%5D=7765&ids%5B%5D=7732&ids%5B%5D=7513&ids%5B%5D=8612&ids%5B%5D=8632&ids%5B%5D=8635&ids%5B%5D=8616&ids%5B%5D=8624&ids%5B%5D=8599&ids%5B%5D=8592&printversion=yes' -O /tmp/bt.txt

grep fbbb /tmp/bt.txt | awk -F 'fbbb">' \
'{ split ($2,ar,"<"); print ar[1] " " ar[3]; \
split ($3,ar,"<"); print ar[1] " " ar[3]; \
split ($4,ar,"<"); print ar[1] " " ar[3]; \
split ($5,ar,"<"); print ar[1] " " ar[3]; \
}' > /tmp/bt-call-cost.txt

Es werden die Variablen LCR und COSTS gesetzt, nun muß man das nur noch irgendwie ausgeben.....

Dominic
 
Um die ganze Sache dann zu vervollständigen :
exten => _XXX.,1,SetLanguage(de)
exten => _XXX.,2,Ringing
exten => _XXX.,3,Macro(Tel${PRI_NETWORK_CID})
exten => _XXX.,4,SetCIDNum(${outMSN})
exten => _XXX.,5,agi(bt.agi,${EXTEN},06897)
exten => _XXX.,6,SayPhonetic,${COSTS} ;
exten => _XXX.,7,Dial(${ISDNEXT}/${LCR}${EXTEN},60,Tr)
exten => _XXX.,8,Congestion
exten => _XXX.,107,agi(bt.agi,${EXTEN},06897,'fallback')
exten => _XXX.,108,SayPhonetic,${COSTS} ;
exten => _XXX.,109,Dial(${ISDNEXT}/${LCR}${EXTEN},60,Tr)
exten => _XXX.,110,Congestion
exten => h,1,Hangup


Hmmm, hab ich eigentlich nix besseres zu tun ?????

Gruß
Dominic
 
Hi
danke für den genial schnellen service!
Das SayPhonetic scheint bei mir noch nicht richtig zu laufen - obwohl meine gebristuffte 1.0.7 den Befehl schon kennt. Ich denke ich werde mir das irgendwie noch zurechtbiegen mit
"Dieses Gespräch Kostet"
Saynumber( Zahl vor dem Komma)
"Komma"
SayNumber (Zahl nach dem Komma)
"cent pro Minute"

Das krieg ich aber auch selbst gebacken...
Gruß
Thorsten
 
Keine Ursache,

wenn Du dann das nette Ansagegespräch zusammengeschaubt hast, bitte zukommen lassen...

Gruß
Dominic
 
Hi
ein kleiner Fehler den ich gerade Festgestellt habe:
wir haben nun 23:15 - das Script verwendet die Preise die für 22-23 Uhr angegeben sind!
Keine Ahnung ob das nur in diesem Zeitfenster so ist (vielleicht weil das Fenster von 23 bis 0 geht?)

Meine Preisansage sieht so aus:

exten => _8.,3,agi(bt.agi,${EXTEN:1},06027)
exten => _8.,4,Wait(0.5)
exten => _8.,5,SayNumber(${COSTS}) <-- Das sagt die Zahl von dem Komma
exten => _8.,6,Playback(comma)
exten => _8.,7,SayNumber(${COSTS:-2,2}) <-- Das sagt die letzten beiden Ziffern
exten => _8.,8,Playback(cent)

Gruß
Thorsten
 
LCR mit Preisansage und Fallback

Hoppla, dummer Fehler hier nun korrigiert :
Code:
program lcr;

uses Dos;

const 
  fallback : boolean = false;
  pre : string = '';

Type
  t_Distance = (none,local,DE,Mobile,Foreign);

var
  infile : Text;
  tString : string;
  Distance : t_Distance;
  CallerString : String;

procedure trim(var is :string);
begin
	while (pos (' ',is) > 0) do delete (is,pos (' ',is),1);
end;

function timeOK:boolean;
var
	h,m,s,hund : word;
	fromT,toT  : byte;
	temp	   : string[5];
begin
	timeOK:=false;
	if pos('Uhr',tString) > 0 then
	begin
		GetTime (h,m,s,hund);
		temp := copy (tString,1,pos('-',tString)-1);
		trim (temp);
		val (temp,fromT,hund);
		temp :=  copy (tString,pos('-',tString)+1,2);
		trim (temp);
		val (temp,toT,hund);
		if toT = 0 then toT := 24;
		timeOK:= (h>=fromT) and (h<toT);
{		writeln (tString);}
	end;
end;

procedure workOn;
const
  start = 7;
var
  count : byte;
  cost,
  lcr : string[12];
  startp : byte;
  endp : byte;
begin
  if Distance = local then count := start;
  if Distance = DE then count := start+1;
  if Distance = Mobile then count := start+2;
  if Distance = Foreign then count := start+3;
  if fallback then count:=count+4;
  while (not EOF(infile)) do
  begin
  	readln (infile,tString);
	if count = 0 then begin
		writeln (tString);
		lcr  := copy (tString,1,pos(' ',tString)-1);
		startp := pos('>',tString)+1;
		endp := pos (' c',tString);
		writeln ('Start : ',startp, ' Ende : ',endp);
		cost := copy (tString,startp, endp-startp);
		writeln ( 'SET VARIABLE LCR ',lcr,pre);
		writeln ( 'SET VARIABLE COSTS ',cost);
	end;
	dec(count);
  end;
end;

function setDistance:boolean;
begin
	Distance := none;
	if callerString[1] <> '0' then Distance := local;
	if callerString[1] = '0'  then Distance := DE;
	if pos ('01',callerString) = 1 then Distance := Mobile;
	if pos ('00',callerString) = 1 then Distance := Foreign;
	if pos (paramstr(2),callerString)> 0 then Distance := local;
	if Distance = local then pre := paramstr(2);
	setDistance := Distance <> none;
end;

begin
{ Parameter 
  1 : gewaehlte Nummer
  2 : lokale Vorwahl
  3 : Fallback
 }
  Assign  (infile, '/tmp/bt-call-cost.txt');
  Reset(infile);
  callerString := paramstr(1);
  fallback     := paramstr(3) = 'fallback';  
  if  setDistance then
  begin
	  while (not EOF(infile)) do
	  begin
		readln (infile,tString);
		if timeOK then workOn;
	  end;
  end;
  writeln;
end.
 

Statistik des Forums

Themen
244,692
Beiträge
2,216,637
Mitglieder
371,311
Neuestes Mitglied
agl7
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.