gpt4 book ai didi

php - Vicidial PHP/Json/Mysql 组合在监视器中提取数据

转载 作者:行者123 更新时间:2023-11-29 11:47:46 24 4
gpt4 key购买 nike

问题标题可能非常模糊,但我不知道到底要写什么,所以让我们进入正题

我有一个脚本,可以从 Vicidial 数据库中提取数据以将其显示在电视屏幕上

现在,当只涉及一台服务器时,它基本上工作得很好,因为它只有一个扩展要处理,但当有两个扩展时,事情会变得更加复杂。最好我向您展示代码:

$start_time = time();
$data = array();

$sql = "SELECT
extension,
vicidial_live_agents.user,
conf_exten,
vicidial_live_agents.status,
vicidial_live_agents.server_ip,
UNIX_TIMESTAMP(last_call_time) as last_call_time,
UNIX_TIMESTAMP(last_call_finish) as last_call_finish,
call_server_ip,
vicidial_live_agents.campaign_id,
vicidial_users.user_group,
vicidial_users.full_name,
vicidial_live_agents.comments,
vicidial_live_agents.calls_today,
vicidial_live_agents.callerid,
lead_id,
UNIX_TIMESTAMP(last_state_change) as last_state_change,
on_hook_agent,
ring_callerid,
agent_log_id
FROM
vicidial_live_agents,
vicidial_users
WHERE
vicidial_live_agents.user = vicidial_users.user";

$db = new mysqli("192.168.X.X", "cron", "XXXXXX", "asterisk");


$result = $db->query($sql);

$sql2 = "select callerid,lead_id,phone_number from vicidial_auto_calls";
$cidresult = $db->query($sql2);
$callerids = '';
while ($row = $cidresult->fetch_assoc()){
$callerids .= $row['callerid'] . "|";
}

while ($row = $result->fetch_assoc()){
$status = $row['status'];

if ($row['on_hook_agent'] == 'Y')
$status = 'RING';

// 3-way Check
if ($row['lead_id'] != 0){
$sql = "SELECT UNIX_TIMESTAMP(last_call_time) FROM vicidial_live_agents WHERE lead_id = '" . $db->escape_string($row['lead_id']) . "' AND status = 'INCALL' ORDER BY UNIX_TIMESTAMP(last_call_time) DESC";
$r2 = $db->query($sql);
if (!$r2){
printf("Error: %s\n", $db->error);
} else {
if ($r2->num_rows > 1){
$status = "3-WAY";
}
}
}

$epoch_sec = 0;
if (preg_match("/READY|PAUSED/i", $row['status'])){
$epoch_sec = $row['last_state_change'];

if ($row['lead_id'] > 0){
$status = 'DISPO';
}
} else {
$epoch_sec = $row['last_call_time'];
}

if (preg_match("/INCALL/i", $status)){
$sql4 = "SELECT UNIX_TIMESTAMP(parked_time) AS pt FROM parked_channels WHERE channel_group = '" . $db->escape_string($row['callerid']) . "'";
$q4 = $db->query($sql4);

if ($q4->num_rows > 0){
$status = 'PARK';
$rowP = $q4->fetch_assoc();
$epoch_sec = $rowP['pt'];
} else{
if (!preg_match("/" . $row['callerid'] . "\|/",$callerids)){
$epoch_sec = $row['last_state_change'];

$status = 'DEAD';
}
}
}

switch($status){
case 'DISPO':
$colour = '8e44ad';
break;
case 'QUEUE':
$colour = '9b59b6';
break;
case 'INCALL':
$colour = '3498db';
break;
case 'PARK':
$colour = 'e67e22';
break;
case 'DEAD':
$colour = '004D86';
$status = 'GONE';
break;
case '3-WAY':
$colour = '1abc9c';
break;
case 'RING':
$colour = '16a085';
break;
case 'PAUSED':
$colour = 'c0392b';
break;
case 'CLOSER':
$status = 'READY (C)';
case 'READY':
$colour = '27ae60';
break;
default:
$colour = 'D2BEAA';
break;
}

$data[$row['extension']] = array(
'user' => $row['user'],
'status' => $status,
'conf_exten' => $row['conf_exten'],
'seconds' => ( time() - $epoch_sec ),
'campaign_id' => $row['campaign_id'],
'user_group' => $row['user_group'],
'full_name' => $row['full_name'],
'calls_today' => $row['calls_today'],
'lead_id' => $row['lead_id'],
'colour' => $colour
);

}

现在,例如,当分机为 SIP/P023 时,一切正常,但由于用户可以同时使用分机 SIP/P023 和 SIP/B023 I需要找到一个等待,你有相同的输出

Screenshot of what i have

现在我需要用任一扩展女巫处于事件状态的结果制作一个方 block (它们不能同时处于事件状态)

我不知道我是否已经解释过自己,但我希望至少

最佳答案

您尝试过 API 吗?这里:http://www.vicidial.org/docs/NON-AGENT_API.txt

查找agent_status 部分。这将为您提供用户的实时统计数据。因此,您所要做的就是将脚本设置为以您想要的任何时间间隔刷新它。如果您需要有关 API 的更多帮助,请告诉我。

关于php - Vicidial PHP/Json/Mysql 组合在监视器中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34614118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com