钉钉自定义机器人 iOS 实现

项目展示

Snip20170317_19.png

Snip20170317_20.png

Snip20170317_21.png

Snip20170317_22.png

钉钉上添加自定义机器人

在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。点击“完成添加”。

群主才能添加机器人

群主才能添加机器人

点击“复制”按钮,即可获得这个机器人对应的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工程项目下载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,652评论 0 15
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 23,687评论 8 183
  • 你们回家了 好多人一起回的 回家的时候正巧是初雪 石榴树的花已经开过了 花开的时候,我还在 我也要回家了,火车很长...
    蟋蟀王阅读 176评论 0 4
  • 我热爱手工,喜欢做可爱的发饰,喜欢给姑娘做漂亮的衣服,喜欢做姑娘的礼服!想拥有属于自己的一间工作室,里面摆满了架子...
    ad06e9b91f35阅读 298评论 0 0