Como sugiere Germán, algo de programación será necesario, es posible reducir esta programación al mínimo usando algún módulo existente como el Trunk Balance. Este módulo permite aceptar o denegar un llamado a un trunk dependiendo de montones de condiciones que en general aplican para LEAST COST ROUTING, pero en tu caso se podría usar también
1) Creas un nuevo trunk balance donde lo único que debes completar es:
Matching Rule: %%
Trunk Destination: (tu trunk real)
URL: https://localhost/whitelist.php?num=$OUTNUM$
URL Timeout: 5
URL Regex: /si/
Con estas reglas, no importa el CDR (Matching rule %%) se acepta, pero luego se consulta un URL, este URL debe devolver "si" si lo dejas pasar (lo autorizas), o no devolver nada o un "no" en caso que no quieras dejarlo pasar.
El código de whitelist.php sería así (muy simplificado, deberás poner credenciales de mysql correctas):
<?php
$num=$_REQUEST['num'];
$servername = "localhost";
$username = "admin";
$password = "password";
$dbname = "asterisk";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM whitelist WHERE number='$num'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "si"
} else {
echo "no";
}
$conn->close();
Y deberás crear una tabla en MySQL con esta estructura, la que deberás popular con tu gran lista de números
CREATE TABLE `whitelist` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`number` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
)
Finalmente en tus rutas salientes, usas el trunk balance creado en lugar de tu trunk regular.
Si te es util esto, por favor apoya en el proyecto en http://www.patreon.com/issabel