Least Cost Routing komplett!

Keine Sorge, dass kann man auch kleiner haben. Ich habe Outbound Routes definiert, die für definierte gewählte Nummern über den ISDN-Trunk hinauswählen (Handy-Nummern usw.).
In den Wahleregeln fange ich dann diesen Trunk ab und verzweige damit zum LCR.
Gespräche über alle anderen Trunks gehen dannn wie gewohnt über die SIP-trunks.

Siehe dazu meinen Beitrag in
http://www.ip-phone-forum.de/showthread.php?t=127870
 
Hi ich weiß nicht ob das hier so reingehoert aber naja ich schreib es einfach mal ^^
So ich habe Arcor und da hat man ja kein callbycall nun dachte ich mir wie währe es wenn ich mir dazu noch nen t-com analog oder digital anschluss hohle um callbycall zu nutzten...
Nun hatte ich bei teletarif gesehen das der kleinste anschluss 17,xx euro kostet und der ISDN anschluss 24,xxeuro kostet.
Also wie es ausschaut lohnt sich ein extra t-com anschluss nicht wirklich um Callbycall zu nutzten oder? da müsste man schon ne ganze menge telefonieren das man davon Provitiert oder ?
 
@Fredjam

Du hast Recht, das passt hier nun wirklich überhaupt nicht rein ;)

Versuchs doch mal hier

Oder im Allgemeinen
 
Hi,

LeastCostRouting, das wär fein und such ich schon seit längerem.

Daher die Frage: Gibts sowas für Österreich auch?

Danke im Vorraus!

lg,
divB
 
htims schrieb:
Hallo,

da die Entwicklung ja etwas zu hängen scheint, habe ich das lcr tool mal um Enum erweitert.

Weitere Änderungen:
- Umestellt auf asterisk 1.2 (1.0 wird -nicht- funktionieren)
- tt-somethingwrong wird nicht mehr abgespielt wenn es Probleme bei sip oder iax gibt. (Nervte mich bei instabilen Sipprovidern..)
- Klingeldauer fest auf 120 Sekunden gestellt.

Testen könnt ihr ob alles funktioniert mit den Telefonnummern auf http://www.enum-test.at/ .

Laden könnt ihr es hier: http://sm1th.de/asterisk/lcr_with_enum.tar.gz

Gruß,
htims

Hi, leider gibts den http://sm1th.de nicht mehr :(

hat jemnd die angepasste Version des LCR mit Enum für * >1.2 noch (lcr_with_enum.tar.gz) ?

Thx
 
Habe die Datei als Attachment hinzu gefügt. Hier ist der Link zum Beitrag.
 
Kann es sein, dass die LCR-Lösung mit ENUM bei der 1.4.15 nicht mehr funktioniert ? Bei der 1.4.10 lief alles ohne Probleme, als ich heute umgestellt habe ging nix mehr (eine Endlosschleife mit Fehlern auf der Konsole...).

Falls gewünscht kann ich sicher auch noch ein Log beisteuern...
 
Newbie steht auf dem Schlauch

Hallo Leute,

Als Newbie wurde mir das Einrichten des Least Cost Routings aufs Auge gedrückt. Allerdings habe ich kaum Kenntnisse von Asterisk.. zumal der Server schon läuft, ich ihn aber nicht einrichten musste. was mich am meisten verwirrt sind die Variablen die ich in

[tsblcr]
;exten => _X.,1,Macro(tsblcr,${EXTEN},${LCRFILE},${PSTNCALLERIDNUM},${PSTNCALLERIDNAME},${TRUNK},${SIPCONF},${RESTART})


einbauen soll. gibt das irgendwo ein 'absolutebeginner' tutorial oder sowas ??:confused:


noch eine Frage: Pfad zur sip.conf , von wo aus wird der denn gesehen? vom Macro oder von der extensions.conf (letzter pfad wäre ja nur 'sip.conf',oder?)



Grüße JAN
 
Bei mir lief das Script unter Asterisk 1.2
Nach dem Update auf Ast 1.4 will es nicht mehr.

Hat das jemand auf nem Ast. 1.4 am laufen?
 
Update auf Asterisk 1.4

Ich hab mal das Script an Asterisk 1.4 angepasst.
Den original Author hab ich vor ein paar Wochen mal angeschrieben aber der meldet sich leider nicht mehr.
Bei mir funktionierts nun mit * 1.4. :)

Viel Spass

Gerd
 

Anhänge

  • lcr_tool_v1.13.tar.gz
    11.3 KB · Aufrufe: 42
Hi,

Den original Author hab ich vor ein paar Wochen mal angeschrieben

Du meinst Thorsten Gehrig oder "allesOK" ? Bei Thorsten dürftest Du mehr Erfolg haben..

Grüsse, Stefan
 
Nein, ich meine allesOK vom ersten Beitrag.

