[Gelöst] CALLERID(name) per AGI aus DB auslesen und zuweisen

masterdemo

Neuer User
Mitglied seit
10 Nov 2012
Beiträge
11
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich bin gerade dabei, herauszufinden ... wie ich die AbsenderNr einzelner Nebenstellen "dynamisch" zuweisen kann.... jedoch blick ich nicht ganz durch, wie ich Rückgaben in die Extensions.conf übergeben kann...

Problemstellung:

Ich habe hier 5 Nebenstellen [101 -106] mit einem HardwareTelefon, jedoch nur 2 SipAccounts die telefonieren können.
Da für unterschiedliche "Standorte" die Absenderrufnummer angepasst werden soll... würde ich diese gerne per AGI / php aus einer mySQL -DB auslesen und dann vor einem Anruf zuweisen.

Code:
exten => _0.,n,AGI(setCallnum.php,${CALLERID(NUM)})
exten = _0.,n,NoOp(callout ist auf den wert ${callout} gesetzt)

Code:
#!/usr/bin/php -q
<?php
function read() {
  global $in;
  $input = str_replace("\n", "", fgets($in, 4096));
  return $input;
}
 
set_time_limit(5); /* max. laufzeit-limit für das script, eventuell erhöhen (sekunden) */
 
$in=fopen("php://stdin","r");
 
while ($env=read()) {
  $s = split(": ",$env);
  $agi[str_replace("agi_","",$s[0])] = trim($s[1]);
  if (($env == "") || ($env == "\n")) {
    break;
  }
}
ksort($agi);
reset($agi);
/*
echo "verbose \"AGI Variables:\"\n";
read();
echo "verbose \"----------------------------------------------\"\n";
read();
while (list($key,$val)=each($agi)) {
    echo "verbose \"agi['".$key."']= ".$val."\"\n";
    read();
}
echo "verbose \"----------------------------------------------\"\n";
read();
echo "exec Hangup\n";

*/
$callout=491234567891;
echo "exec Set CallOut=$callout\n";
read();
?>


Frage:
Wie bekomme ich die Variable CALLERID(name) aus einem AGI Script wieder in den Dialplan ?

Würde mich in jedem Fall über einen Tip freuen :)

Gruß Demo
 
Zuletzt bearbeitet:
Im AGI mittels Set Variable CallOut=$callout und im Dialplan dann Set(CALLERID(name)=${CallOut}
 
Hi und danke für das Feedback :)

d.h.
Code:
#!/usr/bin/php -q
<?php
function read() {
  global $in;
  $input = str_replace("\n", "", fgets($in, 4096));
  return $input;
}
 
set_time_limit(5); /* max. laufzeit-limit für das script, eventuell erhöhen (sekunden) */
 
$in=fopen("php://stdin","r");
 
while ($env=read()) {
  $s = split(": ",$env);
  $agi[str_replace("agi_","",$s[0])] = trim($s[1]);
  if (($env == "") || ($env == "\n")) {
    break;
  }
}
ksort($agi);
reset($agi);
/*
echo "verbose \"AGI Variables:\"\n";
read();
echo "verbose \"----------------------------------------------\"\n";
read();
while (list($key,$val)=each($agi)) {
    echo "verbose \"agi['".$key."']= ".$val."\"\n";
    read();
}
echo "verbose \"----------------------------------------------\"\n";
read();
echo "exec Hangup\n";

*/
$callout=4926822831231;
echo "Set Variable CallOut=$callout\n";
read();
?>

und dann im DIALPLAN:
Code:
exten => _0.,n,AGI(setCallnum.php,${CALLERID(NUM)})
exten =>  _0.,n,Set(CALLERID(name)=${CallOut})


EDIT: Das funktioniert leider noch nicht so wie es soll... Idee ?
 
Zuletzt bearbeitet:
So... Daten an Dialplan zurückgeben funktioniert jetzt... :)
Nur beim Daten übergeben an php Script hängt es jetzt noch... :(

Meine Einträge im Dialplan
Code:
exten => _0.,1,Set(CALLERID(number)=139xxxx0)
exten => _0.,n,AGI(setCallnum.php,${CALLERID(NUM)})
exten => _0.,n,NoOp(Val: ${CALLOUT})
exten => _0.,n,Set(CALLERID(name)=${CALLOUT})

exten => _0.,n,Dial(SIP/${EXTEN}@139xxxx0)

Mein php Script
Code:
#!/usr/bin/php -q
<?php
function read() {
  global $in;
  $input = str_replace("\n", "", fgets($in, 4096));
  return $input;
}
 
set_time_limit(5); /* max. laufzeit-limit für das script, eventuell erhöhen (sekunden) */
 
/// Lese EXTEN aus Dialplan
$innum=fopen("php://stdin","r");
 
/// prüfe welche EXTEN versucht anzurufen...

if($innum=='139xxxx0'){
$CALLOUTNUM=49123456781;
}
else
{
$CALLOUTNUM=49123456782;
}

/// Setze entsprechende Absendernummer
fwrite(STDOUT, "SET VARIABLE CALLOUT ".$CALLOUTNUM." \n");
fflush(STDOUT);
?>

Wobei mir jetzt nicht so klar ist, wie ich die übergeben Variable verarbeiten soll... ?

Laut http://www.ip-phone-forum.de/showthread.php?t=140115&p=893892&viewfull=1#post893892 gibt es die Möglichkeit per GET VARIABLE... doch wie?
 
Du übergibst die ursprüngliche Callerid ja als Argument, somit kannst Du per $argv drauf zugreifen.

In Deinem ersten Beispiel ist eine Funktion drin, die Dir einen Haufen vordefinierte Variablen im Array $agi liefert. Da ist unter anderem die Callerid dabei.

Oder eben die letzte Möglichkeit mit GET VARIABLE variable und anschließend $tmp=read();
 
Hi, wollte mich nur noch einmal für die Hilfe bedanken :) Funktioniert nun wie gewünscht :)
 
Das freut mich. Wenn Du magst, kannst Du Dein Skript und den Aufruf dazu für die Allgemeinheit hier hinterlassen. Auf jeden Fall könntest Du aber bitte das Titel-Prefix in "gelöst" ändern, dazu im 1. Port auf Bearbeiten->Erweitert.
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,909
Beiträge
2,220,698
Mitglieder
371,660
Neuestes Mitglied
LukasB
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.