美文网首页
钉钉自定义机器人 iOS 实现

钉钉自定义机器人 iOS 实现

作者: 山水域 | 来源:发表于2017-03-17 16:32 被阅读1686次

    项目展示

    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工程项目下载

    相关文章

      网友评论

          本文标题:钉钉自定义机器人 iOS 实现

          本文链接:https://www.haomeiwen.com/subject/gpienttx.html