Gerd
 
Siehe oben - ich hatte nich erwartet um diese Zeit eine schnelle Antwort zu bekommen :)

Guten Start in den Tag!

Stefan
 
Ist das der gleiche? :confused:

Ich geh jetzt erst ins Bett. Dir auch einen guten Start.....

Gerd
 
Nein Nein,

Thorsten hat hier eigentlich sehr konstruktiv und gut mitgearbeitet, in Bezug 1.4 weiss ich es schlichtweg nicht - einige (wie ich) sind ja auf 1.2 geblieben...

Dann Gute Nacht! ;)
 
Intergration von Europaflatrate von Sipgate oder Telekom

Hallo leute,

Dank der Geniöser Arbeit, von euch läuft der lcr bei mir nun auch.
Ich hab da nur noch ein Problem, mit meinem Sipgate Plus Account,
Ich verwende den Telekom Tarif Call Profi Premium der Telekom und ne Sipgate Plus Flatrate
womit ich Europa weitgehend kostenlos Telefonieren kann. Nun leider werden Diese Tarife nicht vom LCR berücksichtigt.

Idee war über die extensions bedingungen wann der LCR aktiv wird anzugeben, Dazu muß aber für jedes Kostenlos zu erreichende Land die Vorwahlen für die Mobilfunknetze bekannt sein damit der Dialplan diese Trennen kann

Hier ein Beispiel für Österreich:
Code:
exten => _0043[1-5]X.,1,Dial(SIP/${EXTEN}@2283xxxe0
exten => _00436X.,1,Macro(tsblcr,${EXTEN},/etc/asterisk/lcr/tsblcr.routing,${CALLERID(num)},${CALLERID(name)},mISDN/g:AnlagenAnschluss,/etc/asterisk/sip.conf)

wird über 0043xxxxxxx rausgewählt routet das ganze über Sipgate mit Flatrate,
wird ein Mobilfunknetz in Österrich mit 00436 angewählt wird der LCR aktiv.

Da ich aber Faul :) bin, würde ich mir das gerne einfacher machen.
Hat Dazu von eich jemand ne Idee?

Gruß Marco
 
Schau dir mal die Daten aus Rückwärtssuche
an. Im entsprechenden Thread findest Du auch ein (bash)-Skript, dass die Daten interpretieren kann.
Hintergrund: Die Daten enthalten die Rufnummernpläne aller Länder in je einer Zeile mit

  • land
  • Zeitzone
  • EXTEN
  • Netztyp (PSTN,MOB ...)
  • Bezeichnung der Extension

und funktionieren nach dem Best-Fit-Algorhytmus. BTW: Eine aktualisierte Fassung mit Erweiterungen und Anpassungen auf Stand 06/2009 wird demnächst hochgeladen.

Noch ein Hinweis zu Netz: Es gibt folgende Ausprägungen:

  • PSTN - Festnetz
  • MOB - Mobilfunk
  • SAT - Satellittennetz
  • MWD - Mehrwertdienste (aka 0049180x)
  • PRD - Premium Rate (aka 0049900x)
  • TF - Toll Free (aka 0049800x)
  • KW - Kurzwahlen (aka 0049110)
  • WLL - Wireless Local Loop (insb. Afrika/Lateinamerika)
  • PN - Personal Numbering (aka 0049700x)
  • VPN - Virtual Private Neetwork (aka 0049181x)
  • VOIP - VOIP-Rufnummeern (aka 004932x)
  • BOTH - Nicht eindeeutiges Netz (z.B. USA bei Shared Codes zw. PSTN/MOB)
  • NV - Nicht vergeben, d.h. im Rufnummernplan nicht belegt
  • OSN - Andere Servicenummer (i.d.R. Netzinterne Servicenummern)

Falls Du eine DB (hier mal für mysql, es geht aber auch postgres, dem tar liegt ein Konvertierungsskript bei) benutzen kannst, wäre Deine Fragestellung mit in etwa folgendem Code-Snippet (dass ich jetzt mal nur zusammenkopiert habe, also bitte zunächst auf Funktion testen ;)), das man zum AGI erweitern bzw. in den lcr integrieren kann, zu beantworten:

PHP:
#!/usr/bin/php -q
<?php

//Variablendeklarationen

// argv[1] contains the number of the callee

$NUMMER=$argv[1];

$IAC = "00";      					// Vorwahlziffern für internationalen Anruf
$NAC = "0";       					// Vorwahlziffern für nationalen Anruf long Distance
$CC = "49";       					// eigener Ländercode (49 => Deutschland)
$NDC = "30";      					// eigene Vorwahl ohne 0 ( 30 => Berlin)
$dbhost="localhost";					// MYSQL-Host
$dbuser="asterisk";					// MYSQL-User
$dbpass="asterisk";					// MYSQL Passwort
$dbschema="asterisk";					// MYSQL DB


