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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top