在健康类应用开发中,久坐预警是提升用户健康体验的重要功能,结合各类AI能力可以让久坐判断更精准,提醒更个性化。php作为常用的后端开发语言,可以很方便地对接不同AI服务实现这类功能。

前置准备
首先需要准备基础的开发环境,确保php版本在7.4及以上,安装curl扩展用于调用AI接口,同时准备一个可以接收用户久坐数据的存储模块,比如mysql数据库用来存储用户的久坐记录、提醒配置等信息。
需要提前申请对应AI服务的调用凭证,比如动作识别AI、自然语言处理AI的api_key,不同AI服务的作用如下:
- 动作识别AI:用于分析用户上传的坐姿、活动状态数据,判断是否属于久坐状态
- 自然语言处理AI:用于生成个性化的健康提醒文案,避免提醒内容千篇一律
- 语音合成AI:可选,用于将文字提醒转换为语音提醒,提升用户体验
核心功能实现步骤
1. 久坐状态检测逻辑
首先编写久坐状态判断的基础逻辑,结合动作识别AI的返回结果做最终判定,代码如下:
<?php
/**
* 调用动作识别AI判断用户是否处于久坐状态
* @param string $userActionData 用户动作数据,比如连续静坐时长、坐姿角度等
* @param string $aiApiKey 动作识别AI的调用凭证
* @return bool 是否处于久坐状态
*/
function checkSedentaryStatus($userActionData, $aiApiKey) {
// 动作识别AI的接口地址
$apiUrl = "https://ipipp.com/ai/action_detect";
// 构造请求参数
$postData = [
"action_data" => $userActionData,
"api_key" => $aiApiKey
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
// 假设AI返回结果中is_sedentary字段为1表示久坐
if (isset($result["is_sedentary"]) && $result["is_sedentary"] == 1) {
return true;
}
return false;
}
?>
2. 生成个性化健康提醒
当检测到用户处于久坐状态时,调用自然语言处理AI生成针对性的提醒文案,代码如下:
<?php
/**
* 调用自然语言处理AI生成健康提醒文案
* @param int $sedentaryMinutes 用户连续久坐时长,单位分钟
* @param string $nlpApiKey 自然语言处理AI的调用凭证
* @return string 生成的提醒文案
*/
function generateHealthReminder($sedentaryMinutes, $nlpApiKey) {
$apiUrl = "https://ipipp.com/ai/nlp_generate";
// 构造提示词,让AI生成符合场景的提醒
$prompt = "用户已经连续久坐{$sedentaryMinutes}分钟,请生成一条友好、实用的健康提醒,建议包含起身活动的小建议,字数控制在50字以内";
$postData = [
"prompt" => $prompt,
"api_key" => $nlpApiKey,
"max_tokens" => 100
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
// 假设AI返回结果中text字段为生成的文案
if (isset($result["text"])) {
return $result["text"];
}
// 兜底文案
return "您已经久坐{$sedentaryMinutes}分钟啦,建议起身活动5分钟,放松肩颈和腰部";
}
?>
3. 提醒推送逻辑
生成提醒文案后,需要将提醒推送给用户,这里以推送站内信为例,代码如下:
<?php
/**
* 推送健康提醒给用户
* @param int $userId 用户ID
* @param string $reminderContent 提醒内容
* @return bool 推送是否成功
*/
function pushHealthReminder($userId, $reminderContent) {
// 这里连接数据库,假设使用pdo连接mysql
$dbHost = "127.0.0.1";
$dbName = "health_db";
$dbUser = "root";
$dbPass = "123456";
try {
$pdo = new PDO("mysql:host={$dbHost};dbname={$dbName}", $dbUser, $dbPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO user_reminder (user_id, content, create_time) VALUES (:user_id, :content, :create_time)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(":user_id", $userId, PDO::PARAM_INT);
$stmt->bindParam(":content", $reminderContent, PDO::PARAM_STR);
$createTime = time();
$stmt->bindParam(":create_time", $createTime, PDO::PARAM_INT);
return $stmt->execute();
} catch (PDOException $e) {
// 记录错误日志
error_log("推送提醒失败:{$e->getMessage()}");
return false;
}
}
?>
完整流程串联
将上面的几个功能串联起来,实现完整的久坐预警流程,代码如下:
<?php
// 假设获取到的用户ID
$userId = 1001;
// 假设获取到的用户动作数据,实际场景从前端或设备上传获取
$userActionData = "continuous_sitting:60,posture:normal";
// 动作识别AI的凭证,实际从配置文件获取
$actionAiKey = "your_action_ai_key";
// 自然语言处理AI的凭证
$nlpAiKey = "your_nlp_ai_key";
// 第一步:检测是否久坐
$isSedentary = checkSedentaryStatus($userActionData, $actionAiKey);
if ($isSedentary) {
// 第二步:生成提醒文案,假设久坐60分钟
$reminder = generateHealthReminder(60, $nlpAiKey);
// 第三步:推送提醒
$pushResult = pushHealthReminder($userId, $reminder);
if ($pushResult) {
echo "久坐预警提醒推送成功";
} else {
echo "久坐预警提醒推送失败";
}
} else {
echo "用户未处于久坐状态,无需提醒";
}
?>
注意事项
在实际开发中需要注意几个问题,首先是AI接口的调用频率限制,避免频繁调用导致费用过高或者被封禁,可以给久坐检测增加时间间隔,比如每5分钟检测一次。其次是用户隐私保护,用户的行为数据需要加密存储,调用AI接口时如果需要上传用户数据,要确认AI服务商的隐私政策符合要求。最后是兜底逻辑,当AI接口调用失败时,要使用预设的提醒文案,保证功能可用性。
如果需要添加语音提醒功能,可以再对接语音合成AI,将生成的文字提醒转换为语音文件,推送给用户即可,整体流程和文字提醒类似,只需要增加语音合成的调用步骤。