首先看下官方文档,为我们提供了POST请求地址,和几个必传参数的列表以及参数示例,写的都挺详细的。

无奈提供的SDK请求示例是JAVA的,而我用的是.NET的,所以还是摸了一些坑出来,其实也就是不同平台的部分方法或者语法不同而已,调试好一个接口后,后面再调试其他接口就会快很多了。

调用淘宝接口,我看到的几个哥们,用的都是这个URL地址:https://eco.taobao.com/router/rest

相应代码如下:

         /// <summary>
/// 工作通知消息(淘宝URL)
/// </summary>
/// <returns></returns>
public JsonResult SendWorkMessage()
{
//判断缓存中是否有access_token,否则重新获取
var access_token = CacheHelper.GetCache("access_token");
if (access_token == null)
{
DingDevelopSDK developSDK = new DingDevelopSDK();
access_token = developSDK.Get_access_token_by_appkey_and_appsecret(Models.DingDingConfig.appkey, Models.DingDingConfig.appsecret);
}
IDingTalkClient client = new DefaultDingTalkClient("https://eco.taobao.com/router/rest");
CorpMessageCorpconversationAsyncsendRequest req = new CorpMessageCorpconversationAsyncsendRequest();
req.Msgtype = "oa"; //发送消息是以oa的形式发送的,其他的还有text,image等形式
req.AgentId = Models.DingDingConfig.agentId;
req.UseridList = "manager1805";
req.ToAllUser = false; //是否发给所有人,很重要,为true的时候,一天只能调用3次该接口
req.Msgcontent = "{\"message_url\": \"http://dingtalk.com\",\"head\": {\"bgcolor\": \"FFBBBBBB\",\"text\": \"头部标题\"},\"body\": {\"title\": \"测试文本\",\"form\": [{\"key\": \"姓名:\",\"value\": \"张三\"},{\"key\": \"爱好:\",\"value\": \"打球、听音乐\"}],\"rich\": {\"num\": \"15.6\",\"unit\": \"元\"},\"content\": \"淘宝URL\",\"image\": \"@lADOADmaWMzazQKA\",\"file_count\": \"3\",\"author\": \"李四 \"}}";
CorpMessageCorpconversationAsyncsendResponse rsp = client.Execute(req, access_token.ToString());//发送消息
string result = rsp.Body;
// DeBugLog.WriteLog(result);
return Json(new { Result = true, result }, JsonRequestBehavior.AllowGet);
}

调用结果:

接下来是调用官方文档里写的接口:https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=ACCESS_TOKEN。

这里的参数access_token不用写在url里,方法asyncsend_v2是示例代码里调用的,但是在.NET平台下方法和JAVA有些差异,在试过几个类和方法之后,我用的方法是asyncsend,后面没有带"_v2",

所以接口地址就是:https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend。

上代码:

         /// <summary>
