Python調用飛書發送消息


前言

    使用飛書機器人發送消息,本質是使用Python的requests類庫發送http請求,請求地址即為創建機器時保存的webhook鏈接,發送的內容實際為json串,請求header為{'Content-Type': 'application/json; charset=utf-8'}

一、創建飛書機器人  

  自定義飛書機器人操作步驟,具體詳見飛書官方文檔:《機器人 | 如何在群聊中使用機器人?

二、調用飛書發送消息

  自定義機器人添加完成后,就能向其 webhook 地址發送 POST 請求,從而在群聊中推送消息了。支持推送的消息格式有文本、富文本、圖片消息,也可以分享群名片等。

  參數msg_type代表消息類型,可傳入:text(文本)/ post(富文本)/ image(圖片)/ share_chat(分享群名片)/ interactive(消息卡片),可參照飛書接口文檔:https://open.feishu.cn/document/ukTMukTMukTM/uUjNz4SN2MjL1YzM
發送文本消息
  請求的消息體示例:
{
"open_id":"ou_5ad573a6411d72b8305fda3a9c15c70e",
"root_id":"om_40eb06e7b84dc71c03e009ad3c754195",
"chat_id":"oc_5ad11d72b830411d72b836c20",
"user_id": "92e39a99",
"email":"fanlv@gmail.com",
"msg_type":"text",
"content":{
"text":"text content<at user_id=\"ou_88a56e7e8e9f680b682f6905cc09098e\">test</at>"
}
}

Curl 請求 Demo

curl -X POST \ https://open.feishu.cn/open-apis/message/v4/send/ \ -H 'Authorization: Bearer t-fee42159a366c575f2cd2b2acde2ed1e94c89d5f' \ -H 'Content-Type: application/json' \ -d '{
    "chat_id": "oc_f5b1a7eb27ae2c7b6adc2a74faf339ff", "msg_type": "text", "content": { "text": "text content<at user_id=\"ou_88a56e7e8e9f680b682f6905cc09098e\">test</at>" } }'

使用Python封裝飛書請求

接下來我們以發送文本格式消息類型,進行以下封裝,上代碼:

# -*- coding:utf-8 -*-
''' @File : feiShuTalk.py @Time : 2020/11/9 11:45 @Author : DY @Version : V1.0.0 @Desciption: '''

import requests import json import logging import time import urllib import urllib3 urllib3.disable_warnings() try: JSONDecodeError = json.decoder.JSONDecodeError except AttributeError: JSONDecodeError = ValueError def is_not_null_and_blank_str(content): """ 非空字符串 :param content: 字符串 :return: 非空 - True,空 - False """
    if content and content.strip(): return True else: return False class FeiShutalkChatbot(object): def __init__(self, webhook, secret=None, pc_slide=False, fail_notice=False): ''' 機器人初始化 :param webhook: 飛書群自定義機器人webhook地址 :param secret: 機器人安全設置頁面勾選“加簽”時需要傳入的密鑰 :param pc_slide: 消息鏈接打開方式,默認False為瀏覽器打開,設置為True時為PC端側邊欄打開 :param fail_notice: 消息發送失敗提醒,默認為False不提醒,開發者可以根據返回的消息發送結果自行判斷和處理 ''' super(FeiShutalkChatbot, self).__init__() self.headers = {'Content-Type': 'application/json; charset=utf-8'} self.webhook = webhook self.secret = secret self.pc_slide = pc_slide self.fail_notice = fail_notice def send_text(self, msg, open_id=[]): """ 消息類型為text類型 :param msg: 消息內容 :return: 返回消息發送結果 """ data = {"msg_type": "text", "at": {}} if is_not_null_and_blank_str(msg):    # 傳入msg非空
            data["content"] = {"text": msg} else: logging.error("text類型,消息內容不能為空!") raise ValueError("text類型,消息內容不能為空!") logging.debug('text類型:%s' % data) return self.post(data) def post(self, data): """ 發送消息(內容UTF-8編碼) :param data: 消息數據(字典) :return: 返回消息發送結果 """
        try: post_data = json.dumps(data) response = requests.post(self.webhook, headers=self.headers, data=post_data, verify=False) except requests.exceptions.HTTPError as exc: logging.error("消息發送失敗, HTTP error: %d, reason: %s" % (exc.response.status_code, exc.response.reason)) raise
        except requests.exceptions.ConnectionError: logging.error("消息發送失敗,HTTP connection error!") raise
        except requests.exceptions.Timeout: logging.error("消息發送失敗,Timeout error!") raise
        except requests.exceptions.RequestException: logging.error("消息發送失敗, Request Exception!") raise
        else: try: result = response.json() except JSONDecodeError: logging.error("服務器響應異常,狀態碼:%s,響應內容:%s" % (response.status_code, response.text)) return {'errcode': 500, 'errmsg': '服務器響應異常'} else: logging.debug('發送結果:%s' % result) # 消息發送失敗提醒(errcode 不為 0,表示消息發送異常),默認不提醒,開發者可以根據返回的消息發送結果自行判斷和處理
                if self.fail_notice and result.get('errcode', True): time_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) error_data = { "msgtype": "text", "text": { "content": "[注意-自動通知]飛書機器人消息發送失敗,時間:%s,原因:%s,請及時跟進,謝謝!" % ( time_now, result['errmsg'] if result.get('errmsg', False) else '未知異常') }, "at": { "isAtAll": False } } logging.error("消息發送失敗,自動通知:%s" % error_data) requests.post(self.webhook, headers=self.headers, data=json.dumps(error_data)) return result

  封裝后我們就可以直接調用封裝的類,進行消息代碼發送;webhook即是創建機器人時生成的webhook鏈接,執行以下代碼后,就可以使用飛書發送消息咯~

    webhook = "https://open.feishu.cn/XXXXXXX" feishu = FeiShutalkChatbot(webhook) feishu.send_text("重慶百貨-新世紀魚胡路店內商品'1000800370-牛心白 約1kg'在商詳[8]和榜單[7]中排名不一致")

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM