python开发钉钉机器人|(1)上线发布、自动回复

准备工作

1.钉钉账号

2.公网域名

3.后端代码

4.钉钉开放文档及sdk依赖

 

正文

1.钉钉账号>>创建一个企业>>创建企业内机器人

自定义机器人只支持广播(纯发消息),对话需要企业内机器人;

钉钉创建企业就像拉群差不多,没有什么限制条件,起个名字就行。已经在企业中的用户也可以自由加入别的企业,不冲突。

2.支持HTTP的域名

这块小白比较难理解,并不是买了一个域名就ok了,后续后端的所有服务是要在这里的,我使用的是花生壳映射。

参照这个教程【花生壳:将内网端口映射到外网

到这里都是免费的哈,不需要买域名。花生壳的限制就是免费的网速和映射数量有限,测试用用还行,正经跑服务还得想别的招。后续有条件的话准备上云吧。

 

3.后端代码

框架看的是b站的课程,参考【Python 从0快速制作Web服务器】01-课程介绍、web服务器的介绍_哔哩哔哩_bilibili

这个监听代码写好后,关掉测试花生壳时候使用的TCP工具,将对应内网端口写好,先把后端服务跑起来,然后用花生壳客户端检查一下隧道是否打通,再把公网地址贴到钉钉后台消息接收地址去,收到HTTP/1.1 200 OK之后这个页面就可以保存了。

4.钉钉开放文档及sdk依赖

参考钉钉官方文档,申请想要的业务功能的权限,比如说单聊收发消息这种。

下载sdk依赖。

# 按照官方提示 安装
pip install alibabacloud_dingtalk

完整代码如下

主程序,是在监听代码里加的,后续还需要完善定时任务的模块,因为token会过期。协程啥的我不会,所以还没写。

import socket, json, sys, random, re
# 这些大家都熟悉
from typing import List

from alibabacloud_dingtalk.robot_1_0.client import Client as dingtalkrobot_1_0Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dingtalk.robot_1_0 import models as dingtalkrobot__1__0_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
# 这部分是钉钉sdk提供的,需要pip下载后使用

from getAccessToken import Sample as Geter
# 这部分是单独写的,见下一个代码块

reply_rand=[
    '家人们谁懂啊~~~',
    '没关系,又活了一天',
    '美好的一天从比奇堡开始',
    '多喝热水',
    '沉浸式体验人工智障陪你办公'
]  # 随机回复的语句库

