项目展示
钉钉上添加自定义机器人
在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。点击“完成添加”。
点击“复制”按钮,即可获得这个机器人对应的Webhook地址,其格式如下
https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx
使用自定义机器人
获取到Webhook地址后,用户可以使用任何方式向这个地址发起HTTP POST 请求,即可实现给该群组发送消息。注意,发起POST请求时,必须将字符集编码设置成UTF-8。
当前自定义机器人支持文本(text)、连接(link)、markdown(markdown)三种消息类型,大家可以根据自己的使用场景选择合适的消息类型,达到最好的展示样式。具体的消息类型参考下一节内容。
自定义机器人发送消息时,可以通过手机号码指定“被@人列表”。在“被@人列表”里面的人员,在收到该消息时,会有@消息提醒(免打扰会话仍然通知提醒,首屏出现“有人@你”)
消息类型及数据格式(数据以字典形式存储)
text类型
{
"msgtype": "text",
"text": {
"content": "我就是我, 是不一样的烟火"
},
"at": {
"atMobiles": [
"156xxxx8827",
"189xxxx8325"
],
"isAtAll": false
}
}
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
msgtype | String | 是 | 消息类型,此时固定为:text |
content | String | 是 | 消息内容 |
atMobiles | Array | 否 | 被@人的手机号 |
isAtAll | bool | 否 | @所有人时:true,否则为:false |
link类型
{
"msgtype": "link",
"link": {
"text": "这个即将发布的新版本,创始人陈航(花名“无招”)称它为“红树林”。
而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是“红树林”?",
"title": "时代的火车向前开",
"picUrl": "",
"messageUrl": "https://mp.weixin.qq.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI"
}
}
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
msgtype | String | 是 | 消息类型,此时固定为:link |
title | String | 是 | 消息标题 |
text | String | 是 | 消息内容。如果太长只会部分展示 |
messageUrl | String | 是 | 点击消息跳转的URL |
picUrl | String | 否 | 图片URL |
markdown类型
{
"msgtype": "markdown",
"markdown": {
"title":"杭州天气",
"text": "#### 杭州天气\n" +
"> 9度,西北风1级,空气良89,相对温度73%\n\n" +
"> ![screenshot](http://image.jpg)\n" +
"> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n"
}
}
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
msgtype | true | string | 此消息类型为固定markdown |
title | true | string | 首屏会话透出的展示内容 |
text | true | string | markdown格式的消息 |
说明:目前只支持md语法的子集,具体支持的元素如下:
标题
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
引用
> A man who stands for nothing will fall for anything.
文字加粗、斜体
**bold**
*italic*
链接
[this is a link](http://name.com)
图片
![](http://name.com/pic.jpg)
无序列表
- item1
- item2
有序列表
1. item1
2. item2
iOS 代码实现(以text类型为例子)
这里需要注意的是创建请求对象后需要设置HTTPHeaderField
,否则会请求报错。
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
POST同步请求
// 1.设置请求路径
NSURL *URL=[NSURL URLWithString:kAccessToken];//不需要传递参数
// 2.创建请求对象
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:URL];//默认为get请求
request.timeoutInterval=5.0;//设置请求超时为5秒
request.HTTPMethod=@"POST";//设置请求方法
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
//设置请求体
NSMutableDictionary *contentDic = [[NSMutableDictionary alloc] init];
[contentDic setObject:[NSString stringWithFormat:@"%@",self.contentTextView.text] forKey:@"content"];
[self.infoDic setObject:@"text" forKey:@"msgtype"];
[self.infoDic setObject:contentDic forKey:@"text"];
if (self.switchAllPeople.on) {
[self.infoDic setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"true",@"isAtAll", nil] forKey:@"at"];
}else {
[self.infoDic setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"false",@"isAtAll", nil] forKey:@"at"];
}
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self.infoDic options:NSJSONWritingPrettyPrinted error:&error];
//把拼接后的字符串转换为data,设置请求体
request.HTTPBody=jsonData;
//第三步,连接服务器
NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *str1 = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
NSLog(@"error = %@ \n 返回信息 = %@",error,str1);
POST 异步请求
NSMutableDictionary *contentDic = [[NSMutableDictionary alloc] init];
[contentDic setObject:[NSString stringWithFormat:@"%@",self.contentTextView.text] forKey:@"content"];
[self.infoDic setObject:@"text" forKey:@"msgtype"];
[self.infoDic setObject:contentDic forKey:@"text"];
if (self.switchAllPeople.on) {
[self.infoDic setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"true",@"isAtAll", nil] forKey:@"at"];
}else {
[self.infoDic setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"false",@"isAtAll", nil] forKey:@"at"];
}
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self.infoDic options:NSJSONWritingPrettyPrinted error:&error];
NSURL *url = [NSURL URLWithString:kAccessToken];
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url];
[req setHTTPMethod:@"POST"];
[req setHTTPBody:jsonData];
[req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[NSURLConnection connectionWithRequest:req delegate:self];
工程完整实现text类型、link类型、markdown类型等信息的发送
码云项目工程下载
Github工程项目下载