使用 Serverless + 飞书打造你的个性化消息提醒系统
ECharts5.0版本即将上线,来说说我与ECharts的那些事吧!>>>
一、前言
在日常工作学习生活中,我们可能会遇到以下情形:
- 自己管理的某台服务器宕机了,但是没有得到及时的提醒,导致业务受到损失
- 某些自己很想注册的网站悄悄开放注册,但是自己并没有及时得知,于是只能继续漫无目的的等待
- ……
如果每件事都花时间去关注,那我们的时间必然会不够用,那有没有什么办法可以让这些消息集中起来并且及时推送呢?在这里我想向大家推荐一个解决方案,那就是使用 Serverless + 飞书打造属于自己的个性化消息提醒系统。
二、准备工作
- 在企业自建应用列表中点击刚刚创建成功的应用,并记录 App ID 和 App Secret
二、编写代码
-
在本地新建一个项目目录,名称随意,这里以
feishu-notify
为例 -
分别创建 3 个文件:
.env
,index.py
和serverless.yml
-
按如下说明进行编码
.env
TENCENT_SECRET_ID=AKID******************************** TENCENT_SECRET_KEY=********************************
注:这里的
TENCENT_SECRET_ID
和TENCENT_SECRET_KEY
可在腾讯云控制台的访问密钥中获取,如果没有密钥则需要自己新建一个
serverless.yml
myFunction: component: "@serverless/tencent-scf" inputs: name: feishu-notify-py codeUri: "./" handler: index.main_handler runtime: Python3.6 region: ap-guangzhou description: My Serverless Function Used to Notify Myself memorySize: 128 events: - apigw: name: serverless parameters: protocols: - https endpoints: - path: "/" method: POST
注:可以点击这里查看
serverless.yml
中所有可用属性的属性列表
index.py
def main_handler(event, context): import requests import json print(event) CONFIG = { "app_id": "********************", "app_secret": "********************************" } # my auth if 'myauth' not in event['queryString'] or event['queryString']['myauth'] != 'feishu1': return 'forbidden' # Get content postContent = event['body'] try: postContent = json.loads(postContent) except: return 'error in json_loads(line: 19)' if 'content' not in postContent: return 'invalid params' content = postContent['content'] # Get tenant_access_token try: res = requests.post('https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/', { "app_id": CONFIG['app_id'], "app_secret": CONFIG['app_secret'] }) except: return 'error in get_tenant_access_token' data = json.loads(res.text) if data['code'] != 0: return data['msg'] token = data['tenant_access_token'] # Get chat_id try: res = requests.get('https://open.feishu.cn/open-apis/chat/v4/list', headers={ 'Authorization': 'Bearer %s' % (token) }) except: return 'error in get_chat_id' data = json.loads(res.text) if data['code'] != 0: return data['msg'] groupList = data['data']['groups'] myGroupId = groupList[0]['chat_id'] # Send message try: res = requests.post('https://open.feishu.cn/open-apis/message/v4/send/', json={ "chat_id": myGroupId, "msg_type": "text", "content": { "text": content } }, headers={ 'Authorization': 'Bearer %s' % (token), 'Content-Type': 'application/json' }) except: return 'error in send message' data = json.loads(res.text) if data['code'] != 0: return data['msg'] return 'success'
关于 index.py
,这里有几点需要作出说明:
- 代码中的 app_id 和
app_secret
项需填写在准备工作记录的 App ID 和 App Secret - 最终我们使用
POST
方法发送消息 - 在调用时,我们还需要在
query
处加上?myauth=feishu1
,目的是作简单验证以防止他人发送,例如https://service-********-**********.**.apigw.tencentcs.com/release/?myauth=feishu1
三、部署 Serverless 服务
- 通过 npm 安装 Serverless
$ npm install -g serverless
- 通过
serverless
命令进行部署,并添加--debug
参数查看部署过程中的信息
$ serverless --debug
- 从终端获取 API 网关的 URL
获取 API 网关的 URL
四、上线应用
-
回到飞书开放平台,在企业自建应用列表中点击刚刚创建成功的应用
-
点击应用功能-机器人,点击启用机器人
- 点击版本管理与发布-创建版本,参考下图进行配置(先不要点保存)
- 在可用性状态处点击编辑,选择所有员工,然后点击保存
- 点击申请发布
- 点击飞书网页版的头像,进入飞书管理后台
- 点击工作台-应用审核,然后点击审核
- 点击通过
五、调用接口
请求方式: POST
请求地址: 上面获取的 APIGateway 的 URL
请求 Header:
参数 | 类型 | 必填/选填 | 说明 | 默认值 | 实例 |
---|---|---|---|---|---|
Content-Type | string | 必填 | Content-Type | application/json |
请求 Query:
参数 | 类型 | 必填/选填 | 说明 | 默认值 | 实例 |
---|---|---|---|---|---|
myauth | string | 必填 | 简单验证 | feishu1 |
请求 Body:
{ "content": "这里填入你想要发送的信息" }
六、效果
为了方便,这里使用 Chrome 浏览器插件 Talend API Tester 进行调用
可以看到,飞书的消息推送很及时
七、结语
其实利用飞书能实现的并不只有这些而已,我相信聪明的你一定能开发出更加好玩的应用,本次的分享到此结束。
One More Thing
3 秒你能做什么?喝一口水,看一封邮件,还是 —— 部署一个完整的 Serverless 应用?
复制链接至 PC 浏览器访问:https://serverless.cloud.tencent.com/deploy/express
3 秒极速部署,立即体验史上最快的 Serverless HTTP 实战开发!
传送门:
- GitHub: github.com/serverless
- 官网:serverless.com
欢迎访问:Serverless 中文网,您可以在 最佳实践 里体验更多关于 Serverless 应用的开发!
- 使用环信账号发送系统通知及消息提醒
- Molog:使用 Serverless 搭建的前端错误日志及事件收集系统
- Molog:使用 Serverless 搭建的前端错误日志及事件收集系统
- 尝试通过使用 TCP/IP 套接字连接到群集中的 SQL Server 命名实例时收到“SQL Server does not exist or access denied”(SQL Server 不存在,或者访问被拒绝)错误消息
- 当您尝试通过使用 FrontPage 2003 或当您尝试导出 Web 部件编辑门户收到是类型 Microsoft.SharePoint.SoapServer.SoapServerException " Soap:Server 异常 " 消息
- 使用Apache MINA2 实现 Web 系统的消息中间件
- 使用开源项目打造GIS应用系统
- 使用OGRE打造装备系统 二。UML类图
- 【C++中消息自动派发之四】使用IDL构建Chat Server
- 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(一)
- sharepoint 当您尝试通过使用 FrontPage 2003 或当您尝试导出 Web 部件编辑门户收到是类型 Microsoft.SharePoint.SoapServer.SoapServerException " Soap:Server 异常 " 消息
- 使用Exchange 2000 Server 构建多域名邮件系统
- 使用.NET从零开始打造短信应用系统之一
- com.microsoft.sqlserver.jdbc.SQLServerException: 系统内存不足。请对大型 ResultSet 使用服务器端游标: Java heap space。ResultSet 大小:417,666,054。JVM 总内
- 使用 Java Content Repository 技术打造企业级内容管理系统
- 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(四)
- 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统
- 中文系统下使用Zend Server ce后显示错误页的解决
- 使用麦咖啡打造安全系统