def main():
    # 1 创建套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 2 绑定本地端口
    server_socket.bind(("", 1111))  # 传入元组,第一个值为空串,代表本机ip,第二个值为本机端口号
    # 3 变为监听套接字
    server_socket.listen(128)
    while True:
        # 4 等待对方链接
        son_socket, son_addr = server_socket.accept()
        # 4.1 接收数据
        request = son_socket.recv(1024).decode("utf-8")
        print(request)
        if request.find("senderStaffId") != -1:
            request_cont = re.search(r"{\"conversationId\".*.\"text\"}", request).group()  # 正则 我不懂
            message = json.loads(request_cont)
            user_ids = [message["senderStaffId"]]  # 提取用户的id,以便给他回复
            words = random.choice(reply_rand)
            print(words)
            Sample.main(sys.argv[1:], words=words, user_ids=user_ids,token=token)
        # 4.2 解析、提取文件 不管用户传什么,都返回一个hello
        # 4.3 读取文件数据
        response_header = "HTTP/1.1 200 OK\r\n"
        response_header += "\r\n"
        response_body = "hello"
        response = response_header + response_body
        # 4.4 返回给浏览器
        son_socket.send(response.encode("utf-8"))
        # 4.5 关闭套接字 注意只关子套接字
        son_socket.close()


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> dingtalkrobot_1_0Client:
        """
        使用 Token 初始化账号Client
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config()
        config.protocol = 'https'
        config.region_id = 'central'
        return dingtalkrobot_1_0Client(config)

    def main(
            args: List[str], words, user_ids,token,
    ) -> None:
        client = Sample.create_client()
        batch_send_otoheaders = dingtalkrobot__1__0_models.BatchSendOTOHeaders()
        batch_send_otoheaders.x_acs_dingtalk_access_token = token
        batch_send_otorequest = dingtalkrobot__1__0_models.BatchSendOTORequest(
            msg_param='{       "content":  "%s"  }' %words,
            msg_key='sampleText',  # 回复文本类型的消息,都写这个
            robot_code='XXXXXXXXXX', # 每个机器人(应用)不一样,需要自己抓一个请求看一下,贴出来就行
            user_ids=user_ids  # 即便只有1个也要以列表传入,此处是根据用户发消息来,谁发的给谁回复
        )
        try:
            client.batch_send_otowith_options(batch_send_otorequest, batch_send_otoheaders,
                                              util_models.RuntimeOptions())
        except Exception as err:
            if not UtilClient.empty(err.code) and not UtilClient.empty(err.message):
                print(err)
                pass

if __name__ == '__main__':
    token_response = Geter.main(sys.argv[1:])
    token = getattr(getattr(token_response, 'body'), 'access_token')  # 回来的数据类型比较奇怪,我看不懂,找了半天怎么取值,哪位大佬有更好看的写法请一定告诉我。。。
    main()

以上部分是填好对应参数,到时候run起来的。

下一部分是以导包形式引入的。这个是官方的示例代码几乎未做修改,

import sys

from typing import List

from alibabacloud_dingtalk.oauth2_1_0.client import Client as dingtalkoauth2_1_0Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dingtalk.oauth2_1_0 import models as dingtalkoauth_2__1__0_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> dingtalkoauth2_1_0Client:
        """
        使用 Token 初始化账号Client
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config()
        config.protocol = 'https'
        config.region_id = 'central'
        return dingtalkoauth2_1_0Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        get_access_token_request = dingtalkoauth_2__1__0_models.GetAccessTokenRequest(
            app_key='XXXXXXXX',
            app_secret='YYYYYYYYYY'  # 申请应用后,去后台贴一下
        )
        try:
            a = client.get_access_token(get_access_token_request)
            return a
        except Exception as err:
            if not UtilClient.empty(err.code) and not UtilClient.empty(err.message):
                # err 中含有 code 和 message 属性,可帮助开发定位问题
                # 不知道哪报错了就在这print一下,钉钉服务器给的回复都很详细
                pass

if __name__ == '__main__':
    a = Sample.main(sys.argv[1:])
    print(a)  # 测试用的

以上就是100行以内代码搞定钉钉自动回复机器人部署的全部内容。

主要都是复制粘贴的,原创代码不到10行哈哈哈。

感谢大家喜欢,我继续学习。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在Python中创建钉钉机器人,可以按照以下步骤进行操作: 1. 首先,需要在钉钉中创建一个群消息机器人。可以参考\[1\]中的钉钉机器人的创建方法。 2. 在Python中,可以使用requests库发送HTTP请求来调用钉钉机器人的接口。可以参考\[3\]中的代码示例。 3. 在代码中,需要提供机器人的webhook地址,这是用来接收消息的URL。可以在钉钉机器人的创建过程中获取到webhook地址。 4. 根据需要,可以选择不同的消息类型进行发送,如基础text类型信息、markdown格式文本、@功能、网页链接、ActionCard类型消息或FeedCard类型消息。可以参考\[1\]中的钉钉机器人的调用方法。 5. 编写代码发送消息,并将消息内容作为参数传递给钉钉机器人的接口。 下面是一个示例代码,用于发送一个基础text类型的消息到钉钉机器人: ```python import requests def send_dingding_message(message, webhook): data = { "msgtype": "text", "text": { "content": message } } response = requests.post(webhook, json=data) if response.status_code == 200: print("消息发送成功") else: print("消息发送失败") webhook = "your_webhook_url" message = "Hello, World!" send_dingding_message(message, webhook) ``` 请将"your_webhook_url"替换为你自己的钉钉机器人的webhook地址。这段代码将发送一个内容为"Hello, World!"的文本消息到钉钉机器人。 希望这个示例能帮助你创建钉钉机器人。如果需要其他类型的消息发送方法,请参考\[1\]中的钉钉机器人的调用方法。 #### 引用[.reference_title] - *1* *2* *3* [Python笔记:钉钉机器人使用方法](https://blog.csdn.net/codename_cys/article/details/107850101)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值