活动 · 日
接口简介
活动日视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"endDate": "2026-09-10",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-10",
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "activity",
"insightContext": {
"mode": "today_so_far",
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-09-10T08:00+08:00",
"factVersion": "1f2f0d71af4f4b0be54aa1226ae515b0346e26ed364a93a400c51ae405eecbf8"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": null,
"metrics": {
"activityTime": {
"activityMinutes": 10.0,
"activityMinutesGoal": 60.0
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "day"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 否 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 否 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 否 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:日视图的开始和结束日期必须是同一天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "activity",
"viewWindow": "day",
"period": {
"startDate": "2026-09-10",
"endDate": "2026-09-10",
"timezone": "Asia/Shanghai",
"isCompleted": false
},
"status": "observation",
"severity": "none",
"summary": "今天到 08:00,Pocky 已经活动了 10 分钟,离每天 1 小时的目标还差 50 分钟。",
"generation": {
"ruleId": "ACTIVITY_IN_PROGRESS_SUMMARY",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
activity-today-below-goal 今天 · 离目标还差 | observation | 今天到 08:00,Pocky 已经活动了 10 分钟,离每天 1 小时的目标还差 50 分钟。 | As of 08:00, Pocky has been active for 10 min today, 50 min short of its 1h daily goal. | Hoy hasta las 08:00, Pocky lleva 10 min de actividad, a 50 min de su meta diaria de 1 h. |
activity-today-goal-met 今天 · 已达到目标 | observation | 今天到 08:00,Pocky 已经活动了 1 小时 1 分钟,已经达到每天 1 小时的目标。 | As of 08:00, Pocky has been active for 1h 1m today, already meeting its 1h daily goal. | Hoy hasta las 08:00, Pocky lleva 1 h 1 min de actividad y ya cumplió su meta diaria de 1 h. |
activity-day-high 历史某天 · 活动偏多 | attention | 9月8日,Pocky 活动了 2 小时 30 分钟,多于它平时的范围(40 分钟–1 小时 20 分钟)。活动之间留些安静休息的时间,备好饮水。 | On Sep 8, Pocky was active for 2h 30m, more than its usual range (40 min–1h 20m). Leave quiet rest between activities and keep water handy. | El 8 de sept., Pocky tuvo 2 h 30 min de actividad, más que su rango habitual (40 min–1 h 20 min). Deja ratos de descanso tranquilo entre actividades y ten agua a mano. |
activity-day-normal 历史某天 · 在平时范围内 | normal | 9月8日,Pocky 活动了 1 小时,在它平时的范围内(40 分钟–1 小时 20 分钟)。 | On Sep 8, Pocky was active for 1h, within its usual range (40 min–1h 20m). | El 8 de sept., Pocky tuvo 1 h de actividad, dentro de su rango habitual (40 min–1 h 20 min). |
活动 · 周
接口简介
活动周视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-07",
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "activity",
"insightContext": {
"mode": "selected_window",
"comparison": {
"unusualLowDays": 1,
"changePercent": 12.3,
"unusualHighDays": 1
},
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-09-10T08:00+08:00",
"factVersion": "c0736b1a2a89d04f65b69ccace8874a80b529a6c255a350ee4aadd86a24903d9"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"unusualDays": 2,
"judgedDays": 3,
"ruleVersion": "activity-judgment-v1",
"rating": null,
"baselineSource": "personal",
"direction": null
},
"metrics": {
"activityTime": {
"averageDailyActivityMinutes": 30.0,
"dailyActivityMinutes": [30.0, 30.0, 30.0, 10.0, null, null, null]
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "week"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 否 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 否 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 否 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:周视图必须是从周一开始的连续 7 天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "activity",
"viewWindow": "week",
"period": {
"startDate": "2026-09-07",
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"isCompleted": false
},
"status": "attention",
"severity": "low",
"summary": "本周有 1 天 Pocky 的活动比平时少、1 天比平时多,日均 30 分钟,比上周多 12%。留意精神、食欲和外出意愿有没有变化。",
"generation": {
"ruleId": "ACTIVITY_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
activity-week-mixed 本周 · 1 天偏少、1 天偏多 | attention | 本周有 1 天 Pocky 的活动比平时少、1 天比平时多,日均 30 分钟,比上周多 12%。留意精神、食欲和外出意愿有没有变化。 | This week, Pocky was less active than usual on 1 day and more active on 1 day, averaging 30 min a day, 12% more than last week. Watch for changes in energy, appetite, and interest in going out. | Esta semana, Pocky tuvo menos actividad de lo habitual 1 día y más 1 día; promedió 30 min al día, un 12% más que la semana pasada. Observa si hay cambios en su energía, su apetito o sus ganas de salir. |
activity-week-normal 本周 · 都在平时范围内 | normal | 本周 Pocky 日均活动 30 分钟,比上周多 12%,3 天都在它平时的范围内。 | This week, Pocky's activity stayed within its usual range on all 3 days, averaging 30 min a day, 12% more than last week. | Esta semana, la actividad de Pocky se mantuvo dentro de su rango habitual los 3 días, con 30 min al día en promedio, un 12% más que la semana pasada. |
activity-week-few-days 本周 · 只有 2 天有记录 | observation | 本周 Pocky 日均活动 30 分钟(只有 2 天有记录)。 | This week, Pocky averaged 30 min of activity a day (only 2 days with records). | Esta semana, Pocky tuvo 30 min de actividad al día en promedio (solo 2 días con registros). |
活动 · 月
接口简介
活动月视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"endDate": "2026-08-31",
"timezone": "Asia/Shanghai",
"startDate": "2026-08-01",
"isCompleted": true
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "activity",
"insightContext": {
"mode": "selected_window",
"comparison": {
"unusualLowDays": 1,
"changePercent": -6.2,
"unusualHighDays": 0
},
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-08-31T08:00+08:00",
"factVersion": "38a6112e3a1f023587fcbd587e02ffb071e47fdffe85b2553f3a16aa0754a18a"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"unusualDays": 1,
"judgedDays": 16,
"ruleVersion": "activity-judgment-v1",
"rating": null,
"baselineSource": "personal",
"direction": null
},
"metrics": {
"activityTime": {
"averageDailyActivityMinutes": 55.0,
"dailyActivityMinutes": [40.0, null, 42.0, null, 44.0, null, 46.0, null, 48.0, null, 50.0, null, 52.0, null, 54.0, null, 56.0, null, 58.0, null, 60.0, null, 62.0, null, 64.0, null, 66.0, null, 68.0, null, 70.0]
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "month"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 否 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 否 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 否 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:月视图必须覆盖一个完整的自然月。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "activity",
"viewWindow": "month",
"period": {
"startDate": "2026-08-01",
"endDate": "2026-08-31",
"timezone": "Asia/Shanghai",
"isCompleted": true
},
"status": "attention",
"severity": "low",
"summary": "这个月有 1 天 Pocky 的活动比平时少,日均 55 分钟,比前一个月少 6%。留意精神、食欲和外出意愿有没有变化。",
"generation": {
"ruleId": "ACTIVITY_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
activity-month-low 上个月 · 1 天偏少 | attention | 这个月有 1 天 Pocky 的活动比平时少,日均 55 分钟,比前一个月少 6%。留意精神、食欲和外出意愿有没有变化。 | That month, Pocky was less active than usual on 1 day, averaging 55 min a day, 6% less than the month before. Watch for changes in energy, appetite, and interest in going out. | Ese mes, Pocky tuvo menos actividad de lo habitual 1 día; promedió 55 min al día, un 6% menos que el mes anterior. Observa si hay cambios en su energía, su apetito o sus ganas de salir. |
休息 · 日
接口简介
休息日视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"endDate": "2026-09-10",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-10",
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "rest",
"insightContext": {
"mode": "last_night",
"comparison": {
"pageEvaluationBasis": "personal"
},
"asOf": "2026-09-10T15:00+08:00",
"sourceSnapshot": {
"snapshotState": "versioned",
"snapshotId": "rs_e4d748b697b4e5de994d544c58884b6d",
"asOf": 1788998400000,
"computedAt": 1788998400000,
"sourceCompleteness": "complete",
"sourceWatermarks": {
"posture": {
"cursor": null,
"observedThrough": 1788998400000,
"completeThrough": 1788998400000
},
"wear": {
"cursor": null,
"observedThrough": 1788998400000,
"completeThrough": 1788998400000
},
"step": {
"cursor": null,
"observedThrough": 1788998400000,
"completeThrough": 1788998400000
}
},
"aggregateVersion": "rest-detail-v2-c2"
},
"observedThrough": "2026-09-10T08:00+08:00",
"factVersion": "8aa77bd699e369b955b3c23e7d57b77637d303d2d2257d924fbed1293821ecf7"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"lowRestDays": null,
"ruleVersion": "sleep-rating-c2-v1",
"rating": null,
"ratedNights": 0,
"baselineSource": "personal",
"direction": null
},
"metrics": {
"night": {
"interruptions": {
"count": 0
},
"nightRest": {
"minutes": 300.5
},
"longestRestBlockMinutes": 300.5,
"nightActivity": {
"minutes": 299.5
},
"endAt": "2026-09-10T08:00+08:00",
"startAt": "2026-09-09T22:00+08:00",
"isCompleted": true,
"wearingMinutes": 600.0
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "day"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 否 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 否 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.ratedNights | integer | 是 | 有服务端评级的夜数。 |
suppliedJudgment.lowRestDays | integer|null | 否 | 睡得差的夜数。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:日视图的开始和结束日期必须是同一天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "rest",
"viewWindow": "day",
"period": {
"startDate": "2026-09-10",
"endDate": "2026-09-10",
"timezone": "Asia/Shanghai",
"isCompleted": false
},
"status": "observation",
"severity": "none",
"summary": "昨夜,Pocky 休息了 5 小时 1 分钟,中间没有醒。",
"generation": {
"ruleId": "REST_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
rest-last-night 昨夜 · 还没有评级 | observation | 昨夜,Pocky 休息了 5 小时 1 分钟,中间没有醒。 | Last night, Pocky rested for 5h 1m without waking. | Anoche, Pocky descansó 5 h 1 min sin despertarse. |
rest-day-good 昨夜 · 睡得好 | normal | 昨夜,Pocky 休息了 5 小时 1 分钟,中间没有醒。整晚睡得不错。 | Last night, Pocky rested for 5h 1m without waking. It slept well. | Anoche, Pocky descansó 5 h 1 min sin despertarse. Durmió bien. |
rest-day-fair-factors 昨夜 · 一般,主要是夜醒 | observation | 昨夜,Pocky 休息了 5 小时 1 分钟,中间没有醒。睡得一般,主要是夜里醒得比平时多、休息时间比平时短。 | Last night, Pocky rested for 5h 1m without waking. It slept fairly well; it woke up more often than usual and it rested less than usual. | Anoche, Pocky descansó 5 h 1 min sin despertarse. Durmió regular; se despertó más veces de lo habitual y descansó menos de lo habitual. |
rest-day-poor-streak 昨夜 · 较差且连续 2 晚 | attention | 昨夜,Pocky 休息了 3 小时 30 分钟,中间醒了 5 次。睡得不太好,主要是休息时间比平时短,已经连续 2 晚。回看夜里的环境和作息有没有变化,也给它留些安静休息的时间。 | Last night, Pocky rested for 3h 30m, waking 5 times. It didn't sleep well; it rested less than usual, 2 nights in a row. Check whether the nighttime setting or routine has changed, and leave room for quiet rest. | Anoche, Pocky descansó 3 h 30 min y se despertó 5 veces. No durmió bien; descansó menos de lo habitual, 2 noches seguidas. Revisa si cambió el entorno o la rutina por la noche y dale tiempo para descansar tranquilo. |
rest-day-short-wear 昨夜 · 只戴了约 3 小时 | observation | 昨夜,Pocky 休息了 5 小时 1 分钟,中间没有醒。这晚项圈只戴了约 3 小时,休息还没记全。 | Last night, Pocky rested for 5h 1m without waking. The collar was worn for only about 3 hours that night, so its rest isn't fully captured. | Anoche, Pocky descansó 5 h 1 min sin despertarse. Esa noche el collar solo estuvo puesto alrededor de 3 horas, así que su descanso no quedó registrado del todo. |
rest-zero-night 昨夜 · 一整晚没有休息 | attention | 昨夜,Pocky 休息了 0 分钟。睡得不太好。回看夜里的环境和作息有没有变化,也给它留些安静休息的时间。 | Last night, Pocky rested for 0 min. It didn't sleep well. Check whether the nighttime setting or routine has changed, and leave room for quiet rest. | Anoche, Pocky descansó 0 min. No durmió bien. Revisa si cambió el entorno o la rutina por la noche y dale tiempo para descansar tranquilo. |
rest-today-daytime-only 今天 · 只有白天的休息记录 | observation | 今天到 14:59,Pocky 白天休息了 1 小时 40 分钟。 | As of 14:59 today, Pocky has had 1h 40m of daytime rest. | Hoy hasta las 14:59, Pocky ha descansado 1 h 40 min durante el día. |
休息 · 周
接口简介
休息周视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"elapsedNights": 4,
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-07",
"validNights": 4,
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "rest",
"insightContext": {
"mode": "selected_window",
"asOf": "2026-09-10T15:00+08:00",
"sourceSnapshot": {
"snapshotState": "versioned",
"snapshotId": "rs_f67957b4f955467d11a2a7c1c2f3dd3a",
"asOf": 1788739200000,
"computedAt": 1788998400000,
"sourceCompleteness": "complete",
"sourceWatermarks": {
"posture": {
"cursor": null,
"observedThrough": 1788998400000,
"completeThrough": 1788739200000
},
"wear": {
"cursor": null,
"observedThrough": 1788998400000,
"completeThrough": 1788739200000
},
"step": {
"cursor": null,
"observedThrough": 1788998400000,
"completeThrough": 1788739200000
}
},
"aggregateVersion": "rest-detail-v2-c2"
},
"observedThrough": "2026-09-10T08:00+08:00",
"factVersion": "5a9810d698695623a1f5e37c75a29d9248cd591f5e5926e39d9aa1c96cb5c037",
"comparison": {
"changePercent": 4.0
}
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"lowRestDays": 0,
"ruleVersion": "sleep-rating-c2-v1",
"rating": null,
"ratedNights": 4,
"baselineSource": "personal",
"direction": null
},
"metrics": {
"nightlyRestDurations": [
{
"nightDate": "2026-09-07",
"deepRestMinutes": 300.5,
"lightMovementMinutes": 0.0
},
{
"nightDate": "2026-09-08",
"deepRestMinutes": 300.5,
"lightMovementMinutes": 0.0
},
{
"nightDate": "2026-09-09",
"deepRestMinutes": 300.5,
"lightMovementMinutes": 0.0
},
{
"nightDate": "2026-09-10",
"deepRestMinutes": 300.5,
"lightMovementMinutes": 0.0
},
{
"nightDate": "2026-09-11",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-12",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-13",
"deepRestMinutes": null,
"lightMovementMinutes": null
}
],
"interruptions": {
"averageCount": 0.0
},
"nightRest": {
"averageMinutes": 300.5
},
"nightActivity": {
"averageMinutes": 299.5
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "week"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 是 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 是 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.ratedNights | integer | 是 | 有服务端评级的夜数。 |
suppliedJudgment.lowRestDays | integer|null | 否 | 睡得差的夜数。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:周视图必须是从周一开始的连续 7 天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "rest",
"viewWindow": "week",
"period": {
"startDate": "2026-09-07",
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"isCompleted": false,
"elapsedNights": 4,
"validNights": 4
},
"status": "normal",
"severity": "none",
"summary": "本周 Pocky 平均每晚休息 5 小时 1 分钟,比上周多 4%,夜里基本没醒,4 晚里没有一晚睡得不好。",
"generation": {
"ruleId": "REST_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
rest-week-normal 本周 · 没有睡得差的晚上 | normal | 本周 Pocky 平均每晚休息 5 小时 1 分钟,比上周多 4%,夜里基本没醒,4 晚里没有一晚睡得不好。 | This week, none of Pocky's 4 nights was a poor one; it rested for 5h 1m a night on average, 4% more than last week and hardly woke at night. | Esta semana, ninguna de las 4 noches de Pocky fue mala; descansó 5 h 1 min por noche en promedio, un 4% más que la semana pasada y casi no se despertó por la noche. |
rest-week-poor-nights 本周 · 2 晚睡得差 | attention | 本周 Pocky 平均每晚休息 5 小时 1 分钟,夜里基本没醒,有 2 晚睡得不太好。回看夜里的环境和作息有没有变化,也给它留些安静休息的时间。 | This week, Pocky rested for 5h 1m a night on average and hardly woke at night; 2 nights were poor. Check whether the nighttime setting or routine has changed, and leave room for quiet rest. | Esta semana, Pocky descansó 5 h 1 min por noche en promedio y casi no se despertó por la noche; 2 noches fueron malas. Revisa si cambió el entorno o la rutina por la noche y dale tiempo para descansar tranquilo. |
rest-week-daytime-only 本周 · 只有白天的休息记录 | observation | 本周 Pocky 白天日均休息 1 小时 10 分钟。 | This week, Pocky had 1h 10m of daytime rest a day on average. | Esta semana, Pocky tuvo 1 h 10 min de descanso diurno al día en promedio. |
休息 · 月
接口简介
休息月视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"elapsedNights": 9,
"endDate": "2026-09-30",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-01",
"validNights": 6,
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "rest",
"insightContext": {
"mode": "selected_window",
"asOf": "2026-09-10T07:59+08:00",
"sourceSnapshot": {
"snapshotState": "versioned",
"snapshotId": "rs_441d8ca985b0651519aef7c88d697d46",
"asOf": 1788480000000,
"computedAt": 1788912000000,
"sourceCompleteness": "complete",
"sourceWatermarks": {
"posture": {
"cursor": null,
"observedThrough": 1788912000000,
"completeThrough": 1788480000000
},
"wear": {
"cursor": null,
"observedThrough": 1788912000000,
"completeThrough": 1788480000000
},
"step": {
"cursor": null,
"observedThrough": 1788912000000,
"completeThrough": 1788480000000
}
},
"aggregateVersion": "rest-detail-v2-c2"
},
"observedThrough": "2026-09-09T08:00+08:00",
"factVersion": "df4dad91bdf03010d2f53512542907d4759e898a81ca97e91614e8f43cdb3b4a"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"lowRestDays": null,
"ruleVersion": "sleep-rating-c2-v1",
"rating": null,
"ratedNights": 0,
"baselineSource": null,
"direction": null
},
"metrics": {
"nightlyRestDurations": [
{
"nightDate": "2026-09-01",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-02",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-03",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-04",
"deepRestMinutes": 80.0,
"lightMovementMinutes": 0.0
},
{
"nightDate": "2026-09-05",
"deepRestMinutes": 80.0,
"lightMovementMinutes": 0.0
},
{
"nightDate": "2026-09-06",
"deepRestMinutes": 80.0,
"lightMovementMinutes": 0.0
},
{
"nightDate": "2026-09-07",
"deepRestMinutes": 80.0,
"lightMovementMinutes": 0.0
},
{
"nightDate": "2026-09-08",
"deepRestMinutes": 80.0,
"lightMovementMinutes": 0.0
},
{
"nightDate": "2026-09-09",
"deepRestMinutes": 80.0,
"lightMovementMinutes": 0.0
},
{
"nightDate": "2026-09-10",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-11",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-12",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-13",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-14",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-15",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-16",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-17",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-18",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-19",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-20",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-21",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-22",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-23",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-24",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-25",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-26",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-27",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-28",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-29",
"deepRestMinutes": null,
"lightMovementMinutes": null
},
{
"nightDate": "2026-09-30",
"deepRestMinutes": null,
"lightMovementMinutes": null
}
],
"interruptions": {
"averageCount": 0.0
},
"nightRest": {
"averageMinutes": 80.0
},
"nightActivity": {
"averageMinutes": 520.0
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "month"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 是 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 是 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.ratedNights | integer | 是 | 有服务端评级的夜数。 |
suppliedJudgment.lowRestDays | integer|null | 否 | 睡得差的夜数。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:月视图必须覆盖一个完整的自然月。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "rest",
"viewWindow": "month",
"period": {
"startDate": "2026-09-01",
"endDate": "2026-09-30",
"timezone": "Asia/Shanghai",
"isCompleted": false,
"elapsedNights": 9,
"validNights": 6
},
"status": "observation",
"severity": "none",
"summary": "本月 Pocky 平均每晚休息 1 小时 20 分钟,夜里基本没醒。9月4日那晚休息最长,有 1 小时 20 分钟。",
"generation": {
"ruleId": "REST_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
rest-month-pattern 本月 · 没有评级时说规律 | observation | 本月 Pocky 平均每晚休息 1 小时 20 分钟,夜里基本没醒。9月4日那晚休息最长,有 1 小时 20 分钟。 | This month, Pocky rested for 1h 20m a night on average and hardly woke at night. Sep 4 night had the longest rest, 1h 20m. | Este mes, Pocky descansó 1 h 20 min por noche en promedio y casi no se despertó por la noche. La noche del 4 de sept. tuvo el descanso más largo: 1 h 20 min. |
心率 · 日
接口简介
心率日视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"endDate": "2026-09-08",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-08",
"isCompleted": true
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "hr",
"insightContext": {
"mode": "selected_window",
"comparison": {
"usualUpper": 80.0,
"usualLower": 64.0,
"pageEvaluationBasis": "personal"
},
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-09-08T08:00+08:00",
"factVersion": "ee84aff0255fb9f96caf24d4bfd238fb17ce5b4a7f46bec69ccc739fa3f962fe"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"unusualDays": 0,
"judgedDays": 1,
"ruleVersion": "vital-judgment-c1-v1",
"rating": "normal",
"baselineSource": "personal",
"direction": 0
},
"metrics": {
"allDayRestHrAverage": {
"sampleCount": 8,
"value": 78.0
},
"night": {
"endAt": "2026-09-08T08:00+08:00",
"startAt": "2026-09-07T22:00+08:00",
"isCompleted": true
},
"nightRestHrAverage": {
"sampleCount": 3,
"value": 78.0
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "day"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 否 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 否 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:日视图的开始和结束日期必须是同一天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "hr",
"viewWindow": "day",
"period": {
"startDate": "2026-09-08",
"endDate": "2026-09-08",
"timezone": "Asia/Shanghai",
"isCompleted": true
},
"status": "normal",
"severity": "none",
"summary": "9月8日,Pocky 的静息心率是 78 次/分,在它平时的范围内(64–80 次/分)。",
"generation": {
"ruleId": "HR_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
hr-day-normal 历史某天 · 在平时范围内 | normal | 9月8日,Pocky 的静息心率是 78 次/分,在它平时的范围内(64–80 次/分)。 | On Sep 8, Pocky's resting heart rate was 78 bpm, within its usual range (64–80 bpm). | El 8 de sept., la frecuencia cardíaca en reposo de Pocky fue de 78 lpm, dentro de su rango habitual (64–80 lpm). |
hr-day-high-streak 历史某天 · 偏高且连续 3 天 | attention | 9月8日,Pocky 的静息心率是 92 次/分,高于它平时的范围(64–80 次/分),已经连续 3 天。留些安静休息的时间,再看看接下来的精神、食欲和活动状态。 | On Sep 8, Pocky's resting heart rate was 92 bpm, above its usual range (64–80 bpm), 3 days in a row. Allow quiet rest and watch energy, appetite, and activity over the next few days. | El 8 de sept., la frecuencia cardíaca en reposo de Pocky fue de 92 lpm, por encima de su rango habitual (64–80 lpm), 3 días seguidos. Dale tiempo para descansar tranquilo y observa su energía, su apetito y su actividad en los próximos días. |
hr-day-low-not-worse 历史某天 · 偏低但不算变差 | observation | 9月8日,Pocky 的静息心率是 58 次/分,低于它平时的范围(64–80 次/分)。精神和食欲正常的话,不用特别处理。 | On Sep 8, Pocky's resting heart rate was 58 bpm, below its usual range (64–80 bpm). If its energy and appetite are normal, there's nothing special to do. | El 8 de sept., la frecuencia cardíaca en reposo de Pocky fue de 58 lpm, por debajo de su rango habitual (64–80 lpm). Si su energía y su apetito están normales, no hace falta hacer nada especial. |
hr-day-before-personal 个体范围建立前 · 页头按品种评估 | observation | 9月8日,Pocky 的静息心率是 78 次/分。页上的评估是按同品种范围;再积累约 8 天记录,就能按 Pocky 自己的平时范围来看。 | On Sep 8, Pocky's resting heart rate was 78 bpm. The rating above uses the range for its breed. About 8 more days of records and we can compare with Pocky's own usual range. | El 8 de sept., la frecuencia cardíaca en reposo de Pocky fue de 78 lpm. La evaluación de arriba usa el rango de su raza. Con unos 8 días más de registros podremos compararlo con el rango habitual de Pocky. |
hr-today-few-readings 今天 · 读数少 | observation | 今天到 08:00,Pocky 的静息心率只读到 3 次,代表值 80 次/分,还看不出全天的情况。项圈松紧合适、一直戴着,读数会更完整。 | As of 08:00 today, only 3 readings of Pocky's resting heart rate came in (80 bpm), not enough to describe the whole day. A snug fit and wearing the collar all the time will give fuller readings. | Hoy hasta las 08:00 solo llegaron 3 lecturas de la frecuencia cardíaca en reposo de Pocky (80 lpm); no alcanza para describir el día completo. Con el collar bien ajustado y puesto todo el tiempo, las lecturas serán más completas. |
hr-today-ranged 今天 · 说平时范围、不下结论 | observation | 今天到 14:59,Pocky 的静息心率是 78 次/分,它平时在 64–80 次/分。 | As of 14:59 today, Pocky's resting heart rate is 78 bpm; it's usually 64–80 bpm. | Hoy hasta las 14:59, la frecuencia cardíaca en reposo de Pocky es de 78 lpm; normalmente está en 64–80 lpm. |
心率 · 周
接口简介
心率周视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"elapsedNights": 4,
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-07",
"validNights": 0,
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "hr",
"insightContext": {
"mode": "selected_window",
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-09-10T08:00+08:00",
"factVersion": "aa925ec23bdebca62f1f83b70bb713d5b4e067cccb94615589ebe60374a85f40",
"comparison": {
"changePercent": -3.4
}
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"unusualDays": 0,
"judgedDays": 5,
"ruleVersion": "vital-judgment-c1-v1",
"rating": null,
"baselineSource": "personal",
"direction": null
},
"metrics": {
"dailyAllDayRestHr": [
{
"date": "2026-09-07",
"sampleCount": 3,
"allDayRestHrAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"allDayRestHrAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"allDayRestHrAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 3,
"allDayRestHrAverage": 80.0
},
{
"date": "2026-09-11",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"allDayRestHrAverage": null
}
],
"allDayRestHrAverage": {
"sampleCount": 9,
"value": 80.0
},
"dailyNightRestHr": [
{
"date": "2026-09-07",
"sampleCount": 3,
"nightRestHrAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"nightRestHrAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"nightRestHrAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 3,
"nightRestHrAverage": 80.0
},
{
"date": "2026-09-11",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"nightRestHrAverage": null
}
],
"aggregationMethod": "daily_median_mean_v1",
"nightRestHrAverage": {
"sampleCount": 0,
"value": null
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "week"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 是 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 是 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:周视图必须是从周一开始的连续 7 天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "hr",
"viewWindow": "week",
"period": {
"startDate": "2026-09-07",
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"isCompleted": false,
"elapsedNights": 4,
"validNights": 0
},
"status": "normal",
"severity": "none",
"summary": "本周 Pocky 的静息心率平均 80 次/分,比上周低 3%,5 天都在它平时的范围内。",
"generation": {
"ruleId": "HR_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
hr-week-normal 已结束的一周 · 都在平时范围内 | normal | 本周 Pocky 的静息心率平均 80 次/分,比上周低 3%,5 天都在它平时的范围内。 | This week, Pocky's resting heart rate stayed within its usual range on all 5 days, averaging 80 bpm, 3% lower than last week. | Esta semana, la frecuencia cardíaca en reposo de Pocky se mantuvo dentro de su rango habitual los 5 días, con un promedio de 80 lpm, un 3% más baja que la semana pasada. |
hr-week-unusual 已结束的一周 · 有 2 天偏高 | attention | 本周有 2 天 Pocky 的静息心率高于它平时的范围,全期平均 80 次/分。留些安静休息的时间,再看看接下来的精神、食欲和活动状态。 | This week, Pocky's resting heart rate was above its usual range on 2 days; it averaged 80 bpm overall. Allow quiet rest and watch energy, appetite, and activity over the next few days. | Esta semana, la frecuencia cardíaca en reposo de Pocky estuvo por encima de su rango habitual 2 días; promedió 80 lpm en total. Dale tiempo para descansar tranquilo y observa su energía, su apetito y su actividad en los próximos días. |
hr-week-few-days 评级天数不够整周结论 | observation | 本周 Pocky 的静息心率平均 80 次/分。 | This week, Pocky's resting heart rate averaged 80 bpm. | Esta semana, la frecuencia cardíaca en reposo de Pocky promedió 80 lpm. |
心率 · 月
接口简介
心率月视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"elapsedNights": 9,
"endDate": "2026-09-30",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-01",
"validNights": 0,
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "hr",
"insightContext": {
"mode": "selected_window",
"asOf": "2026-09-10T07:59+08:00",
"observedThrough": "2026-09-10T07:58:59+08:00",
"factVersion": "1868af49b2f8e5721cddde70e5073e88b5be95c3bbfae539e36f8327a09aa672",
"comparison": {
"changePercent": 1.2
}
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"unusualDays": 0,
"judgedDays": 12,
"ruleVersion": "vital-judgment-c1-v1",
"rating": null,
"baselineSource": "personal",
"direction": null
},
"metrics": {
"dailyAllDayRestHr": [
{
"date": "2026-09-01",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-02",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-03",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-04",
"sampleCount": 3,
"allDayRestHrAverage": 80.0
},
{
"date": "2026-09-05",
"sampleCount": 3,
"allDayRestHrAverage": 80.0
},
{
"date": "2026-09-06",
"sampleCount": 3,
"allDayRestHrAverage": 80.0
},
{
"date": "2026-09-07",
"sampleCount": 3,
"allDayRestHrAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"allDayRestHrAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"allDayRestHrAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 3,
"allDayRestHrAverage": 95.0
},
{
"date": "2026-09-11",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-14",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-15",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-16",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-17",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-18",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-19",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-20",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-21",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-22",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-23",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-24",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-25",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-26",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-27",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-28",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-29",
"sampleCount": 0,
"allDayRestHrAverage": null
},
{
"date": "2026-09-30",
"sampleCount": 0,
"allDayRestHrAverage": null
}
],
"allDayRestHrAverage": {
"sampleCount": 18,
"value": 80.0
},
"dailyNightRestHr": [
{
"date": "2026-09-01",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-02",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-03",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-04",
"sampleCount": 3,
"nightRestHrAverage": 80.0
},
{
"date": "2026-09-05",
"sampleCount": 3,
"nightRestHrAverage": 80.0
},
{
"date": "2026-09-06",
"sampleCount": 3,
"nightRestHrAverage": 80.0
},
{
"date": "2026-09-07",
"sampleCount": 3,
"nightRestHrAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"nightRestHrAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"nightRestHrAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-11",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-14",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-15",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-16",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-17",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-18",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-19",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-20",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-21",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-22",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-23",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-24",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-25",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-26",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-27",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-28",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-29",
"sampleCount": 0,
"nightRestHrAverage": null
},
{
"date": "2026-09-30",
"sampleCount": 0,
"nightRestHrAverage": null
}
],
"aggregationMethod": "daily_median_mean_v1",
"nightRestHrAverage": {
"sampleCount": 0,
"value": null
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "month"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 是 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 是 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:月视图必须覆盖一个完整的自然月。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "hr",
"viewWindow": "month",
"period": {
"startDate": "2026-09-01",
"endDate": "2026-09-30",
"timezone": "Asia/Shanghai",
"isCompleted": false,
"elapsedNights": 9,
"validNights": 0
},
"status": "normal",
"severity": "none",
"summary": "本月 Pocky 的静息心率平均 80 次/分,比上个月高 1%,12 天都在它平时的范围内。",
"generation": {
"ruleId": "HR_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
hr-month-normal 本月 · 都在平时范围内 | normal | 本月 Pocky 的静息心率平均 80 次/分,比上个月高 1%,12 天都在它平时的范围内。 | This month, Pocky's resting heart rate stayed within its usual range on all 12 days, averaging 80 bpm, 1% higher than last month. | Este mes, la frecuencia cardíaca en reposo de Pocky se mantuvo dentro de su rango habitual los 12 días, con un promedio de 80 lpm, un 1% más alta que el mes pasado. |
HRV · 日
接口简介
HRV日视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"endDate": "2026-09-10",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-10",
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "hrv",
"insightContext": {
"mode": "today_so_far",
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-09-10T08:00+08:00",
"factVersion": "eb3f85e5f8f1893de5d4a4009718ef6bdc3366cde9813472fd706c7e022f50ea"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"unusualDays": null,
"judgedDays": 0,
"ruleVersion": "vital-judgment-c1-v1",
"rating": null,
"baselineSource": null,
"direction": null
},
"metrics": {
"allDayRestRmssdAverage": {
"sampleCount": 3,
"value": 80.0
},
"night": {
"endAt": "2026-09-10T08:00+08:00",
"startAt": "2026-09-09T22:00+08:00",
"isCompleted": true
},
"nightRestRmssdAverage": {
"sampleCount": 3,
"value": 80.0
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "day"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 否 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 否 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:日视图的开始和结束日期必须是同一天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "hrv",
"viewWindow": "day",
"period": {
"startDate": "2026-09-10",
"endDate": "2026-09-10",
"timezone": "Asia/Shanghai",
"isCompleted": false
},
"status": "observation",
"severity": "none",
"summary": "今天到 08:00,Pocky 的静息 HRV 只读到 3 次,代表值 80 毫秒,还看不出全天的情况。项圈松紧合适、一直戴着,读数会更完整。",
"generation": {
"ruleId": "HRV_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
hrv-today-few-readings 今天 · HRV 读数少 | observation | 今天到 08:00,Pocky 的静息 HRV 只读到 3 次,代表值 80 毫秒,还看不出全天的情况。项圈松紧合适、一直戴着,读数会更完整。 | As of 08:00 today, only 3 readings of Pocky's resting HRV came in (80 ms), not enough to describe the whole day. A snug fit and wearing the collar all the time will give fuller readings. | Hoy hasta las 08:00 solo llegaron 3 lecturas de la VFC en reposo de Pocky (80 ms); no alcanza para describir el día completo. Con el collar bien ajustado y puesto todo el tiempo, las lecturas serán más completas. |
HRV · 周
接口简介
HRV周视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"elapsedNights": 4,
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-07",
"validNights": 0,
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "hrv",
"insightContext": {
"mode": "selected_window",
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-09-10T08:00+08:00",
"factVersion": "5f4ab19262c54ddbf1db4aba60a12595f7b34e35d0da0c71595492ea311c6906"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"unusualDays": null,
"judgedDays": 0,
"ruleVersion": "vital-judgment-c1-v1",
"rating": null,
"baselineSource": null,
"direction": null
},
"metrics": {
"dailyNightRestRmssd": [
{
"date": "2026-09-07",
"sampleCount": 3,
"nightRestRmssdAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"nightRestRmssdAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"nightRestRmssdAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 3,
"nightRestRmssdAverage": 80.0
},
{
"date": "2026-09-11",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"nightRestRmssdAverage": null
}
],
"allDayRestRmssdAverage": {
"sampleCount": 9,
"value": 80.0
},
"dailyAllDayRestRmssd": [
{
"date": "2026-09-07",
"sampleCount": 3,
"allDayRestRmssdAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"allDayRestRmssdAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"allDayRestRmssdAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 3,
"allDayRestRmssdAverage": 80.0
},
{
"date": "2026-09-11",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"allDayRestRmssdAverage": null
}
],
"nightRestRmssdAverage": {
"sampleCount": 0,
"value": null
},
"aggregationMethod": "daily_median_mean_v1"
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "week"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 是 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 是 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:周视图必须是从周一开始的连续 7 天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "hrv",
"viewWindow": "week",
"period": {
"startDate": "2026-09-07",
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"isCompleted": false,
"elapsedNights": 4,
"validNights": 0
},
"status": "observation",
"severity": "none",
"summary": "本周 Pocky 的静息 HRV 平均 80 毫秒。",
"generation": {
"ruleId": "HRV_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
hrv-week-unrated 本周 · HRV 还没有评级 | observation | 本周 Pocky 的静息 HRV 平均 80 毫秒。 | This week, Pocky's resting HRV averaged 80 ms. | Esta semana, la VFC en reposo de Pocky promedió 80 ms. |
hrv-week-low 已结束的一周 · HRV 有 3 天偏低 | attention | 本周有 3 天 Pocky 的静息 HRV 低于它平时的范围,全期平均 80 毫秒。留些安静休息的时间,再看看接下来的精神、食欲和活动状态。 | This week, Pocky's resting HRV was below its usual range on 3 days; it averaged 80 ms overall. Allow quiet rest and watch energy, appetite, and activity over the next few days. | Esta semana, la VFC en reposo de Pocky estuvo por debajo de su rango habitual 3 días; promedió 80 ms en total. Dale tiempo para descansar tranquilo y observa su energía, su apetito y su actividad en los próximos días. |
HRV · 月
接口简介
HRV月视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"elapsedNights": 9,
"endDate": "2026-09-30",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-01",
"validNights": 0,
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "hrv",
"insightContext": {
"mode": "selected_window",
"asOf": "2026-09-10T07:59+08:00",
"observedThrough": "2026-09-10T07:58:59+08:00",
"factVersion": "192efc53708a2c7a23eca06fb4642a7fed108ccc5f223348378b7c02bbb37b3f"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"unusualDays": null,
"judgedDays": 0,
"ruleVersion": "vital-judgment-c1-v1",
"rating": null,
"baselineSource": null,
"direction": null
},
"metrics": {
"dailyNightRestRmssd": [
{
"date": "2026-09-01",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-02",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-03",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-04",
"sampleCount": 3,
"nightRestRmssdAverage": 80.0
},
{
"date": "2026-09-05",
"sampleCount": 3,
"nightRestRmssdAverage": 80.0
},
{
"date": "2026-09-06",
"sampleCount": 3,
"nightRestRmssdAverage": 80.0
},
{
"date": "2026-09-07",
"sampleCount": 3,
"nightRestRmssdAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"nightRestRmssdAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"nightRestRmssdAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-11",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-14",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-15",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-16",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-17",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-18",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-19",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-20",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-21",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-22",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-23",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-24",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-25",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-26",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-27",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-28",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-29",
"sampleCount": 0,
"nightRestRmssdAverage": null
},
{
"date": "2026-09-30",
"sampleCount": 0,
"nightRestRmssdAverage": null
}
],
"allDayRestRmssdAverage": {
"sampleCount": 18,
"value": 80.0
},
"dailyAllDayRestRmssd": [
{
"date": "2026-09-01",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-02",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-03",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-04",
"sampleCount": 3,
"allDayRestRmssdAverage": 80.0
},
{
"date": "2026-09-05",
"sampleCount": 3,
"allDayRestRmssdAverage": 80.0
},
{
"date": "2026-09-06",
"sampleCount": 3,
"allDayRestRmssdAverage": 80.0
},
{
"date": "2026-09-07",
"sampleCount": 3,
"allDayRestRmssdAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"allDayRestRmssdAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"allDayRestRmssdAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 3,
"allDayRestRmssdAverage": 95.0
},
{
"date": "2026-09-11",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-14",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-15",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-16",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-17",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-18",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-19",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-20",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-21",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-22",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-23",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-24",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-25",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-26",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-27",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-28",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-29",
"sampleCount": 0,
"allDayRestRmssdAverage": null
},
{
"date": "2026-09-30",
"sampleCount": 0,
"allDayRestRmssdAverage": null
}
],
"nightRestRmssdAverage": {
"sampleCount": 0,
"value": null
},
"aggregationMethod": "daily_median_mean_v1"
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "month"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 是 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 是 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:月视图必须覆盖一个完整的自然月。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "hrv",
"viewWindow": "month",
"period": {
"startDate": "2026-09-01",
"endDate": "2026-09-30",
"timezone": "Asia/Shanghai",
"isCompleted": false,
"elapsedNights": 9,
"validNights": 0
},
"status": "observation",
"severity": "none",
"summary": "本月 Pocky 的静息 HRV 平均 80 毫秒。",
"generation": {
"ruleId": "HRV_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
呼吸率 · 日
接口简介
呼吸率日视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"endDate": "2026-09-10",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-10",
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "rr",
"insightContext": {
"mode": "today_so_far",
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-09-10T08:00+08:00",
"factVersion": "a57b6eb1c160e83e70f0fb3a1fad200baeb43aba52fb520a106bdc2cf50a6c48"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"unusualDays": null,
"judgedDays": 0,
"ruleVersion": "vital-judgment-c1-v1",
"rating": null,
"baselineSource": null,
"direction": null
},
"metrics": {
"nightRestRrAverage": {
"sampleCount": 3,
"value": 80.0
},
"night": {
"endAt": "2026-09-10T08:00+08:00",
"startAt": "2026-09-09T22:00+08:00",
"isCompleted": true
},
"allDayRestRrAverage": {
"sampleCount": 3,
"value": 80.0
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "day"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 否 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 否 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:日视图的开始和结束日期必须是同一天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "rr",
"viewWindow": "day",
"period": {
"startDate": "2026-09-10",
"endDate": "2026-09-10",
"timezone": "Asia/Shanghai",
"isCompleted": false
},
"status": "observation",
"severity": "none",
"summary": "今天到 08:00,Pocky 的静息呼吸率只读到 3 次,代表值 80 次/分,还看不出全天的情况。项圈松紧合适、一直戴着,读数会更完整。",
"generation": {
"ruleId": "RR_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
rr-today-few-readings 今天 · 呼吸率读数少 | observation | 今天到 08:00,Pocky 的静息呼吸率只读到 3 次,代表值 80 次/分,还看不出全天的情况。项圈松紧合适、一直戴着,读数会更完整。 | As of 08:00 today, only 3 readings of Pocky's resting breathing rate came in (80 breaths/min), not enough to describe the whole day. A snug fit and wearing the collar all the time will give fuller readings. | Hoy hasta las 08:00 solo llegaron 3 lecturas de la frecuencia respiratoria en reposo de Pocky (80 rpm); no alcanza para describir el día completo. Con el collar bien ajustado y puesto todo el tiempo, las lecturas serán más completas. |
呼吸率 · 周
接口简介
呼吸率周视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"elapsedNights": 4,
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-07",
"validNights": 0,
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "rr",
"insightContext": {
"mode": "selected_window",
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-09-10T08:00+08:00",
"factVersion": "95a2dabbe0397480ea7ed400d8254913a78443a59c1b3a5c4d05af7b25156b4a"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"unusualDays": 0,
"judgedDays": 4,
"ruleVersion": "vital-judgment-c1-v1",
"rating": null,
"baselineSource": "personal",
"direction": null
},
"metrics": {
"nightRestRrAverage": {
"sampleCount": 0,
"value": null
},
"dailyNightRestRr": [
{
"date": "2026-09-07",
"sampleCount": 3,
"nightRestRrAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"nightRestRrAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"nightRestRrAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 3,
"nightRestRrAverage": 80.0
},
{
"date": "2026-09-11",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"nightRestRrAverage": null
}
],
"dailyAllDayRestRr": [
{
"date": "2026-09-07",
"sampleCount": 3,
"allDayRestRrAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"allDayRestRrAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"allDayRestRrAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 3,
"allDayRestRrAverage": 80.0
},
{
"date": "2026-09-11",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"allDayRestRrAverage": null
}
],
"aggregationMethod": "daily_median_mean_v1",
"allDayRestRrAverage": {
"sampleCount": 9,
"value": 80.0
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "week"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 是 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 是 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:周视图必须是从周一开始的连续 7 天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "rr",
"viewWindow": "week",
"period": {
"startDate": "2026-09-07",
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"isCompleted": false,
"elapsedNights": 4,
"validNights": 0
},
"status": "normal",
"severity": "none",
"summary": "本周 Pocky 的静息呼吸率平均 80 次/分,4 天都在它平时的范围内。",
"generation": {
"ruleId": "RR_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
rr-week-normal 已结束的一周 · 呼吸率都在平时范围内 | normal | 本周 Pocky 的静息呼吸率平均 80 次/分,4 天都在它平时的范围内。 | This week, Pocky's resting breathing rate stayed within its usual range on all 4 days, averaging 80 breaths/min. | Esta semana, la frecuencia respiratoria en reposo de Pocky se mantuvo dentro de su rango habitual los 4 días, con un promedio de 80 rpm. |
呼吸率 · 月
接口简介
呼吸率月视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"elapsedNights": 9,
"endDate": "2026-09-30",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-01",
"validNights": 0,
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "rr",
"insightContext": {
"mode": "selected_window",
"asOf": "2026-09-10T07:59+08:00",
"observedThrough": "2026-09-10T07:58:59+08:00",
"factVersion": "f4921adf8bda2d24b64bafedd1899f7bc40f877238bef284b0385ba72e350c28"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"unusualDays": 2,
"judgedDays": 11,
"ruleVersion": "vital-judgment-c1-v1",
"rating": null,
"baselineSource": "personal",
"direction": null
},
"metrics": {
"nightRestRrAverage": {
"sampleCount": 0,
"value": null
},
"dailyNightRestRr": [
{
"date": "2026-09-01",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-02",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-03",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-04",
"sampleCount": 3,
"nightRestRrAverage": 80.0
},
{
"date": "2026-09-05",
"sampleCount": 3,
"nightRestRrAverage": 80.0
},
{
"date": "2026-09-06",
"sampleCount": 3,
"nightRestRrAverage": 80.0
},
{
"date": "2026-09-07",
"sampleCount": 3,
"nightRestRrAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"nightRestRrAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"nightRestRrAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-11",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-14",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-15",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-16",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-17",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-18",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-19",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-20",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-21",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-22",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-23",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-24",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-25",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-26",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-27",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-28",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-29",
"sampleCount": 0,
"nightRestRrAverage": null
},
{
"date": "2026-09-30",
"sampleCount": 0,
"nightRestRrAverage": null
}
],
"dailyAllDayRestRr": [
{
"date": "2026-09-01",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-02",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-03",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-04",
"sampleCount": 3,
"allDayRestRrAverage": 80.0
},
{
"date": "2026-09-05",
"sampleCount": 3,
"allDayRestRrAverage": 80.0
},
{
"date": "2026-09-06",
"sampleCount": 3,
"allDayRestRrAverage": 80.0
},
{
"date": "2026-09-07",
"sampleCount": 3,
"allDayRestRrAverage": 80.0
},
{
"date": "2026-09-08",
"sampleCount": 3,
"allDayRestRrAverage": 80.0
},
{
"date": "2026-09-09",
"sampleCount": 3,
"allDayRestRrAverage": 80.0
},
{
"date": "2026-09-10",
"sampleCount": 3,
"allDayRestRrAverage": 95.0
},
{
"date": "2026-09-11",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-12",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-13",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-14",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-15",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-16",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-17",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-18",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-19",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-20",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-21",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-22",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-23",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-24",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-25",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-26",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-27",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-28",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-29",
"sampleCount": 0,
"allDayRestRrAverage": null
},
{
"date": "2026-09-30",
"sampleCount": 0,
"allDayRestRrAverage": null
}
],
"aggregationMethod": "daily_median_mean_v1",
"allDayRestRrAverage": {
"sampleCount": 18,
"value": 80.0
}
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "month"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 是 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 是 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 是 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:月视图必须覆盖一个完整的自然月。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:休息与体征缺少 suppliedJudgment。修正:始终带上服务端评级对象;还没有评级时 rating 为 null、天数为 0。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "rr",
"viewWindow": "month",
"period": {
"startDate": "2026-09-01",
"endDate": "2026-09-30",
"timezone": "Asia/Shanghai",
"isCompleted": false,
"elapsedNights": 9,
"validNights": 0
},
"status": "attention",
"severity": "low",
"summary": "本月有 2 天 Pocky 的静息呼吸率高于它平时的范围,全期平均 80 次/分。留些安静休息的时间,再看看接下来的精神、食欲和活动状态。",
"generation": {
"ruleId": "RR_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
rr-month-unusual 本月 · 呼吸率有天数偏高 | attention | 本月有 2 天 Pocky 的静息呼吸率高于它平时的范围,全期平均 80 次/分。留些安静休息的时间,再看看接下来的精神、食欲和活动状态。 | This month, Pocky's resting breathing rate was above its usual range on 2 days; it averaged 80 breaths/min overall. Allow quiet rest and watch energy, appetite, and activity over the next few days. | Este mes, la frecuencia respiratoria en reposo de Pocky estuvo por encima de su rango habitual 2 días; promedió 80 rpm en total. Dale tiempo para descansar tranquilo y observa su energía, su apetito y su actividad en los próximos días. |
吠叫 · 日
接口简介
吠叫日视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"endDate": "2026-09-10",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-10",
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "bark",
"insightContext": {
"mode": "today_so_far",
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-09-10T08:00+08:00",
"factVersion": "3cc546ba128a40f5b36afb6ed720d574af8e45319e991096f9dab9d41abd3353"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": null,
"metrics": {
"measurementMode": "estimated",
"longestBarkEventDurationSeconds": 6.0,
"barkDurationSeconds": 6.0,
"barkEventCount": 1
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "day"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 否 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 否 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 否 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:日视图的开始和结束日期必须是同一天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "bark",
"viewWindow": "day",
"period": {
"startDate": "2026-09-10",
"endDate": "2026-09-10",
"timezone": "Asia/Shanghai",
"isCompleted": false
},
"status": "observation",
"severity": "none",
"summary": "今天到 08:00,Pocky 叫了约 6 秒(1 次)。",
"generation": {
"ruleId": "BARK_IN_PROGRESS_SUMMARY",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
bark-today 今天 · 叫声累计 | observation | 今天到 08:00,Pocky 叫了约 6 秒(1 次)。 | As of 08:00 today, Pocky has barked for about 6 sec (1 episode). | Hoy hasta las 08:00, Pocky ha ladrado durante alrededor de 6 s (1 episodio). |
bark-today-ranged 今天 · 说平时上限、不下结论 | observation | 今天到 08:00,Pocky 叫了约 6 秒(1 次),它平时一天不超过约 3 分钟。 | As of 08:00 today, Pocky has barked for about 6 sec (1 episode); it usually barks up to about 3 min a day. | Hoy hasta las 08:00, Pocky ha ladrado durante alrededor de 6 s (1 episodio); normalmente ladra hasta alrededor de 3 min al día. |
bark-day-frequent 历史某天 · 叫得明显多 | attention | 9月8日,Pocky 叫了约 7 分钟(14 次),明显比它平时多(平时一天不超过约 3 分钟)。回看叫声多的时段,看看是否有访客、声音或作息变化。 | On Sep 8, Pocky barked for about 7 min (14 episodes), clearly more than usual (usually up to about 3 min a day). Look at when the barking happened and whether visitors, sounds, or routines changed. | El 8 de sept., Pocky ladró durante alrededor de 7 min (14 episodios), claramente más de lo habitual (normalmente hasta alrededor de 3 min al día). Revisa en qué momentos ladró más y si hubo visitas, ruidos o cambios de rutina. |
bark-day-calm 历史某天 · 平静 | normal | 9月8日,Pocky 叫了约 1 分钟(3 次),在它平时的范围内(一天不超过约 3 分钟)。 | On Sep 8, Pocky barked for about 1 min (3 episodes), within its usual range (up to about 3 min a day). | El 8 de sept., Pocky ladró durante alrededor de 1 min (3 episodios), dentro de su rango habitual (hasta alrededor de 3 min al día). |
吠叫 · 周
接口简介
吠叫周视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"startDate": "2026-09-07",
"isCompleted": false
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "bark",
"insightContext": {
"mode": "selected_window",
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-09-10T08:00+08:00",
"factVersion": "7594f774699ef8ac214490eb9ce1744f3ccb41c3edabc1bf910f40a89d245b3c",
"comparison": {
"changePercent": 12.0
}
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": {
"ruleVersion": "bark-judgment-v1",
"rating": null,
"direction": null,
"baselineSource": "personal",
"judgedDays": 3,
"unusualDays": 0
},
"metrics": {
"averageDailyBarkEventCount": 1.0,
"measurementMode": "estimated",
"averageDailyBarkDurationSeconds": 6.0,
"dailyBarkDurations": [
{
"date": "2026-09-07",
"barkDurationSeconds": 6.0
},
{
"date": "2026-09-08",
"barkDurationSeconds": 6.0
},
{
"date": "2026-09-09",
"barkDurationSeconds": 6.0
},
{
"date": "2026-09-10",
"barkDurationSeconds": 6.0
},
{
"date": "2026-09-11",
"barkDurationSeconds": null
},
{
"date": "2026-09-12",
"barkDurationSeconds": null
},
{
"date": "2026-09-13",
"barkDurationSeconds": null
}
],
"barkEventCount": 4
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "week"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 否 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 否 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 否 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:周视图必须是从周一开始的连续 7 天。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "bark",
"viewWindow": "week",
"period": {
"startDate": "2026-09-07",
"endDate": "2026-09-13",
"timezone": "Asia/Shanghai",
"isCompleted": false
},
"status": "normal",
"severity": "none",
"summary": "本周 Pocky 日均叫约 6 秒(日均 1 次),比上周多 12%,3 天都在它平时的范围内。",
"generation": {
"ruleId": "BARK_SUPPLIED_JUDGMENT",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
bark-week-normal 本周 · 都在平时范围内,比上周多 | normal | 本周 Pocky 日均叫约 6 秒(日均 1 次),比上周多 12%,3 天都在它平时的范围内。 | This week, Pocky's barking stayed within its usual range on all 3 days, averaging about 6 sec a day (1 episode a day), 12% more than last week. | Esta semana, los ladridos de Pocky se mantuvieron dentro de su rango habitual los 3 días, con alrededor de 6 s al día en promedio (1 episodio al día), un 12% más que la semana pasada. |
bark-week-unusual 本周 · 有 2 天叫得明显多 | attention | 本周有 2 天 Pocky 叫得明显比平时多,日均约 6 秒(日均 1 次)。回看叫声多的时段,看看是否有访客、声音或作息变化。 | This week, Pocky barked clearly more than usual on 2 days, averaging about 6 sec a day (1 episode a day). Look at when the barking happened and whether visitors, sounds, or routines changed. | Esta semana, Pocky ladró claramente más de lo habitual 2 días; promedió alrededor de 6 s al día (1 episodio al día). Revisa en qué momentos ladró más y si hubo visitas, ruidos o cambios de rutina. |
bark-week-facts 本周 · 只陈述时长 | observation | 本周 Pocky 日均叫约 6 秒(日均 1 次)。 | This week, Pocky barked for about 6 sec a day on average (1 episode a day). | Esta semana, Pocky ladró durante alrededor de 6 s al día en promedio (1 episodio al día). |
吠叫 · 月
接口简介
吠叫月视图的详情洞察:FeedAuto 组装页面同源事实与服务端评级,Gateway 按文案目录确定性生成一段正文。
请求示例 JSON
{
"period": {
"endDate": "2026-08-31",
"timezone": "Asia/Shanghai",
"startDate": "2026-08-01",
"isCompleted": true
},
"petId": "7",
"schemaVersion": "health-detail-v3",
"metric": "bark",
"insightContext": {
"mode": "selected_window",
"asOf": "2026-09-10T15:00+08:00",
"observedThrough": "2026-08-31T08:00+08:00",
"factVersion": "0da26f2aa223a231bf7ff3fd0649136d667df08ebdbc94ae598f7d07422064c4"
},
"petProfile": {
"species": "dog",
"name": "Pocky"
},
"suppliedJudgment": null,
"metrics": {
"averageDailyBarkEventCount": 1.0,
"measurementMode": "estimated",
"averageDailyBarkDurationSeconds": 45.0,
"dailyBarkDurations": [
{
"date": "2026-08-01",
"barkDurationSeconds": 30.0
},
{
"date": "2026-08-02",
"barkDurationSeconds": null
},
{
"date": "2026-08-03",
"barkDurationSeconds": null
},
{
"date": "2026-08-04",
"barkDurationSeconds": 33.0
},
{
"date": "2026-08-05",
"barkDurationSeconds": null
},
{
"date": "2026-08-06",
"barkDurationSeconds": null
},
{
"date": "2026-08-07",
"barkDurationSeconds": 36.0
},
{
"date": "2026-08-08",
"barkDurationSeconds": null
},
{
"date": "2026-08-09",
"barkDurationSeconds": null
},
{
"date": "2026-08-10",
"barkDurationSeconds": 39.0
},
{
"date": "2026-08-11",
"barkDurationSeconds": null
},
{
"date": "2026-08-12",
"barkDurationSeconds": null
},
{
"date": "2026-08-13",
"barkDurationSeconds": 42.0
},
{
"date": "2026-08-14",
"barkDurationSeconds": null
},
{
"date": "2026-08-15",
"barkDurationSeconds": null
},
{
"date": "2026-08-16",
"barkDurationSeconds": 45.0
},
{
"date": "2026-08-17",
"barkDurationSeconds": null
},
{
"date": "2026-08-18",
"barkDurationSeconds": null
},
{
"date": "2026-08-19",
"barkDurationSeconds": 48.0
},
{
"date": "2026-08-20",
"barkDurationSeconds": null
},
{
"date": "2026-08-21",
"barkDurationSeconds": null
},
{
"date": "2026-08-22",
"barkDurationSeconds": 51.0
},
{
"date": "2026-08-23",
"barkDurationSeconds": null
},
{
"date": "2026-08-24",
"barkDurationSeconds": null
},
{
"date": "2026-08-25",
"barkDurationSeconds": 54.0
},
{
"date": "2026-08-26",
"barkDurationSeconds": null
},
{
"date": "2026-08-27",
"barkDurationSeconds": null
},
{
"date": "2026-08-28",
"barkDurationSeconds": 57.0
},
{
"date": "2026-08-29",
"barkDurationSeconds": null
},
{
"date": "2026-08-30",
"barkDurationSeconds": null
},
{
"date": "2026-08-31",
"barkDurationSeconds": 60.0
}
],
"barkEventCount": 11
},
"locale": "zh-CN",
"userId": "1",
"viewWindow": "month"
}
请求字段表
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
schemaVersion | string | 是 | 固定 health-detail-v3。 |
userId | string | 是 | 调用方用户 ID(留档前哈希)。 |
petId | string | 是 | 宠物 ID。 |
metric | enum | 是 | 指标。 |
viewWindow | enum | 是 | 时间窗口:自然日 / 自然周(周一起)/ 自然月。 |
locale | enum | 是 | 正文语言。 |
petProfile | object | 是 | 宠物信息:正文用名字。 |
petProfile.name | string | 是 | 宠物名字。 |
petProfile.species | enum | 是 | 物种。 |
period | object | 是 | 页面正在看的窗口(宠物所在时区的本地日期)。 |
period.startDate | string(date) | 是 | 开始日期。 |
period.endDate | string(date) | 是 | 结束日期。 |
period.timezone | string | 是 | IANA 时区,例如 Asia/Shanghai。 |
period.isCompleted | boolean | 是 | 窗口是否已结束(含今天的窗口为 false)。 |
period.elapsedNights | integer|null | 否 | 周 / 月:已经过去的夜数(休息与体征必填)。 |
period.validNights | integer|null | 否 | 周 / 月:有合格记录的夜数(休息与体征必填)。 |
insightContext | object | 是 | C4 上下文:查看时刻、模式、页面比较。没有它的请求一律拒收。 |
insightContext.mode | enum | 是 | today_so_far 今天到此刻 / last_night 08:00 后的昨夜(只用于休息)/ selected_window 选中的已有窗口。 |
insightContext.asOf | string(date-time) | 是 | 查看时刻,带时区偏移的 ISO 8601。 |
insightContext.observedThrough | string(date-time) | 否 | 最近一次上报的时刻;today_so_far 必填。 |
insightContext.factVersion | string | 是 | 事实指纹(FeedAuto 生成),用于缓存与留档对账。 |
insightContext.baselineProgress | object | 否 | 个体范围建立进度;只在日视图、个体范围建立前说一句。 |
insightContext.comparison | object | 否 | 页面同源的比较,只读:Gateway 只用来组织正文,不据此判断。 |
insightContext.comparison.usualLower | number|null | 否 | 个体平时范围下限(只在个体范围已建立时给;吠叫没有下限)。 |
insightContext.comparison.usualUpper | number|null | 否 | 个体平时范围上限;吠叫只给上限(秒)。 |
insightContext.comparison.changePercent | number|null | 否 | 较上一周期变化,与页头 ▲% 同一个值。 |
insightContext.comparison.consecutiveUnusualDays | integer|null | 否 | 截至所选日的连续关注天数;≥2 才说「已经连续 N 天」。 |
insightContext.comparison.unusualLowDays | integer|null | 否 | 活动:关注天里偏少的天数。 |
insightContext.comparison.unusualHighDays | integer|null | 否 | 活动:关注天里偏多的天数。 |
insightContext.comparison.restRatingFactors | array<enum> | 否 | 休息评为一般 / 较差时的主要扣分项,最多说两项。 |
insightContext.comparison.pageEvaluationBasis | enum|null | 否 | 页头评估依据;品种 / 通用时,日视图先说明依据。 |
suppliedJudgment | object | 否 | 服务端评级(只认个体范围)。休息与体征必带,评级可以为 null;活动与吠叫只在服务端评过时带。 |
suppliedJudgment.ruleVersion | enum | 是 | 评级规则版本。 |
suppliedJudgment.rating | enum|null | 是 | 评级;null 表示还没有评级。 |
suppliedJudgment.direction | integer|null | 是 | 方向:-1 偏低 / 0 范围内 / 1 偏高。 |
suppliedJudgment.baselineSource | enum|null | 是 | 评级依据。 |
suppliedJudgment.judgedDays | integer | 是 | 有服务端评级的天数;周 ≥3 / 月 ≥10 才给整期结论。 |
suppliedJudgment.unusualDays | integer|null | 否 | 关注天数(个体范围下 L2 且恶化方向)。 |
suppliedJudgment.deteriorating | boolean | 否 | 评级方向本身是否算变差;false 时只陈述、不给建议。 |
metrics | object | 是 | 页面同源的事实。C2 起占位字段(全 unavailable 基线、全 null 佩戴、空小时点等)不再发送。 |
请求字段规则
- 不符合:月视图必须覆盖一个完整的自然月。修正:按页面窗口的定义发送。
- 不符合:缺少 insightContext,或模式与窗口不符。修正:按查看时刻填 mode / asOf;今天用 today_so_far,08:00 后的休息用 last_night。
- 不符合:均值、天数与逐日事实对不上,或含未来日期。修正:均值只算已结束的日子;逐日数组按日历顺序,未来的日子留 null。
返回示例 JSON
{
"insightId": "health_detail_example",
"petId": "7",
"metric": "bark",
"viewWindow": "month",
"period": {
"startDate": "2026-08-01",
"endDate": "2026-08-31",
"timezone": "Asia/Shanghai",
"isCompleted": true
},
"status": "observation",
"severity": "none",
"summary": "这个月 Pocky 日均叫约 45 秒(日均 1 次)。",
"generation": {
"ruleId": "BARK_FACT_OBSERVATION",
"ruleVersion": "health-detail-2026-09-11-r10",
"generatedAt": "2026-10-09T00:00:00Z",
"aiPolished": false
}
}
返回字段描述
| 字段名 | 数据类型 | 是否必需 | 详细说明 |
|---|
insightId | string | 是 | Gateway 生成的洞察 ID。 |
petId | string | 是 | 原样返回。 |
metric | enum | 是 | 原样返回。 |
viewWindow | enum | 是 | 原样返回。 |
period | object | 是 | 规范化后的窗口。 |
status | enum | 是 | attention / normal / observation / insufficient_data;observation 是中性陈述,不等于正常。 |
severity | enum | 是 | 关注时为 low,其余 none。 |
summary | string | 是 | 一段正文:事实句 + 至多一句补充。 |
generation | object | 是 | ruleId / ruleVersion / generatedAt / aiPolished(恒为 false)。 |
场景正文(中 / 英 / 西)
| 场景 | 状态 | zh-CN | en-US | es |
|---|
bark-month-facts 上个月 · 只陈述时长 | observation | 这个月 Pocky 日均叫约 45 秒(日均 1 次)。 | That month, Pocky barked for about 45 sec a day on average (1 episode a day). | Ese mes, Pocky ladró durante alrededor de 45 s al día en promedio (1 episodio al día). |