MySQL, Asterisk DialPlans und Rufweiterleitung
Frage
Wie kann ich Asterisk eingehende Anrufe auf Anpassung der eingehenden Rufnummer mit einer Reihe basierend auf weiterleiten weiterleiten zu? Beide Nummern werden in einer MySQL-Datenbank gespeichert.
Lösung 3
Die Lösung, die ich suchte am Ende aussehen wie folgt aus:
[default]
exten => _X.,1,Set(ARRAY(${EXTEN}_phone)=${DTC_ICF(phone_number,${EXTEN})})
exten => _X.,n(callphone),Dial(SIP/metaswitch/${${EXTEN}_phone},26)
exten => _X.,n(end),Hangup()
Andere Tipps
Sorry für die lange Codebeispiel, aber mehr als die Hälfte davon Code debuggen Ihnen helfen, es einzurichten.
Ich gehe davon aus Ihrem Server bereits über eine moderne Version von PHP (bei /usr/bin/php
) mit der PDO-Bibliothek, und dass Sie eine Datenbanktabelle namens fwd_table
haben mit Spalten caller_id
und destination
.
/ var / lib / asterisk / agi-ist erhält eine Kopie des PHP AGI Bibliothek. Dann erstellen Sie so etwas wie forward_by_callerid.agi
eine Datei mit dem Namen, der enthält:
#!/usr/bin/php
<?php
ini_set('display_errors','false'); //Supress errors getting sent to the Asterisk process
require('phpagi.php');
$agi = new AGI();
try {
$pdo = new PDO('mysql:host='.$db_hostname.';dbname='.$db_database.';charset=UTF-8', $db_user, $db_pass);
} catch (PDOException $e) {
$agi->conlog("FAIL: Error connecting to the database! " . $e->getMessage());
die();
}
$find_fwd_by_callerid = $pdo->prepare('SELECT destination FROM fwd_table WHERE caller_id=? ');
$caller_id = $agi->request['agi_callerid'];
if($callerid=="unknown" or $callerid=="private" or $callerid==""){
$agi->conlog("Call came in without caller id, I give up");
exit;
}else{
$agi->conlog("Call came in with caller id number $caller_id.");
}
if($find_fwd_by_callerid->execute(array($caller_id)) === false){
$agi->conlog("Database problem searching for forward destination (find_fwd_by_callerid), croaking");
exit;
}
$found_fwds = $find_fwd_by_callerid->fetchAll();
if(count($found_fwds) > 0){
$destination = $found_contacts[0]['destination'];
$agi->set_variable('FWD_TO', $destination);
$agi->conlog("Caller ID matched, setting FWD_TO variable to ''");
}
?>
Dann aus dem Wählplan können Sie es so nennen:
AGI(forward_by_callerid.agi)
Und wenn Ihre Datenbank ein Spiel hat, wird die Variable FWD_TO
mit Güte gesetzt. Bearbeiten Sie Ihre Frage, wenn Sie weitere Hilfe benötigen immer dies in Ihrem Wählplan integriert.
Dieser Artikel sollte es tun. Es geht um drei Zeilen Code und einige einfache Abfragen hinzuzufügen und Weiterleitungsregeln zu entfernen.