---
name: sms-notifier
description: "MANDATORY: When user selects '发送短信通知相关人员', you MUST execute query_contacts.py and display its returned contacts exactly as-is, including the original phone field. Never rewrite phone into '手机号缺失/不可用'."
---
# sms-notifier

## 配置说明

本 skill 的所有敏感配置（短信密钥、签名、模板等）统一从 workspace 根目录的 **`key.json`** 文件读取，**禁止在脚本中硬编码任何密钥**。

`key.json` 路径：`/workspace/key.json`（容器内路径）

`key.json` 结构示例：
```json
{
  "sms": {
    "SMS_ACCESS_KEY_ID": "你的阿里云 AccessKey ID",
    "SMS_ACCESS_KEY_SECRET": "你的阿里云 AccessKey Secret",
    "SMS_SIGN_NAME": "你的短信签名",
    "SMS_TEMPLATE_CODE": "SMS_xxxxxxxxx",
    "SMS_ENDPOINT": "dysmsapi.aliyuncs.com"
  },
  "db_api": {
    "API_URL": "http://your-db-api-host/getmysql",
    "API_BASE_JDBC": "your_jdbc_datasource_name"
  }
}
```

> 修改配置时，只需编辑 `key.json`，无需修改任何 Python 脚本。

---

## 关键规则

当用户发送"发送短信通知相关人员"时，必须执行真实联系人查询脚本，并原样展示脚本返回结果。

必须遵守以下规则：
1. 必须执行：`python3 /workspace/skills/sms-notifier/scripts/query_contacts.py`
2. 必须原样展示脚本返回的 `contacts` 数据。
3. 必须原样展示 `phone` 字段，即使它是密文、哈希、掩码或其他非 11 位手机号形式。
4. 可以补充说明 `phone_status` 或 `sendable` 的含义，但不能改写 `phone` 原值。
5. 严禁把 `phone` 字段改写成"手机号缺失/不可用"。
6. 严禁复用任何固定联系人示例名单。
7. 严禁在未执行脚本时声称已查询联系人。

## 联系人查询 SQL

固定使用以下 SQL，由查询脚本执行：

```sql
SELECT ACCOUNT AS name, PHONE AS phone FROM SYS_USER WHERE DELETE_FLAG = 'NOT_DELETE' ORDER BY NAME
```

## 场景 A：用户发送"发送短信通知相关人员"

必须执行：

```bash
python3 /workspace/skills/sms-notifier/scripts/query_contacts.py
```

输出要求：
1. 只能返回脚本实时查询得到的联系人结果。
2. 结果中的 `phone` 必须原样展示，不得替换成"手机号缺失/不可用"。
3. 若 `sendable=false`，可以说明当前号码不可直接用于短信发送，但必须保留原始 `phone` 值。
4. 若查询失败，必须明确返回查询失败原因，不得伪造联系人列表。

## 场景 B：用户输入手机号或联系人姓名并要求发送短信

必须调用：

```bash
python3 /workspace/skills/sms-notifier/scripts/sms_notifier.py --recipient "目标手机号或联系人姓名" --content "短信内容"
```

## 场景 C：联系人手机号不是明文手机号

如果联系人 `phone` 是密文、哈希值、掩码值或其他非 11 位手机号格式：
1. 必须原样返回该 `phone`。
2. 可以说明"当前号码不是可直接发送的明文手机号"。
3. 不得将其改写成"手机号缺失/不可用"。

## 依赖说明

本 skill 使用阿里云官方 Python SDK 发送短信，依赖已离线安装至容器内。

| 依赖包 | 版本 | 用途 |
|--------|------|------|
| alibabacloud-dysmsapi20170525 | 4.5.0 | 短信发送核心 SDK |
| alibabacloud-tea-openapi | 0.4.4 | OpenAPI 请求封装 |
| alibabacloud-tea | 0.4.3 | 阿里云 Tea 框架基础库 |
| alibabacloud-tea-util | 0.3.14 | 请求工具类 |
| alibabacloud-credentials | 1.0.8 | 鉴权凭证管理 |
| alibabacloud-openapi-util | 0.2.4 | OpenAPI 工具函数 |

依赖安装路径：`/workspace/.local/lib/python3.11/site-packages/`

使用前需在脚本中确保路径已加入 `sys.path`：
```python
import sys
sys.path.insert(0, '/workspace/.local/lib/python3.11/site-packages')
```
