[gelöst]:freepbx/AMP Modul DISA ohne Passwort und Ansage

homedonk

Mitglied
Mitglied seit
3 Sep 2005
Beiträge
264
Punkte für Reaktionen
0
Punkte
16
Hallo,
ich habe zwar kein asterisk@home bzw Trixbox am laufen, sondern nur
freepbx, jedoch sollte dies meiner Einschätzung nach keinen großen Unterschied bei der Lösung des Problems sein.
Ich benutze das Modul Callback und DISA um mich auf dem Handy zurückrufen zu lassen, Freiton zu bekommen und dann wieder rauswählen zu können.
Funktioniert alles soweit ganz gut. Allerdings wollte ich nun auf die Eingabe eines Passwortes verzichten(Handy wird ja anhand der callerid identifiziert) und habe das Passwortfeld leer gelassen.
Beim Rückruf gebe ich dann einfach die Rufnummer ein, die ich anrufen möchte. Leider resultiert das in einem Besetztzeichen, obwohl die Leitung frei ist.
in der disa-x.conf unter /etc/asterisk/ steht normalerweise bei Passwortverwendung
zumBeispiel333|from-internal|
lasse ich im webinterface das Passwortfeld leer wird
no-password|from-internal|
eingetragen.
Klappt es bei jemand anderem ohne Passwort und wie sieht dann dort die
disa-x.conf aus?

--------------------
Hab jetzt mal etwas "weiter" geschaut,
unter /var/www/.../htdocs/admin/modul/disa/functions.inc.php
liegt ja sozusagen die Vorlage, nach der in die extensions_additional.conf geschrieben wird.

Code:
<?php 
/* $Id */


// This is the hook for 'destinations'
function disa_destinations() {
        $results = disa_list();
        // return an associative array with destination and description
        if (isset($results)) {
                foreach($results as $result){
                                $extens[] = array('destination' => 'disa,'.$result['disa_id'].',1', 'description' => $result['displayname']);
                }
                return $extens;
        } else {
                return null;
        }
}

// This actually generates the dialplan
function disa_get_config($engine) {
        global $ext; 
        switch($engine) {
                case "asterisk":
                        $disalist = disa_list();
                        if(is_array($disalist)) {
                                foreach($disalist as $item) {
					// Create the disa-$id.conf file
					$fh = fopen("/etc/asterisk/disa-".$item['disa_id'].".conf", "w+");
					$pinarr = explode(',' , $item['pin'] );
					foreach($pinarr as $pin) {
						// empty password should be 'no-password'
						if ( (isset($pin) ? $pin : '') == '' )
							$pin = 'no-password';
						
						// Don't support remote MWI, too easy for users to break.
						fwrite($fh, "$pin|".$item['context']."|".$item['cid']."\n");
					}
					fclose($fh);
					
                                        $thisitem = disa_get(ltrim($item['disa_id']));
                                        // add dialplan

					if ($thisitem['needconf'] == 'CHECKED') {
						$ext->add('disa', $item['disa_id'], '', new ext_setvar('RESCOUNT', '1'));
						$ext->add('disa', $item['disa_id'], 'loop',  new ext_gotoif('$[ ${RESCOUNT} > 5]', 'end'));
						$ext->add('disa', $item['disa_id'], '',  new ext_read('RRES', 'press-1', '1', ',1,3'));
						$ext->add('disa', $item['disa_id'], '', new ext_setvar('RESCOUNT', '$[${RESCOUNT}+1]'));
						$ext->add('disa', $item['disa_id'], '', new ext_gotoif('$["x${RRES}"="x"]', 'loop'));
					}
                                        $ext->add('disa', $item['disa_id'], '', new ext_setvar('TIMEOUT(digit)', $thisitem['digittimeout']));
                                        $ext->add('disa', $item['disa_id'], '', new ext_setvar('TIMEOUT(response)', $thisitem['resptimeout']));
                                        $ext->add('disa', $item['disa_id'], '', new ext_playback('enter-password'));                              DIESE ZEILE LÖSCHEN
                                        $ext->add('disa', $item['disa_id'], '', new ext_disa('/etc/asterisk/disa-'.$item['disa_id'].'.conf|from-internal'));               DIESE ZEILE ÄNDERN IN no-password
					$ext->add('disa', $item['disa_id'], 'end', new ext_hangup(''));
                                }
                        }
                break;
        }
}


