Python调用飞书发送消息的示例


Posted in Python onNovember 10, 2020

一、创建飞书机器人  

自定义飞书机器人操作步骤,具体详见飞书官方文档:《机器人 | 如何在群聊中使用机器人?》

二、调用飞书发送消息

自定义机器人添加完成后,就能向其 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 = "https://open.feishu.cn/open-apis/bot/v2/hook/1d7b5d0c-03a5-44a9-8d7a-4d09b24bfea1"
  feishu = FeiShutalkChatbot(webhook)
  feishu.send_text("重庆百货-新世纪鱼胡路店内商品'1000800370-牛心白 约1kg'在商详[8]和榜单[7]中排名不一致")

以上就是Python调用飞书发送消息的示例的详细内容,更多关于python 飞书发送信息的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 Python
Python FTP操作类代码分享
May 13 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
python计算方程式根的方法
May 07 Python
简介Python中用于处理字符串的center()方法
May 18 Python
使用Turtle画正螺旋线的方法
Sep 22 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
Python使用win32 COM实现Excel的写入与保存功能示例
May 03 Python
FFrpc python客户端lib使用解析
Aug 24 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
Nov 02 Python
Django-celery-beat动态添加周期性任务实现过程解析
Nov 26 Python
python中pyplot基础图标函数整理
Nov 10 #Python
python图片合成的示例
Nov 09 #Python
python 实现&quot;神经衰弱&quot;翻牌游戏
Nov 09 #Python
Python字典dict常用方法函数实例
Nov 09 #Python
Python实现哲学家就餐问题实例代码
Nov 09 #Python
使用Python实现NBA球员数据查询小程序功能
Nov 09 #Python
Python暴力破解Mysql数据的示例
Nov 09 #Python
You might like
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
python模拟鼠标拖动操作的方法
2015/03/11 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
Python内置函数—vars的具体使用方法
2017/12/04 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
Python画图实现同一结点多个柱状图的示例
2019/07/07 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
Python常驻任务实现接收外界参数代码解析
2020/07/21 Python
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
超市优秀员工事迹材料
2014/05/01 职场文书
询价采购方案
2014/06/09 职场文书
国际政治学专业推荐信
2014/09/26 职场文书
英文升职感谢信
2015/01/23 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python
java设计模式--原型模式详解
2021/07/21 Java/Android
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技