使用-Serverless-飞书打造你的个性化消息提醒系统

47次阅读

共计 3433 个字符,预计需要花费 9 分钟才能阅读完成。

一、前言

在日常工作学习生活中,我们可能会遇到以下情形:

  • 自己管理的某台服务器宕机了,但是没有得到及时的提醒,导致业务受到损失
  • 某些自己很想注册的网站悄悄开放注册,但是自己并没有及时得知,于是只能继续漫无目的的等待
  • ……

如果每件事都花时间去关注,那我们的时间必然会不够用,那有没有什么办法可以让这些消息 集中 起来并且 及时 推送呢?在这里我想向大家推荐一个解决方案,那就是 使用 Serverless + 飞书打造属于自己的个性化消息提醒系统

二、准备工作

  1. 首先注册一个飞书账号,然后在飞书网页版登录
  2. 打开飞书开放平台,点击 创建企业自建应用 ,并输入 应用名称 应用副标题 ,然后点击 确定创建

  1. 在企业自建应用列表中点击刚刚创建成功的应用,并记录 App IDApp Secret

二、编写代码

  1. 在本地新建一个项目目录,名称随意,这里以 feishu-notify 为例
  2. 分别创建 3 个文件:.envindex.pyserverless.yml
  3. 按如下说明进行编码

.env

TENCENT_SECRET_ID=AKID********************************
TENCENT_SECRET_KEY=********************************

注:这里的 TENCENT_SECRET_IDTENCENT_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,这里有几点需要作出说明:

  1. 代码中的 app_idapp_secret 项需填写在准备工作记录的 App IDApp Secret
  2. 最终我们使用 POST 方法发送消息
  3. 在调用时,我们还需要在 query 处加上 ?myauth=feishu1,目的是作简单验证以防止他人发送,例如 https://service-********-**********.**.apigw.tencentcs.com/release/?myauth=feishu1

三、部署 Serverless 服务

  1. 通过 npm 安装 Serverless
$ npm install -g serverless
  1. 通过 serverless 命令进行部署,并添加 --debug 参数查看部署过程中的信息
$ serverless --debug
  1. 从终端获取 API 网关的 URL

获取 API 网关的 URL

四、上线应用

  1. 回到飞书开放平台,在企业自建应用列表中点击刚刚创建成功的应用
  2. 点击 应用功能 机器人 ,点击 启用机器人

  1. 点击 版本管理与发布 创建版本,参考下图进行配置(先不要点保存)

  1. 可用性状态 处点击 编辑 ,选择所有员工,然后点击 保存

  1. 点击 申请发布

  1. 点击飞书网页版的头像,进入飞书管理后台

  1. 点击 工作台 应用审核 ,然后点击 审核

  1. 点击 通过

五、调用接口

请求方式: 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.tenc…

3 秒极速部署,立即体验史上最快的 Serverless HTTP 实战开发!

传送门:

  • GitHub: github.com/serverless
  • 官网:serverless.com

欢迎访问:Serverless 中文网,您可以在 最佳实践 里体验更多关于 Serverless 应用的开发!


推荐阅读:《Serverless 架构:从原理、设计到项目实战》

正文完
 0