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

1、前言

在平常工做学习生活中,咱们可能会遇到如下情形:javascript

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

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

2、准备工做

  1. 首先注册一个飞书帐号,而后在飞书网页版登陆git

  2. 打开飞书开放平台,点击建立企业自建应用,并输入应用名称应用副标题,而后点击肯定建立github

点击建立企业自建应用

输入应用名称和应用副标题,而后点击肯定建立

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

记录 App ID 和 App Secret

2、编写代码

  1. 在本地新建一个项目目录,名称随意,这里以 feishu-notify 为例express

  2. 分别建立 3 个文件:.envindex.pyserverless.ymlnpm

  3. 按以下说明进行编码json

.env

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

注:这里的 TENCENT_SECRET_IDTENCENT_SECRET_KEY 可在腾讯云控制台的访问密钥中获取,若是没有密钥则须要本身新建一个api

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

3、部署 Serverless 服务

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

serverless

获取 API 网关的 URL

4、上线应用

  1. 回到飞书开放平台,在企业自建应用列表中点击刚刚建立成功的应用

  2. 点击应用功能-机器人,点击启用机器人

启用机器人

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

建立版本

  1. 可用性状态处点击编辑,选择全部员工,而后点击保存

配置可用性状态

  1. 点击申请发布

申请发布

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

进入管理后台

  1. 点击工做台-应用审核,而后点击审核

审核应用

  1. 点击经过

5、调用接口

请求方式: POST

请求地址: 上面获取的 APIGateway 的 URL

请求 Header:

参数 类型 必填/选填 说明 默认值 实例
Content-Type string 必填 Content-Type application/json

请求 Query:

参数 类型 必填/选填 说明 默认值 实例
myauth string 必填 简单验证 feishu1

请求 Body:

{
    "content": "这里填入你想要发送的信息"
}

6、效果

为了方便,这里使用 Chrome 浏览器插件 Talend API Tester 进行调用

使用 Talend API Tester 调用接口

能够看到,飞书的消息推送很及时

电脑端效果

7、结语

其实利用飞书能实现的并不仅有这些而已,我相信聪明的你必定能开发出更加好玩的应用,本次的分享到此结束。

One More Thing

3 秒你能作什么?喝一口水,看一封邮件,仍是 —— 部署一个完整的 Serverless 应用?

复制连接至 PC 浏览器访问:https://serverless.cloud.tencent.com/deploy/express

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

传送门:

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


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

相关文章
相关标签/搜索