1. 程式人生 > >.NET平臺下,釘釘微應用開發之:工作訊息通知

.NET平臺下,釘釘微應用開發之:工作訊息通知

 

 

首先看下官方文件,為我們提供了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次。
  • 詳細的限制說明,請參考“工作通知訊息的限制”。
  • 該介面是非同步傳送訊息,介面返回成功並不表示使用者一定會收到訊息,需要通過“查詢工作通知訊息的傳送結果”介面查詢是否給使用者傳送成功。
  • 訊息型別和樣例可參考訊息型別文件。

 以