function error($line,$file,$str,$mysql_err="") {
	
	$str = "Fehler in Zeile ".$line." in ".$file.": ".$str;
	if($mysql_err) $str .= " - MySQL meldet: ".$mysql_err;
	print $str."\n";
	connmysql(1);
    exit;
}


function connmysql($mode,$host="",$user="",$pass="",$schema="") {

	global $db, $dbhost, $dbuser, $dbpass, $dbschema;

	if ($mode == 0 ) {
		// connect to mysql
		$db = mysqli_connect($host,$user,$pass,$schema); 
		if (mysqli_connect_errno()) {
			error(__LINE__,__FILE__,"Verbindung zur Datenbank fehlgeschlagen: ".$user."@".$host);
		}
		if (!mysqli_set_charset($db,'utf8')) {
			error(__LINE__,__FILE__,"Setzen des Zeichensatzes utf8 fehlgeschlagen: ".$user."@".$host);
		}
		mysqli_autocommit($db, FALSE);
	} elseif ( $mode == 2 ) {
		mysqli_commit($db);
		mysqli_autocommit($db, TRUE);
		mysqli_close($db);
		unset($GLOBALS['db']);
	} else {
		mysqli_rollback($db);
		mysqli_autocommit($db, TRUE);
		mysqli_close($db);
		unset($GLOBALS['db']);
	}
}

function mysql_command($command) {
	
	global $db;

	if (mysqli_ping($db)) {
		if (preg_match("/^select/i",$command)) {
			// SELECT-Statement
			if ($result=mysqli_query($db,$command)) {
				if (mysqli_num_rows($result) == 0 ) {
					mysqli_free_result($result);
					$rowcount=-1;
				} else { 
					$rowcount=mysqli_num_rows($result);
				}
				return array($rowcount,$result);
			}
		} else {
			// Non-Select
			if (mysqli_query($db,$command) === TRUE) {
				return array(1,1);
			}
		}
	}
	return array(0,0);
}


function normalize_number() {

	global $NUMMER,$IAC,$CC,$NDC,$NAC,$extch;

	if ( preg_match('/^\+/',"$NUMMER") ) {
		# nothing to do
		$extch=preg_replace('/^\+/',$IAC,$NUMMER);
	} elseif ( preg_match('/^'.$IAC.'/',$NUMMER) ) {
		# international 00-Format
		$extch=$NUMMER;
		$NUMMER=preg_replace('/^'.$IAC.'/','+',$NUMMER);
	} else {
		# national calls
		if ( preg_match('/^'.$NAC.'/',$NUMMER) ) {
			# long distance
			$extch=preg_replace('/^'.$NAC.'/',$IAC.$CC,$NUMMER);
			$NUMMER=preg_replace('/^'.$NAC.'/','+'.$CC,$NUMMER);
		} else {
			# local call
			$extch	=	$IAC.$CC.$NDC.$NUMMER;
			$NUMMER	=	"+".$CC.$NDC.$NUMMER;
		}
	}
}

function check_exten($extch,$NUMMER) {

	$i=15;
	unset($COUN);
	while ( $i >= 3 ) {
		$skey=substr($extch,0,$i);
		list($recs,$result) = mysql_command("SELECT iso3166, tz,netz,deutsch FROM exten WHERE exten = '" .$skey . "' LIMIT 1");
		if ($recs == 1) {
			$row = mysqli_fetch_array($result, MYSQLI_NUM);
			$COUN	=	$row[0];
			$TZ		=	$row[1];
			$NET	=	$row[2];
			$DESC	=	$row[3];
			mysqli_free_result($result);
			$i=0;
		} else { $i--; }
	}
	if (isset($COUN)) {
		print "Land			: ".$COUN."\n";
		print "Netz			: ".$NET."\n";
		print "Bezeichnung	: ".$DESC."\n";
		print "Zeitzone		: ".$TZ."\n";
	} else {
		print "gesuchte Extension nicht gefunden\n";
	}
}

// Hauptprogramm

# Connectierung
connmysql(0,$dbhost,$dbuser,$dbpass,$dbschema);

#Rufnummernnormalisierung
normalize_number();

#Daten zur Rufnummer ermitteln
check_exten($extch,$NUMMER);

#Disconnects
connmysql(2);

#End
exit(0);
?>
 
Intergration von Europaflatrate von Sipgate oder Telekom

Interessanter Ansatz. Jedoch leider fehlen mir die Kenntnisse, das umzusetzen.
Also werde ich den Dialplan wohl oder übel entsprechend frisieren müssen.
Noch jemand nen anderen Ansatz?

gruß Marco
 
Ich habe eben den Umstieg auf Asterisk 1.6 versucht und bin beim lcr-Script gescheitert.

