如果用户在一段时间后不进行交互,请执行一些操作-PHP

如果用户在一段时间后不进行交互,请执行一些操作-PHP,php,api,Php,Api,我正在构建一个whatsapp bot,这个bot完全可以运行,但是如果用户在一段时间后没有与API交互,我想调用API。我试图处理会话,但不工作,我尝试了以下代码 session_start(); //**my bot code** $minutesBeforeSessionExpire=30; if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > (2))) {

我正在构建一个whatsapp bot,这个bot完全可以运行,但是如果用户在一段时间后没有与API交互,我想调用API。我试图处理会话,但不工作,我尝试了以下代码

session_start();

//**my bot code**

$minutesBeforeSessionExpire=30;
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > (2))) {

    $data2 = [
        'phone' => $_SESSION['phone'],
        'body' => 'Hello, Andrew!',
    ];
    $json2 = json_encode($data2);
    $options2 = stream_context_create(['http' => [
            'method'  => 'POST',
            'header'  => 'Content-type: application/json',
            'content' => $json2
        ]
    ]);
    $result2 = file_get_contents('api_call', false, $options2);
    session_unset();     // unset $_SESSION   
    session_destroy();   // destroy session data  
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity
不幸的是,“任何API”都是纯粹的“服务器端”。因此,当任何人“未能回复”时,它都无法“做出反应”。它唯一能做的就是,当出现[任何…]后续请求时,说:“非常抱歉,太晚了!”


关键的一点是,响应是被动的,而不是主动的。

为了在用户不交互时“做点什么”,必须有一些东西与用户交互。这通常是客户端脚本、websockets、signal R。这并不是自然而然地发生的,事实上恰恰相反,服务器在处理完传入的请求后,自然会完全忘记它。

对于那些发现这个问题的人,我通过将用户的最后一次交互存储在我的数据库中来解决我的问题


之后,我在我的cpanel上创建了一个cron来运行更新代码,一切都按预期运行。

该代码有什么问题?根本没有执行(至少是最后一部分)?您如何运行该代码(cron作业)?请添加更多详细信息我没有设置任何cron,当用户与whatsapp号码交互时,代码正在运行。对不起,我现在迷路了,你是说你希望机器人在某个定义的时间过去时向用户发送一些东西,而用户没有与之交互,对吗?如果是这样的话,您如何在没有用户干预的情况下运行代码?你在等魔法发生吗?你能解释一下吗?我想设置一个会话,过一段时间api会发送答案,所以我想我完全错了,我必须有一个cron来做这个?没问题,Mike Robinson的答案是正确的,这都是服务器端的,所以它是被动的,为了使其具有前瞻性,您必须使用cronjobs,或者在Laravel的情况下,使用queue jobs或schedule task或其他类似的东西。