钉钉stream机器人-实操详细教程

支持事件订阅、机器人收消息、卡片回调等功能

优点:

配置简单,不依赖也不需要暴露公网IP,无需向公网开放端口

github官方链接:GitHub - open-dingtalk/dingtalk-stream-sdk-python: Python SDK for DingTalk Stream Mode API, Compared with the webhook mode, it is easier to access the DingTalk chatbot

安装

pip install dingtalk-stream

pip install alibabacloud_dingtalk

也可以下载SDK安装包

下载地址:https://open-dev.dingtalk.com/sdk/download/python

选择

进入钉钉开发者后台,创建企业内部应用,获取ClientID(即 AppKey)和ClientSecret( 即AppSecret)。 

 下载完github代码后,在编译器终端进入

cd examples/calcbot
python calcbot.py --client_id "put-your-client-id-here" --client_secret "put-your-client-secret-here"

# !/usr/bin/env python

import argparse
import logging
from dingtalk_stream import AckMessage
import dingtalk_stream

def setup_logger():
    logger = logging.getLogger()
    handler = logging.StreamHandler()
    handler.setFormatter(
        logging.Formatter('%(asctime)s %(name)-8s %(levelname)-8s %(message)s [%(filename)s:%(lineno)d]'))
    logger.addHandler(handler)
    logger.setLevel(logging.INFO)
    return logger


def define_options():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '--client_id', dest='client_id', required=True,
        help='app_key or suite_key from https://open-dev.digntalk.com'
    )
    parser.add_argument(
        '--client_secret', dest='client_secret', required=True,
        help='app_secret or suite_secret from https://open-dev.digntalk.com'
    )
    options = parser.parse_args()
    return options


class CalcBotHandler(dingtalk_stream.ChatbotHandler):
    def __init__(self, logger: logging.Logger = None):
        super(dingtalk_stream.ChatbotHandler, self).__init__()
        if logger:
            self.logger = logger

    async def process(self, callback: dingtalk_stream.CallbackMessage):
        incoming_message = dingtalk_stream.ChatbotMessage.from_dict(callback.data)
        expression = incoming_message.text.content.strip()
        try:
            result = eval(expression)
        except Exception as e:
            result = 'Error: %s' % e
        self.logger.info('%s = %s' % (expression, result))
        response = 'Q: %s\nA: %s' % (expression, result)
        self.reply_text(response, incoming_message)

        return AckMessage.STATUS_OK, 'OK'

def main():
    logger = setup_logger()
    options = define_options()

    credential = dingtalk_stream.Credential(options.client_id, options.client_secret)
    client = dingtalk_stream.DingTalkStreamClient(credential)
    client.register_callback_handler(dingtalk_stream.chatbot.ChatbotMessage.TOPIC, CalcBotHandler(logger))
    client.start_forever()


if __name__ == '__main__':
    main()

测试效果:

### 使用钉钉 Stream API 开发指南 #### 获取依赖库 为了能够顺利使用钉钉 Stream API,在 Python 项目中需要安装对应的 SDK。可以通过 GitHub 上的官方仓库来获取最新的 `dingtalk-stream-sdk-python` 库[^1]。 ```bash pip install git+https://github.com/open-dingtalk/dingtalk-stream-sdk-python.git ``` #### 初始化客户端并设置参数 在开始之前,确保已经准备好应用的 AppID 和 AppSecret。接着通过这两个凭证初始化 SecretClient 实例用于后续操作: ```python from dingtalk.client import SecretClient client = SecretClient(app_key='your_app_id', app_secret='your_app_secret') ``` #### 认证过程 认证环节对于访问受保护资源至关重要。通常情况下会先请求获得临时票据(即 access token),之后再利用此令牌发起其他业务逻辑调用。下面展示了一个简单的函数用来获取 access_token: ```python import requests def get_access_token(): response = requests.get( 'https://oapi.dingtalk.com/gettoken', params={'appid': DINGTALK_APP_ID, 'appsecret': DINGTALK_APP_SECRET} ) result = response.json() return result['access_token'] ``` 需要注意的是上述代码片段仅适用于普通的企业内部应用授权方式;而对于更复杂的场景比如 ISV 类型的应用,则可能涉及到更多鉴权流程,请参照官方文档说明进行调整[^2]。 #### 发送消息至聊天机器人 当完成了前面几步准备工作后就可以尝试向指定群组内的聊天机器人发送信息了。这里给出一段基础的消息推送示例代码: ```python def send_message_to_robot(access_token,message): url = f"https://oapi.dingtalk.com/robot/send?access_token={access_token}" headers = { "Content-Type": "application/json" } payload = {"msgtype":"text","text":{"content":message}} res = requests.post(url,json=payload,headers=headers).json() if not res["errcode"]: print("Message sent successfully.") else: raise Exception(f"Failed to send message: {res}") ``` 以上就是基于 Python 的钉钉 Stream API 基础入门介绍以及部分功能实现案例。实际应用场景可能会更加复杂多变,建议开发者们深入研究官方提供的资料以满足特定需求[^3]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值