首先看下官方文檔,為我們提供了POST請求地址,和幾個必傳參數的列表以及參數示例,寫的都挺詳細的。
無奈提供的SDK請求示例是JAVA的,而我用的是.NET的,所以還是摸了一些坑出來,其實也就是不同平台的部分方法或者語法不同而已,調試好一個接口后,后面再調試其他接口就會快很多了。
調用淘寶接口,我看到的幾個哥們,用的都是這個URL地址:https://eco.taobao.com/router/rest
相應代碼如下:
1 /// <summary> 2 /// 工作通知消息(淘寶URL) 3 /// </summary> 4 /// <returns></returns> 5 public JsonResult SendWorkMessage() 6 { 7 //判斷緩存中是否有access_token,否則重新獲取 8 var access_token = CacheHelper.GetCache("access_token"); 9 if (access_token == null) 10 { 11 DingDevelopSDK developSDK = new DingDevelopSDK(); 12 access_token = developSDK.Get_access_token_by_appkey_and_appsecret(Models.DingDingConfig.appkey, Models.DingDingConfig.appsecret); 13 } 14 IDingTalkClient client = new DefaultDingTalkClient("https://eco.taobao.com/router/rest"); 15 CorpMessageCorpconversationAsyncsendRequest req = new CorpMessageCorpconversationAsyncsendRequest(); 16 req.Msgtype = "oa"; //發送消息是以oa的形式發送的,其他的還有text,image等形式 17 req.AgentId = Models.DingDingConfig.agentId; 18 req.UseridList = "manager1805"; 19 req.ToAllUser = false; //是否發給所有人,很重要,為true的時候,一天只能調用3次該接口 20 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\": \"李四 \"}}"; 21 CorpMessageCorpconversationAsyncsendResponse rsp = client.Execute(req, access_token.ToString());//發送消息 22 string result = rsp.Body; 23 // DeBugLog.WriteLog(result); 24 return Json(new { Result = true, result }, JsonRequestBehavior.AllowGet); 25 }
調用結果:
接下來是調用官方文檔里寫的接口: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。
上代碼:
1 /// <summary> 2 /// 工作通知消息(釘釘URL) 3 /// </summary> 4 /// <returns></returns> 5 public JsonResult SendMessage_ByDingDingURL() 6 { 7 try { 8 //判斷緩存中是否有access_token,否則重新獲取 9 var access_token = CacheHelper.GetCache("access_token"); 10 if (access_token == null) 11 { 12 DingDevelopSDK developSDK = new DingDevelopSDK(); 13 access_token = developSDK.Get_access_token_by_appkey_and_appsecret(Models.DingDingConfig.appkey, Models.DingDingConfig.appsecret); 14 } 15 //官網POST地址為https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2,根據方法的不同,下文的URL采用的是asyncsend而不是asyncsend_v2 16 IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend"); 17 OapiMessageCorpconversationAsyncsendRequest req = new OapiMessageCorpconversationAsyncsendRequest(); 18 req.SetHttpMethod("POST"); 19 req.ToAllUser = false; 20 req.AgentId = Models.DingDingConfig.agentId; 21 req.UseridList = "manager1805"; 22 req.Msgtype = "oa"; 23 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 \"}}"; 24 OapiMessageCorpconversationAsyncsendResponse response = client.Execute(req, access_token.ToString()); 25 DeBugLog.WriteLog(response.Body); 26 return Json(new { Result = true }, JsonRequestBehavior.AllowGet); 27 } 28 catch (Exception ex) 29 { 30 DeBugLog.WriteLog(ex); 31 return Json(new { Result = false }, JsonRequestBehavior.AllowGet); 32 } 33 }
結果和上面的是一樣的。
這里獲取ccess_token的方法我就不累述了,我是直接從緩存里獲取的,其他參數的使用要點,要結合文檔去使用:
發送工作通知消息需要注意以下事項:
- 同一個微應用相同消息的內容同一個用戶一天只能接收一次。
- 同一個微應用給同一個用戶發送消息,企業內部開發方式一天不得超過500次。
- 通過設置to_all_user參數全員推送消息,一天最多3次。
- 詳細的限制說明,請參考“工作通知消息的限制”。
- 該接口是異步發送消息,接口返回成功並不表示用戶一定會收到消息,需要通過“查詢工作通知消息的發送結果”接口查詢是否給用戶發送成功。
- 消息類型和樣例可參考消息類型文檔。
以上。