钉钉 机器人接入 自定义webhook

钉钉出了个webhook机器人接入,自定义的机器人支持随时post消息到群里;

昨天就尝试着用C#写了个;

 一开始用python写,但是莫名的提示  {"errmsg":"param error","errcode":300001}   错误,估计是某个参数不对,或者格式不争气;

 

顺带附上exe和工程源码,需要的同学可以下载;  

 代码烂莫喷哈~~

 http://files.cnblogs.com/files/left69/机器人code.rar

 

打包好的 exe:

http://files.cnblogs.com/files/left69/机器人exe.rar

 

贴上C#的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.IO.Compression;
using System.Text.RegularExpressions;

namespace 机器人
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string paraUrlCoded = "{\"msgtype\":\"text\",\"text\":{\"content\":\"";
            paraUrlCoded += textBox2.Text;
            paraUrlCoded += "\"}}";
            Post(paraUrlCoded);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string paraUrlCoded = "{\"msgtype\": \"link\", \"link\": {\"text\": \"我的博客:欢迎光临\", \"title\": \"推广博客啦,机器人开发者\", \"picUrl\": \"\", \"messageUrl\": \"http://www.cnblogs.com/left69/\"}}";
            Post(paraUrlCoded);
        }

        private void Post(string paraUrlCoded)
        {
            string url = textBox1.Text;
            string strURL = url;
            System.Net.HttpWebRequest request;
            request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
            request.Method = "POST";
            request.ContentType = "application/json;charset=UTF-8";

            byte[] payload;
            payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
            request.ContentLength = payload.Length;
            Stream writer = request.GetRequestStream();
            writer.Write(payload, 0, payload.Length);
            writer.Close();
            System.Net.HttpWebResponse response;
            response = (System.Net.HttpWebResponse)request.GetResponse();
            System.IO.Stream s;
            s = response.GetResponseStream();
            string StrDate = "";
            string strValue = "";
            StreamReader Reader = new StreamReader(s, Encoding.UTF8);
            while ((StrDate = Reader.ReadLine()) != null)
            {
                strValue += StrDate + "\r\n";
            }
            label3.Text = strValue;
        }
    }
}

 

 

******************************************************************************************

后面贴一段 python的代码:大家可以研究下为啥post失败  (看后面,已改)

# -*- coding: cp936 -*-
import urllib2
import urllib
 
#定义一个要提交的数据数组(字典)
data = {
    "msgtype": "text",
    "text": {
        "content": "我就是我来了"
    }
}
#定义post的地址
url = 'https://oapi.dingtalk.com/robot/send?access_token=1cc4cb4cdda998ecc50d4b6f2a12cba311766743506d0ef251e09da3321ff776'
post_data = urllib.urlencode(data)
 
#提交,发送数据
req = urllib2.urlopen(url, post_data)
 
#获取提交后返回的信息
content = req.read()

print content

 

/************************************原因出来了,是没有加 head

 

/************************************正确

import requests
import json
import urllib.parse
url = 'https://oapi.dingtalk.com/robot/send?access_token=1cc4cb4cdda998ecc50d4b6f2a12cba311766743506d0ef251e09da3321ff776'
HEADERS = {
"Content-Type": "application/json ;charset=utf-8 "
}
String_textMsg = {\
"msgtype": "text",\
"text": {"content": '我就是我来了2'}}
String_textMsg = json.dumps(String_textMsg)
res = requests.post(url, data=String_textMsg, headers=HEADERS)
print(res.text)

转载于:https://www.cnblogs.com/left69/p/6483153.html

<think>嗯,用户问的是如何接入钉钉机器人,我需要一步步解释清楚。首先,我得确定用户的使用场景,可能是企业或团队需要自动化通知,比如监控报警、任务提醒之类的。用户可能是开发人员或者管理员,需要技术指导。 首先,应该从创建钉钉机器人开始。要说明在钉钉群设置里找到智能群助手,然后添加机器人。这里需要详细步骤,比如选择自定义机器人,设置名字和安全设置。安全设置部分很重要,要解释加签和IP地址两种方式,以及如何生成签名。 然后,获取Webhook地址,用户需要这个地址来发送消息。接下来要给出一个发送消息的示例,用Python代码比较通用。代码里要包含时间戳和签名的生成方法,特别是加签的部分,因为用户可能在这里容易出错。还要提醒用户替换关键参数,比如access_token和secret。 最后,可能还需要提到注意事项,比如消息类型和支持的格式,以及安全建议。用户可能还想知道更多高级功能,比如不同消息类型的使用,或者如何优化通知。这部分可以作为扩展,但先确保基本流程清晰。</think>好的,我将分步骤为您讲解如何接入钉钉机器人: 一、创建钉钉机器人 1. 打开钉钉群设置 - 进入目标钉钉群 → 右上角「群设置」→「智能群助手」 2. 添加机器人 - 选择「添加机器人」→「自定义机器人」 - 设置机器人名称(例:监控报警机器人) - 选择安全设置(推荐以下两种): $$ \text{加签(Secret)}:需保存生成的密钥 $$ $$ \text{IP地址(段)}:限制调用来源IP $$ 3. 获取Webhook地址 - 创建完成后会生成类似URL: $$ \text{https://oapi.dingtalk.com/robot/send?access_token=xxxxxx} $$ 二、发送消息示例(Python) ```python import requests import time import hmac import hashlib import base64 import urllib.parse def send_dingtalk_message(): # 配置参数 access_token = "your_token" secret = "your_secret" timestamp = str(round(time.time() * 1000)) # 生成签名 secret_enc = secret.encode('utf-8') string_to_sign = f"{timestamp}\n{secret}" string_to_sign_enc = string_to_sign.encode('utf-8') hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) # 构造请求URL webhook = f"https://oapi.dingtalk.com/robot/send?access_token={access_token}&timestamp={timestamp}&sign={sign}" # 发送消息 headers = {"Content-Type": "application/json"} data = { "msgtype": "text", "text": { "content": "服务器CPU使用率超过90%!" } } response = requests.post(webhook, json=data, headers=headers) return response.json() ``` 三、注意事项 1. 消息类型支持: - Text(文本) - Markdown - Link(链接) - ActionCard(交互卡片) 2. 频率限制: $$ \text{每个机器人每分钟最多发送20条消息} $$ 3. 安全建议: - 优先使用加签方式 - 敏感信息建议加密传输 - 生产环境推荐绑定IP白名单 扩展应用场景: - 系统监控报警(如:使用Zabbix+钉钉机器人) - CI/CD流水线通知 - 每日报表推送 - 审批流程提醒 建议测试时先用测试群,验证消息格式和接收情况后再部署到生产环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值