使用 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 架構:從原理、設計到項目實戰》

相關文章
相關標籤/搜索