Skip to content

Commit

Permalink
Merge pull request easychen#22 from riba2534/main
Browse files Browse the repository at this point in the history
云函数搭建版本更新至2.0
  • Loading branch information
easychen committed Jul 8, 2021
2 parents c8d3f08 + cde031f commit 0d93c90
Show file tree
Hide file tree
Showing 9 changed files with 99 additions and 647 deletions.
103 changes: 63 additions & 40 deletions go-scf/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 腾讯云云函数部署Server酱
# 腾讯云云函数部署Server酱📣

本项目是对 [Wecom酱](https://github.com/easychen/wecomchan) 进行的扩展,可以通过企业微信 OpenAPI 向微信推送消息,实现微信消息提醒。

Expand All @@ -8,49 +8,32 @@

- 便宜:说是免费也不过分
- 简单:不需要购买vps, 也不需要备案, 腾讯云速度有保障.
- 易搭建:一个可执行二进制文件加一个配置文件,直接上传至腾讯云函数控制面板即可,虽然使用 Golang 编写,但是搭建无需 Golang 环境
- 易搭建:一个可执行二进制文件,直接上传至腾讯云函数控制面板即可,虽然使用 Golang 编写,但是搭建无需 Golang 环境
- Serverless:无服务器,函数调用完资源会释放

## 简单介绍
## 🖐️ 简单介绍

我们要实现的目标是把消息推送到微信上,此处借助了使用 企业微信,可以创建机器人,利用微信的 OpenAPI 来实现消息推送,本项目做了一个简单的封装。

欢迎PR代码。

## 使用方法
> 老用户注意:
>
> 目前已更新到2.0版本,2.0版本不需要 `config.yaml` 文件,配置改为从云函数的环境变量中读取,请直接下载 `main.zip` 上传至云函数并且设置环境变量即可。
### 1. 注册企业 & 创建机器人 & 获取相关配置信息

此处不再赘述,项目主页有完整的操作方法,见:https://github.com/easychen/wecomchan

### 2. 下载编译好的二进制文件,填写配置

下载文件 [历史版本链接](https://github.com/riba2534/wecomchan/releases)

- [main](https://github.com/riba2534/wecomchan/releases/download/1.1/main) :腾讯云云函数,可执行二进制文件
- [config.yaml.example](https://github.com/riba2534/wecomchan/releases/download/1.0/config.yaml.example) : 示例的配置文件

修改 `config.yaml.example` 中的内容,**先把文件名改为 `config.yaml`**,在对应位置填入相关配置,企业微信相关配置,请参考项目主页获取。
## 👋 使用方法

配置中的 `FUNC_NAME` 指下一步在腾讯云创建云函数时的函数名称,推荐填 `wecomchan`
### 1. 注册企业 & 创建机器人 & 获取相关配置信息

配置中的 `SEND_KEY` 指最终调用HTTP接口时校验是否是本人调用的密钥,随意设置,最终发起HTTP请求携带即可。
此处不再赘述,项目主页有完整的操作方法,见:https://github.com/riba2534/wecomchan

```yaml
config:
FUNC_NAME: 函数名称
SEND_KEY: 这里写你设置的send_key
WECOM_CID: 企业微信公司ID
WECOM_SECRET: 企业微信应用Secret
WECOM_AID: 企业微信应用ID
WECOM_TOUID: "@all" # 别改
```
### 2. 下载编译好的二进制文件

修改完配置完成后,把 `main``config.yaml` 这两个文件打包在一个 ZIP 文件中(注意,压缩包中不要有其他目录,应该只包含这两个文件),打包zip的方法就不赘述了,你甚至可以用360压缩
下载文件 [版本发布页面](https://github.com/riba2534/wecomchan/releases)

![image-20210705014521569](https://image-1252109614.cos.ap-beijing.myqcloud.com/img/image-20210705014521569.png)
- [main.zip](https://github.com/riba2534/wecomchan/releases/download/2.0/main.zip) :云函数可执行二进制文件,不用改动,等会直接上传即可。

### 3. 在腾讯云中创建云函数
### 3. 在腾讯云中创建云函数 & 配置环境变量

打开云函数控制台:https://console.cloud.tencent.com/scf/list

Expand All @@ -60,26 +43,45 @@ config:

如图所示选择

1. 自定义创建
2. 函数名称填你在 `config.yaml` 中配置的那个名称
1. 自定义创建,函数类型为 `事件函数`
2. 函数名称你随便填一个,推荐填 `wecomchan`
3. 运行环境选择 Go1
4. 函数代码选择本地上传ZIP包
5. 触发器配置里面新增一个 API网关触发,保持默认配置就行
6. 点击完成
4. 函数代码选择本地上传ZIP包,直接上传刚才下载的 `main.zip`
5.`高级配置` 中配置环境变量,6 个环境变量,**缺一不可**,(后续想改环境变量,直接在创建好的函数中编辑即可)

环境变量配置说明

| key | value | 备注 |
| :------------: | :----------------------------------------------------------: | :----------------------------------------------------------- |
| `FUNC_NAME` | 填你在上面配置的函数说明 | |
| `SEND_KEY` | 最终调用HTTP接口时校验是否是本人调用的密钥,随意设置,最终发起HTTP请求携带即可 | |
| `WECOM_CID` | 企业微信公司ID | |
| `WECOM_SECRET` | 企业微信应用Secret | |
| `WECOM_AID` | 企业微信应用ID | |
| `WECOM_TOUID` | `@all` | 此处指推送消息的默认发送对象,填 `@all`,则代表向该企业的全部成员推送消息(如果是个人用的话,一个企业中只有你自己,直接填 `@all` 即可),如果想指定具体发送的人,后面会说明怎么发。 |

6.`触发器配置` 中,新增 `API网关触发`,保持默认配置即可。
7. 点击完成

![基础配置](https://image-1252109614.cos.ap-beijing.myqcloud.com/img/image-20210707204518173.png)

![高级配置](https://image-1252109614.cos.ap-beijing.myqcloud.com/img/image-20210707204936310.png)

![image-20210705015022784](https://image-1252109614.cos.ap-beijing.myqcloud.com/img/image-20210705015022784.png)
![触发器配置](https://image-1252109614.cos.ap-beijing.myqcloud.com/img/image-20210707205811630.png)

稍等一会,进入你创建的函数:

![image-20210705015301810](https://image-1252109614.cos.ap-beijing.myqcloud.com/img/image-20210705015301810.png)

图中所示的访问路径就是函数的请求路径。
图中所示的访问路径就是函数的请求路径,至此,所有的配置完成

## 测试是否成功
## 👌 发起HTTP请求测试是否成功

在你刚才获得的路径之后拼几个GET参数,在后面加上:`?sendkey=你配置的sendkey&msg_type=text&msg=hello`
> 当发送的文本中存在有换行符或其他字符时,请把 msg 参数进行 url 编码
### 简单使用:

> 当发送的文本中存在有换行符或其他字符时,请把 msg 参数进行 url 编码
在你刚才获得的路径之后拼几个GET参数,在后面加上:`?sendkey=你配置的sendkey&msg_type=text&msg=hello`

![image-20210705015727720](https://image-1252109614.cos.ap-beijing.myqcloud.com/img/image-20210705015727720.png)

Expand All @@ -91,6 +93,27 @@ config:

之后,想怎么用就是你的事了,想给自己的微信推送,只需要给这个 URL 发一条 HTTP 请求即可。

### 给指定成员推送消息:

如果你的需求是给企业微信中的指定成员发送消息而不是所有成员,则在 GET 请求中多加一个参数 `to_user`,值为 成员ID列表,如果想指定多个成员,则多个成员ID之间用 `|` 隔开。如请求:`https://xxxxx/wecomchan?sendkey=123456&msg_type=text&msg=测试消息&to_user=User1|User2` ,也能收到消息。

![image-20210707211125345](https://image-1252109614.cos.ap-beijing.myqcloud.com/img/image-20210707211125345.png)

> 成员的 ID 在企业微信后台,`通讯录`,点开指定成员资料,有个 `账号` 字段,该字段即为该成员的ID.
### 参数说明:

下表为 GET 请求的参数说明:

| 参数名称 | 说明 | 是否可选 |
| ---------- | ------------------------------------------------------------ | -------- |
| `sendkey` | 校验是否是本人调用的密钥,随意设置,最终发起HTTP请求携带即可 | 必须 |
| `msg_type` | 消息类型,目前只有纯文本一种类型,值为 `text` | 必须 |
| `msg` | 消息内容,支持多行和UTF8字符,在程序中构建字符串时加上**换行符**即可,如果有特殊符号,记得使用 `urlencode` 编码 | 必须 |
| `to_user` | 如果需要给企业内指定成员发消息,可在此参数中指定成员。如果不传本参数,默认所有成员。 | 可选 |

👇👇👇

---

如果发现bug,或者对本项目有任何建议,欢迎联系 `riba2534@qq.com` 或者直接提 [Issue](https://github.com/riba2534/wecomchan/issues).
Expand Down
3 changes: 2 additions & 1 deletion go-scf/build.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
set -ex

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o main && upx -9 main

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main
zip main.zip main
7 changes: 0 additions & 7 deletions go-scf/config.yaml.example

This file was deleted.

4 changes: 3 additions & 1 deletion go-scf/consts/consts.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ var (

// 微信发消息API
const (
WeComMsgSendURL = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s"
// https://work.weixin.qq.com/api/doc/90000/90135/90236
WeComMsgSendURL = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s"
// https://work.weixin.qq.com/api/doc/90000/90135/91039
WeComAccessTokenURL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s"
)
2 changes: 0 additions & 2 deletions go-scf/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,5 @@ go 1.16

require (
github.com/json-iterator/go v1.1.11
github.com/spf13/cast v1.3.1
github.com/spf13/viper v1.8.1
github.com/tencentyun/scf-go-lib v0.0.0-20200624065115-ba679e2ec9c9
)
Loading

0 comments on commit 0d93c90

Please sign in to comment.