Unter 1.4 sieht die Welt (korrekt) SO aus:
Code:
   -- Launched AGI Script /var/lib/asterisk/agi-bin/tsblcr.agi
  tsblcr.agi|/etc/asterisk/lcr/tsblcr.routing|0xxxxxxxxx: Started routing for 0xxxxxxxxxx
  tsblcr.agi|/etc/asterisk/lcr/tsblcr.routing|0xxxxxxxxx: Result=@SIP/WebCallDirect_Standard @SIP/WebCallDirect_Standard @SIP/WebCallDirect_Standard @SIP/dus.net @SIP/dus.net @SIP/dus.net @SIP/dus.net
    -- AGI Script tsblcr.agi completed, returning 0
    -- Executing [dial@macro-tsblcr:2] GotoIf("SIP/145-0a92b690", "0?disabled|1") in new stack
    -- Executing [dial@macro-tsblcr:3] Set("SIP/145-0a92b690", "IT=0") in new stack
    -- Executing [dial@macro-tsblcr:4] Set("SIP/145-0a92b690", "IT=1") in new stack
    -- Executing [dial@macro-tsblcr:5] Set("SIP/145-0a92b690", "CBC=@SIP/WebCallDirect_Standard") in new stack
    -- Executing [dial@macro-tsblcr:6] GotoIf("SIP/145-0a92b690", "0?end|1") in new stack
    -- Executing [dial@macro-tsblcr:7] GotoIf("SIP/145-0a92b690", "0?8:10") in new stack
    -- Goto (macro-tsblcr,dial,10)
    -- Executing [dial@macro-tsblcr:10] GotoIf("SIP/145-0a92b690", "1?11:13") in new stack
    -- Goto (macro-tsblcr,dial,11)
    -- Executing [dial@macro-tsblcr:11] Set("SIP/145-0a92b690", "VOIPPROTOCOL=sip") in new stack
    -- Executing [dial@macro-tsblcr:12] Goto("SIP/145-0a92b690", "voip|1") in new stack
    -- Goto (macro-tsblcr,voip,1)
    -- Executing [voip@macro-tsblcr:1] Set("SIP/145-0a92b690", "PURECBC=WebCallDirect_Standard") in new stack

Unter 1.6 leider (nicht korrekt) SO:
Code:
       > tsblcr.agi,/etc/asterisk/lcr/tsblcr.routing,3xxxxxx: Started routing for 3xxxxxxx
       > tsblcr.agi,/etc/asterisk/lcr/tsblcr.routing,3xxxxxxx: Result=@SIP/sparvoip/intl00 @SIP/sparvoip/intl00 @SIP/sparvoip/intl00 @SIP/WebCallDirect_Standard @SIP/WebCallDirect_Standard @SIP/WebCallDirect_Standard @SIP/dus.net
    -- <SIP/144-08c9f368>AGI Script tsblcr.agi completed, returning 0
    -- Executing [dial@macro-tsblcr:2] GotoIf("SIP/144-08c9f368", "0?disabled,1") in new stack
    -- Executing [dial@macro-tsblcr:3] Set("SIP/144-08c9f368", "IT=0") in new stack
    -- Executing [dial@macro-tsblcr:4] Set("SIP/144-08c9f368", "IT=1") in new stack
    -- Executing [dial@macro-tsblcr:5] Set("SIP/144-08c9f368", "CBC=@SIP/sparvoip/intl00 @SIP/sparvoip/intl00 @SIP/sparvoip/intl00 @SIP/WebCallDirect_Standard @SIP/WebCallDirect_Standard @SIP/WebCallDirect_Standard @SIP/dus.net") in new stack
    -- Executing [dial@macro-tsblcr:6] GotoIf("SIP/144-08c9f368", "0?end,1") in new stack
    -- Executing [dial@macro-tsblcr:7] GotoIf("SIP/144-08c9f368", "0?8:10") in new stack
    -- Goto (macro-tsblcr,dial,10)
    -- Executing [dial@macro-tsblcr:10] GotoIf("SIP/144-08c9f368", "1?11:13") in new stack
    -- Goto (macro-tsblcr,dial,11)
    -- Executing [dial@macro-tsblcr:11] Set("SIP/144-08c9f368", "VOIPPROTOCOL=sip") in new stack
    -- Executing [dial@macro-tsblcr:12] Goto("SIP/144-08c9f368", "voip,1") in new stack
    -- Goto (macro-tsblcr,voip,1)
    -- Executing [voip@macro-tsblcr:1] Set("SIP/144-08c9f368", "PURECBC=") in new stack

Offensichtlich geht schon beid er Zuweisung an die Variable CBC etwas schief, er kann den String nicht korrekt auseinandern nehmen. Allerdings bin ich zur Lösung viel zu wenig Programmierer ;-)

Kann hier jemand helfen?
 
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.