# wecom_robot
**Repository Path**: duwtry/wecom_robot
## Basic Information
- **Project Name**: wecom_robot
- **Description**: 根据企业微信官网机器人 api 封装的 bash 实现。此脚本现在支持发送文本消息、Markdown 格式消息、新闻格式消息、文件消息、语音消息和图片消息。
- **Primary Language**: Shell
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-08-17
- **Last Updated**: 2025-08-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 企业微信机器人
根据企业微信官网机器人 api 封装的 bash 实现。
此脚本现在支持发送文本消息、Markdown 格式消息、新闻格式消息、文件消息、语音消息和图片消息。
每种消息类型都封装在单独的函数中,并对内容进行了 UTF-8 编码处理。
脚本根据传入的参数生成相应的 JSON 数据结构,并通过 curl 发送 HTTP 请求。
实现中添加了文件和语音内容的缓存机制,避免重复上传相同文件,并对媒体内容进行格式和大小检查,同时包含文件的过期检查以确保使用最新的媒体文件。
### 示例调用信息:
- 发送文本消息:
```shell
./send_message.sh -k "YOUR_WEBHOOK_KEY" text "大家好,我是机器人,现在在测试" "user1,user2" "13800000000,13900000000"
```
- 发送 Markdown 格式消息:
```shell
./send_message.sh -k "YOUR_WEBHOOK_KEY" markdown "实时新增用户反馈132例,请相关同事注意。\n>类型:用户反馈\n>普通用户反馈:117例\n>VIP 用户反馈:15例"
```
- 发送新闻格式消息:
```shell
./send_message.sh -k "YOUR_WEBHOOK_KEY" news "中秋节礼品领取, 端午节礼品领取" "今年中秋节公司有豪礼相送, 今年端午节公司有豪礼相送" "http://www.qq.com, http://www.baidu.com" "http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png, http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg2.png"
```
如果没有描述或图片 URL,可以省略:
```shell
./send_message.sh -k "YOUR_WEBHOOK_KEY" news "中秋节礼品领取" "" "http://www.qq.com"
```
- 发送文件消息:
```shell
./send_message.sh -k "YOUR_WEBHOOK_KEY" file "/path/to/wework.txt"
```
- 发送语音消息:
```shell
./send_message.sh -k "YOUR_WEBHOOK_KEY" voice "/path/to/voice.amr"
```
- 发送图片消息:
```shell
./send_message.sh -k "YOUR_WEBHOOK_KEY" image "/path/to/image.jpg"
```
或者
```shell
./send_message.sh -k "YOUR_WEBHOOK_KEY" image "BASE64_STRING"
```
请将 `YOUR_WEBHOOK_KEY` 替换为企业微信 Webhook 接口的实际 key,`/path/to/` 替换为实际的文件路径或 Base64 字符串内容。
如果你有常用的机器人,`-k "YOUR_WEBHOOK_KEY"` 可以通过修改脚本的默认 key 省略掉。
### 多机器人处理
现在我们有很多的机器人,即有很多的 key,直接使用 `./send_message.sh -k [key]` 有点麻烦,让我们再写一个脚本,用 **json** 定义各个 `YOUR_WEBHOOK_KEY` 信息,维护在文件里,然后用 `./wecom_robot.sh [json 定义的 key]` 替换 `./send_message.sh -k "YOUR_WEBHOOK_KEY"` 部分调用。
- 指定的 `key` 不存在时,不传递 `-k` 参数给 `send_message.sh`,从而使用 `send_message.sh` 中默认定义的 `YOUR_WEBHOOK_KEY`。
- 指定多个 `key` 同时给多个机器人发送相同消息,如果指定的 `key` 对应机器人不存在,则不发送消息,并输出相应报错信息。
**使用步骤如下:**
1. 确保 `keys.json` 文件存在并包含相应的 `YOUR_WEBHOOK_KEY` 信息(如果没有文件,脚本会处理为空对象)。例如:
```json
{
"key1": "YOUR_WEBHOOK_KEY_ONE",
"key2": "YOUR_WEBHOOK_KEY_TWO",
"key3": "YOUR_WEBHOOK_KEY_THREE"
}
```
2. 使 `wecom_robot.sh` 可执行:
```shell
chmod +x wecom_robot.sh
```
3. 使用 `wecom_robot.sh` 来发送消息。
- **发送给所有 key:**
```shell
./wecom_robot.sh --all text "大家好,我是机器人,现在在测试" "user1,user2" "13800000000,13900000000"
```
- **发送消息给特定的多个 keys(用逗号分隔):**
```bash
./wecom_robot.sh key1,key2 text "大家好,我是机器人,现在在测试" "user1,user2" "13800000000,13900000000"
```
如果多个 key 存在不可用的 key,则不发送消息,并输出异常 key 信息。
- **使用单个 key:**
```shell
./wecom_robot.sh key1 text "大家好,我是机器人,现在在测试" "user1,user2" "13800000000,13900000000"
```
- **如果 `keys.json` 文件不存在或指定的 key 不存在,则会自动使用 `send_message.sh` 中的默认 `YOUR_WEBHOOK_KEY`:**
```shell
./wecom_robot.sh nonexistent_key text "大家好,我是机器人,现在在测试" "user1,user2" "13800000000,13900000000"
```
这样,当指定的 key 不存在时,脚本会输出中文提示信息,并使用默认的 `YOUR_WEBHOOK_KEY`。