/// 工作通知消息(钉钉URL)
/// </summary>
/// <returns></returns>
public JsonResult SendMessage_ByDingDingURL()
{
try {
//判断缓存中是否有access_token,否则重新获取
var access_token = CacheHelper.GetCache("access_token");
if (access_token == null)
{
DingDevelopSDK developSDK = new DingDevelopSDK();
access_token = developSDK.Get_access_token_by_appkey_and_appsecret(Models.DingDingConfig.appkey, Models.DingDingConfig.appsecret);
}
//官网POST地址为https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2,根据方法的不同,下文的URL采用的是asyncsend而不是asyncsend_v2
IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend");
OapiMessageCorpconversationAsyncsendRequest req = new OapiMessageCorpconversationAsyncsendRequest();
req.SetHttpMethod("POST");
req.ToAllUser = false;
req.AgentId = Models.DingDingConfig.agentId;
req.UseridList = "manager1805";
req.Msgtype = "oa";
req.Msgcontent = "{\"message_url\": \"http://dingtalk.com\",\"head\": {\"bgcolor\": \"FFBBBBBB\",\"text\": \"测试001\"},\"body\": {\"title\": \"测试文本\",\"form\": [{\"key\": \"姓名:\",\"value\": \"张三\"},{\"key\": \"爱好:\",\"value\": \"打球、听音乐\"}],\"rich\": {\"num\": \"15.6\",\"unit\": \"元\"},\"content\": \"钉钉URL\",\"image\": \"@lADOADmaWMzazQKA\",\"file_count\": \"3\",\"author\": \"admin \"}}";
OapiMessageCorpconversationAsyncsendResponse response = client.Execute(req, access_token.ToString());
DeBugLog.WriteLog(response.Body);
return Json(new { Result = true }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
DeBugLog.WriteLog(ex);
return Json(new { Result = false }, JsonRequestBehavior.AllowGet);
}
}

结果和上面的是一样的。

这里获取ccess_token的方法我就不累述了,我是直接从缓存里获取的,其他参数的使用要点,要结合文档去使用:

发送工作通知消息需要注意以下事项:

  • 同一个微应用相同消息的内容同一个用户一天只能接收一次。
  • 同一个微应用给同一个用户发送消息,企业内部开发方式一天不得超过500次。
  • 通过设置to_all_user参数全员推送消息,一天最多3次。
  • 详细的限制说明,请参考“工作通知消息的限制”。
  • 该接口是异步发送消息,接口返回成功并不表示用户一定会收到消息,需要通过“查询工作通知消息的发送结果”接口查询是否给用户发送成功。
  • 消息类型和样例可参考消息类型文档。

以上。

.NET平台下,钉钉微应用开发之:工作消息通知的更多相关文章

  1. .NET平台下,钉钉微应用开发之:获取userid

    工作需求,开发钉钉微应用和小程序,之前有接触过支付宝小程序和生活号的开发,流程没有很大的差别,这里记录下我用ASP.NET MVC实现钉钉微应用的开发,并实现获取用户的userid.小弟我技术有限,本 ...

  2. 在. net平台下,推送IOS,Android,Windows Phone消息

    1,新建项目,在项目中添加引用,dll文件已经上传在百度网盘,点击下载 2,引入命名空间 using PushSharp; using PushSharp.Android; using PushSha ...

  3. 移动端开发之APP消息推送

    有这样一种场景,当你在手机APP上输入你的信息,会自动跳出一个弹窗,表示某任务已执行.最简单的一个例子就是当你输入手机号,点击获取验证码的时候,就会跳出一个对话框,说“验证码已发送到手机,请注意查收” ...

  4. AESDK开发之UI消息响应

    UI创建: 在该入口下 case PF_Cmd_PARAMS_SETUP: //.... break; 必须在末尾指定UI数目,UI数目一般是枚举,如果和枚举长度不一致也会报错.所以最好是直接修改枚举 ...

  5. AspectJ的XML方式完成AOP的开发之AOP的通知类型

    1. 前置通知 * 在目标类的方法执行之前执行. * 配置文件信息:<aop:after method="before" pointcut-ref="myPoint ...

  6. 钉钉开发入门,微应用识别用户身份,获取用户免登授权码code,获取用户userid,获取用户详细信息

    最近有个需求,在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份去企业内部的用户中心做校验,校验通过,相关子系统直接登陆; 就是在获取这个用户身份的时候,网上的资料七零八落的,找的人烦躁的很,所 ...

  7. 用java实现“钉钉微应用,免登进入某H5系统首页“功能”

    一.前言 哈哈,这是我的第一篇博客. 先说一下这个小功能的具体场景: 用户登录钉钉app,点击微应用,获取当前用户的信息,与H5系统的数据库的用户信息对比,如果存在该用户,则点击后直接进入H5系统的首 ...

  8. 钉钉开发第三方H5微应用入门详细教程[ISV][免登流程][授权码][HTTP回调推送][识别用户身份][获取用户信息]

    转载请注明原文地址:https://www.cnblogs.com/applerosa/p/11509512.html (by lnexin@aliyun.com 世间草木) 此教程注意点: 适用于第 ...

  9. 从钉钉微应用定制化导航栏看如何实现Hydrid App开发框架

    钉钉是阿里的一款企业应用APP,里面提供了混合微应用的SDK,这其实最好的一种APP架构模式.微信公众号浏览器JSSDK也提供了类似功能特性,在在交互性上没有钉钉深入. http://ddtalk.g ...

随机推荐

  1. C#汽车租赁系统 完整版

      Truck.cs类 //卡车类 public class Truck : Vehicle1 { //重载 public int Load { get; set; } //构造函数 public T ...

  2. IrisSkin2.dll 添加皮肤

    使用说明:把控件拖到你的form上,只需一行代码,即可实现整个form包括其所有控件的皮肤的更换,总共有几十套皮肤供使用,非常方便.省去你设计开发软件皮肤系统的时间和精力.全部源代码就一行: skin ...

  3. java反射原理及Class应用

    反射:框架设计灵魂 框架:半成品软件,可以在框架基础上进行软件开发,简化编码 反射:将类的各个组成部分封装我其他对象,这就是反射机制 好处:  1.可以在程序运行过程中,操作这些对象  2.可以解耦, ...

  4. 【Android】java.lang.SecurityException: getDeviceId: Neither user 10065 nor current process has android.permission.READ_PHONE_STATE

    RT, 异常信息如下: java.lang.SecurityException: getDeviceId: Neither user 10065 nor current process has and ...

  5. 【iOS】file not found: .../Build/Products/Debug-iphonesimulator file not found

    今天又遇到了这个问题: ld: file not found: /Users/***/Library/Developer/Xcode/DerivedData/***-dfscappaygvbougtb ...

  6. oracle的本地远程连接和配置

    Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍. 第一种情况: 若oracle服务器装在本机上,那就不多说了, ...

  7. strus 上传文件

    (1) action代码 package comSys.struts.articleManager; import java.io.File; import java.io.FileInputStre ...

  8. css3加js做一个简单的3D行星运转效果

    前几天在园子里看到一篇关于CSS3D行星运转的文章,原文在这里,感觉这个效果也太酷炫了,于是自己也就心血来潮的来尝试的做了一下.因为懒得去用什么插件了,于是就原生的JS写,效果有点粗超,还有一些地方处 ...

  9. java代码之美(13)--- Predicate详解

    java代码之美(13)--- Predicate详解 遇到Predicate是自己在自定义Mybatis拦截器的时候,在拦截器中我们是通过反射机制获取对象的所有属性,再查看这些属性上是否有我们自定义 ...

  10. SpringBoot第一天

    一,SpringBoot 介绍 1,如果使用 Spring 开发一个"HelloWorld"的 web 应用: • 创建一个 web 项目并且导入相关 jar 包.SpringMV ...