function disa_list() {
       $results = sql("SELECT * FROM disa","getAll",DB_FETCHMODE_ASSOC);
        if(is_array($results)){
                foreach($results as $result){
                        // check to see if we have a dept match for the current AMP User.
                        if (!isset($results['deptname']) || checkDept($result['deptname'])){
                                // return this item's dialplan destination, and the description
                                $allowed[] = $result;
                        }
                }
        }
        if (isset($allowed)) {
                return $allowed;
        } else {
                return null;
        }
}

function disa_get($id){
        //get all the variables for the meetme
        $results = sql("SELECT * FROM disa WHERE disa_id = '$id'","getRow",DB_FETCHMODE_ASSOC);
        return $results;
}

function disa_chk($post) {
	return true;
}

function disa_add($post) {
        if(!disa_chk($post))
                return null;
        extract($post);
	if (!isset($needconf)) 
		$needconf = '';
        if(empty($displayname)) $displayname = "unnamed";
        $results = sql("INSERT INTO disa (displayname,pin,cid,context,resptimeout,digittimeout,needconf) values (\"".str_replace("\"", "\"\"",$displayname)."\",\"".$pin."\",\"".str_replace("\"", "\"\"", $cid)."\",\"".$context."\", \"$resptimeout\", \"$digittimeout\", \"$needconf\")");
}

function disa_del($id) {
	$results = sql("DELETE FROM disa WHERE disa_id = \"$id\"","query");
	unlink("/etc/asterisk/disa-{$id}.conf");
}

function disa_edit($id, $post) {
	if (!disa_chk($post))
		return null;
	extract($post);
	if (!isset($needconf)) 
		$needconf = '';
        if(empty($displayname)) $displayname = "unnamed";
        $results = sql("UPDATE disa  set displayname = \"".str_replace("\"", "\"\"",$displayname)."\", pin = \"$pin\", cid = \"".str_replace("\"", "\"\"",$cid)."\", context = \"$context\", resptimeout = \"$resptimeout\", digittimeout = \"$digittimeout\", needconf = \"$needconf\" where disa_id = \"$id\"");
}
?>

Wenn ich die makierten Zeichen lösche bzw ändere entsteht in der exensionts_additional.conf auch der eintrag, den ich sonst immer manuell verändert habe und der auch funktionierte,
jetzt aber nach dieser Änderung erhalte ich den Rückruf, keine fragt nach dem Passwort sondern gleich Freizeichen (so wie es soll) aber nach Eingabe der Nummer erhalte ich Besetztzeichen.
 
Zuletzt bearbeitet:
2 Postings hintereinander sind zwar nicht gewünscht, sorgen hier aber vielleicht für bessere Übersicht.

Will man im Modul DISA auf ein Passwort verzichten UND hat keinen Bock auf die ständige Frage nach dem Passwort, obwohl keines nötig ist, sollte man folgendes machen:
in
/var/www/...path zu freepbx.../admin/modules/disa/functions.inc.php
die Zeile 53 mit folgendem Inhalt
Code:
$ext->add('disa', $item['disa_id'], '', new ext_playback('enter-password'));
löschen
und
die Zeile 54 mit folgendem Inhalt
Code:
$ext->add('disa', $item['disa_id'], '', new ext_disa('/etc/asterisk/disa-'.$item['disa_id'].'.conf|from-internal'));
in
Code:
$ext->add('disa', $item['disa_id'], '', new ext_disa('no-password|from-internal'));
ändern.
So klappt es zuverlässig ohne Passwort und lästiger Abfrage.
Wichtig ist aber, dass dann zb bei den Inbound routes dann anhand der Caller ID festgelegt wird, wem disa zugängig gemacht wird(sonst Gefahr von Missbrauch)

Der Fehler bei mir saß mal wieder vor dem Rechner und hatte statt no-password no-passwort geschrieben.
 
Kostenlos!

Statistik des Forums

Themen
248,882
Beiträge
2,303,904
Mitglieder
378,558
Neuestes Mitglied
fanvil3cx