# Home Assistant Inbound Gateway 本文档说明当前 Python 项目中已经迁入的 Home Assistant inbound gateway 第一版。 这里的 inbound 指: - Home Assistant 主动调用当前 app 的入口 当前已恢复的入口是: - `POST /homeassistant/publish` ## Request Envelope 当前沿用 legacy Go 的 envelope 形状: ```json { "target": "location_recorder", "action": "record", "content": "{'person': 'alice', 'latitude': '1.23', 'longitude': '4.56'}" } ``` 说明: - `target`、`action`、`content` 均为必填 - unknown field 会被拒绝 - `content` 当前仍兼容 legacy 常见的单引号 JSON 字符串风格 ## 当前已支持的 Target / Action 当前已接回的路径: - `location_recorder / record` - `ticktick / create_action_task` 其中: - `location_recorder / record` 会把 `content` 解析为 location recorder 请求,并直接走当前 Python 项目里的 location 写入逻辑 - `ticktick / create_action_task` 会沿用 legacy 行为,把 `content` 解析为: - `action: string` - `due_hour: int` - 可选 `title` 字段会被忽略 - TickTick task title 仍使用 `action` - due date 仍按 legacy 语义计算:先取 `now + due_hour`,再落到该日期的“次日零点”,最后转成 UTC 后写给 TickTick - 具体 project 仍由 `HOME_ASSISTANT_ACTION_TASK_PROJECT_ID` 提供 ## 当前尚未接回 以下 legacy 路径在当前阶段还没有迁入: - `poo_recorder / get_latest` - 其他未定义 target/action 这些请求当前会返回: - `500 internal server error` ## 错误处理 当前策略保持简洁: - envelope 非法、缺字段、unknown field、`content` 非法:返回 `400 bad request` - target/action 当前未迁入:返回 `500 internal server error` 对 caller 的响应体保持简洁,不暴露过多内部细节;更详细原因只写日志。