---
name: pushnow
description: 使用 PushNow 项目 API Key 发送 iOS 通知，并上传通知正文中使用的图片、音频和视频。
---

# PushNow 推送 Skill

使用 PushNow 项目 API Key 发送通知，或为通知上传图片、音频和视频。API 根地址为 `https://pushnow.ycbas.com/api/v1`。

## 配置项目 API Key

安装 Skill 后，需要由用户单独提供项目 API Key，并将本文示例中的 `<API_KEY>` 替换为该密钥。公开 Skill 文件不包含任何用户的 API Key。

获取位置：打开 PushNow App，进入“项目”，选择需要推送的项目，在项目详情的 API Key 区域点击更多按钮，然后选择“复制 API Key”。每个项目在创建时会自动生成唯一的 API Key。

## 安全要求

- API Key 只放在服务端、可信脚本或智能体的安全凭据中。
- 不在回复、日志、网页前端、公开代码或截图中输出 API Key。
- 所有请求使用请求头 `Authorization: Bearer <API_KEY>`。

## 发送消息

向 `POST /messages/push` 发送 JSON：

- `title`：必填，最多 20 个 Unicode 字符。通常显示为一行，应把项目或事件名称放在开头。
- `subtitle`：必填，最多 40 个 Unicode 字符。通常显示为两行以内，应优先写结果、状态或需要采取的动作。
- `content`：必填，不限制长度。支持安全内联样式以及 `section`、`p`、`span`、`strong`、`u`、`s`、`blockquote`、`ul`、`ol`、`li`、`img`、`table`、`tbody`、`tr`、`th`、`td`、`a`、`br` 标签；其他标签和不安全属性会被删除。
- `request_id`：可选，最多 100 字；同一项目内重复值不会重复推送。

生成通知时必须在上述长度内表达完整信息，不要依赖 iOS 自动截断；较长的说明放入 `content`。

```bash
curl -X POST 'https://pushnow.ycbas.com/api/v1/messages/push' \
  -H 'Authorization: Bearer <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{"title":"服务器告警","subtitle":"处理器使用率过高","content":"当前使用率为 96%","request_id":"warning-001"}'
```

## 上传媒体

1. 调用 `POST /media/presign`，传入 `filename`、`content_type` 和实际字节数 `size`。
2. 创建 multipart 表单，按原值依次加入响应 `fields` 中的全部字段，最后加入名为 `file` 的原始文件。
3. 将表单以 `POST` 提交到响应的 `url`。表单字段必须位于文件之前；实际文件超过请求中的 `size` 会被 COS Policy 拒绝。
4. 将响应的 `publicUrl` 直接拼接到消息的 `content` 中，再调用发送消息接口。

允许图片（最大 2 MiB）、音频和视频（最大 50 MiB）。

```bash
curl -X POST 'https://pushnow.ycbas.com/api/v1/media/presign' \
  -H 'Authorization: Bearer <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{"filename":"status.png","content_type":"image/png","size":12345}'
```

成功响应的 `data` 包含 `url`、`fields`、`publicUrl`、实际字节数 `size` 和便于显示的 `size_text`。上传时不得把项目 API Key 发给 `url` 所指向的对象存储服务，只提交签名响应中的表单字段和文件。
