Есть скрипт на PHP который подхватывает номер телефона из БД создает .call файл для дозвона.
Совершается вызов абоненту.
Меняем статус номера в БД.
И отправляем номер в группу.
Все работает хорошо.
Но вот несколько но,
1) соединение клиентов из группы с номером абонента происходит случайно. и по этому бывает что 1 клиенту приходит сразу 2 номера и в такой ситуации абонент слышит музыку
2) скрипт подбирает номера даже если в группе все клиенты разговаривают. нужно чтобы скрипт определял что клиенты в группе в разговоре и вставал на паузу
Николай Юдин, у вас в вопросе описаны конкретные пункты решения. У вас есть БД, в ней статус. И статус очереди из AMI https://wiki.telefon1c.ru/kb:asterisk:ami:queues
Т.е. все входные данные имеются у скрипта. Его просто нужно написать, добавив проверку статуса перед созданием call-file. Кстати, можно и замениить call-file на вызов через AMI. А еще можно слушать события связанные с агентами - в AMI будут приходить события когда агент стал занят или освободился.
В чем суть вопроса, поясните. Пока похоже на задание.
#!/usr/bin/php -q
<?php
/*Подключение к БД*/
$host = '*'; // адрес сервера
$database = '**'; // имя базы данных
$user = '**'; // имя пользователя
$password = '***'; // пароль
$link = mysqli_connect($host, $user, $password, $database) or die("Ошибка " . mysqli_error($link));
// выполняем операции с базой данных
$query = "SELECT COUNT(id) FROM table_1 WHERE status='0'";
$result = mysqli_query($link, $query) or die("Ошибка Количества Строк В Таблице ".mysqli_error($link));
if ($result) {
echo mysqli_fetch_row($result)[0]."\n";
$countTABLE = mysqli_fetch_row($result)[0];
if ($countTABLE != '0'){
<------>mysqli_free_result($result);
<------>$query ="SELECT * FROM table_1 WHERE status = '0'";
<------>$result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link));
<------>if($result)
<------>{
<------> $rows = mysqli_num_rows($result); // количество полученных строк
<------>
<------> for ($i = 0 ; $i < $rows ; ++$i)
<------><------>$row = mysqli_fetch_row($result);
<------><------>echo $row[0]." ; ".$row[1]." ; ".$row[2]."\n";
<------>....
<------><------>$query_update = "UPDATE table_1 SET status='1' WHERE (id=".$row[0].") AND (number=".$row[1].")";
<------><------>$resultUPDATE = mysqli_query($link,$query_update) or die("Ошибка ". mysqli_error($link));
<------>....
<------><------>$idCALL = trim($row[0]);
<------><------>$numberCALL = trim($row[1]);
<------><------>
<------><------>
<------><------>$callfile="/media/Call-test/calls-".$numberCALL.".call";
<------><------>$cf =fopen($callfile,"w+");.
<------><------>fputs($cf,"Channel: Local/".$numberCALL."@call-test\n");
<------><------>fputs($cf,"Callerid: ".$numberCALL."\n");
<------><------>fputs($cf,"MaxRetries: 0\n");
<------><------>fputs($cf,"RetryTime: 30\n");
<------><------>fputs($cf,"WaitTime: 60\n");
<------><------>fputs($cf,"Account: account\n");
<------><------>fputs($cf,"Context: from-obzvon\n");
<------><------>fputs($cf,"Extension: s\n");
<------><------>fputs($cf,"Archive: Yes\n");
<------><------>fclose($cf);
<------><------>copy($callfile,"/var/spool/asterisk/outgoing/".$numberCALL.".call");
<------><------>do{
<------><------> $query_status = "SELECT * FROM table_1 WHERE (id='".$idCALL."') AND(number='".$numberCALL."')";
<------><------> $resultSTATUS = mysqli_query($link, $query_status);
<------><------> $rowSTATUS = mysqli_fetch_row($resultSTATUS);
<------><------> echo $rowSTATUS[2]."\n";
<------><------>}while ($rowSTATUS[2] == '1');
<------> }
<------>....
<------> //mysqli_free_result($resultUPDATE);
<------>....
<------> // очищаем результат
<------> mysqli_free_result($result);
<------> echo "Выполнение запроса прошло успешно";
<------>}
}
}
// закрываем подключение
mysqli_close($link);
?>
И для моих задач он работает вполне себе но перед тем как подключаться и смотреть номера мне нужно знать если у меня в группе свободные клиенты и стоит ли подбирать номер.
Дмитрий Шицков, Вот такой еще вопрос к вам возможно знаете как организовать распределение номеров в группе так чтобы не случайным образом а к примеру проверять время с последнего разговора и у кого время больше тому и номер?
Дмитрий Шицков, Спасайте практически доработал свой скрипт, но встала проблема со статусом отсутствие.
Если на софтфоне ставлю отсутствуют то скрипт видит оператора что он не говорит и звонит абоненту а потом не знает что с этим номер делать и держит его на удержание.
Николай,
напишите, пожалуйста, кол-во операторов ваших, количество линий городских (с которых вы совершаете исходящие вызовы), и ту интенсивность, которая вам нужна и которая у вас есть. Сколько вызовов в час/день.
В большинстве случаев call файлы вам не подойдут, потому что много дополнительной работы. Лучше взять специально заточенные программы для этого.