专栏首页Serverless 实战应用【玩转腾讯云】使用Serverless+飞书打造你的个性化消息提醒系统
原创

【玩转腾讯云】使用Serverless+飞书打造你的个性化消息提醒系统

一、前言

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

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

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

二、准备工作

1. 首先当然是注册一个飞书账号(这个应该就不用我赘述了吧),然后在飞书网页版登录

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

点击创建企业自建应用
输入应用名称和应用副标题,然后点击确定创建

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

记录 App ID 和 App 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

2. 通过serverless命令进行部署,并添加--debug参数查看部署过程中的信息

$ serverless --debug

3. 从终端获取 API 网关的 URL

获取 API 网关的 URL

四、上线应用

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

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

启用机器人

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

创建版本

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

配置可用性状态

5. 点击申请发布

申请发布

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

进入管理后台

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

审核应用

8. 点击通过

五、调用接口

请求方式:POST

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

请求 Header:

参数

类型

必填/选填

说明

默认值

实例

Content-Type

string

必填

Content-Type

application/json

请求 Query:

参数

类型

必填/选填

说明

默认值

实例

myauth

string

必填

简单验证

feishu1

请求 Body:

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

六、效果

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

使用 Talend API Tester 调用接口

可以看到,飞书的消息推送很及时

电脑端效果
手机端效果

七、结语

其实利用飞书能实现的并不只有这些而已,我相信聪明的你一定能开发出更加好玩的应用。本次的分享到此结束,感谢各位的浏览!下面分享一些实用的链接:

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ELK的上线之路(二):—— Logstash安装

    tar xfvz logstash-2.1.1.tar.gz -C /usr/local/

    江小白
  • SAP Spartacus应用入口的模块加载单步调试

    看看我的app module,里面有两个export的对象:DebugConfig和AppModule:

    Jerry Wang
  • C#学习笔记(二)

  • 机器学习|聚类(上)

    对于训练样本的标记信息是未知的情况下,我们的目标就会变成通过对无标记训练样本的学习来揭示数据的内在性质及规律,我们把这样的学习方法称之为“无监督学习”,而在此类...

    数据山谷
  • wordpress 出现php zip extension not loaded

    即在 ; default extension directory 后添加 extension=zip.so

    lollipop72
  • PHP运算符

    老雷PHP全栈开发
  • 机器学习(二十五) ——adaboost算法与实现

    机器学习(二十五)——adaboost算法与实现 (原创内容,转载请注明来源,谢谢) 一、概述 当进行监督学习时,除了使用某个分类器外,还可以将各个分类器结...

    用户1327360
  • 【腾讯云的1001种玩法】构建企业级应用环境之数据层面优化(二)

    在上一篇中我们讲到准备SQL基础环境改造,这一篇将继续讲述如何为应用提供高可用的底层数据层。

    李斯达
  • PHP5.4+Apache2.2+Mysql5.0+PHPMyAdmin3.2.5安装配置

    落叶大大
  • 对象存储文件打开方式的解决方案

    对象存储(cos),之前老版本默认打开方式为下载;后续貌似改版之后默认打开方式为预览即浏览器直接显示文件。

    杜志强

扫码关注云+社区

领取腾讯云代金券