钉钉开放平台作为企业沟通和协作的重要工具,其技术的每一次迭代都为企业带来了新的机遇和挑战。随着企业对于高效沟通和智能化管理的需求日益增长,钉钉平台的SDK更新显得尤为重要。把传统的U8与钉钉平台集成,可以有效的将业务功能和角色进行前移,打破应用系统二八原则,即80%的用户在使用20%的功能。
我们在开始介绍U8二次开发和钉钉集成实现技术前,先来了解一下基本概念,文末将提供对应的源代码示例包。
钉钉开放平台
钉钉开放平台 作为企业沟通和协作的重要工具,其技术的每一次迭代都为企业带来了新的机遇和挑战。随着企业对于高效沟通和智能化管理的需求日益增长,钉钉平台的SDK更新显得尤为重要。新的AlibabaCloud.SDK.Dingtalk包不仅提供了更加灵活的API接口,而且代码的可读性和维护性也得到了显著提升,这对于开发者而言无疑是一大利好。
钉钉平台越来越流行的同时,也正处在一个新旧SDK交替的阶段,网上的代码多数是老版本的基于TopSDK(早期的Tao bao开放平台SDK)来实现的,而官方文档上的示例,特别是C#语言的,都是基于新的AlibabaCloud.SDK.Dingtalk包来封装实现的,代码更加的灵活和文艺(可读)。在网上搜索参考了很多资料后,提供了一个新旧代码都兼容的WinForm示例启动包。
功能包括: 企业内部应用的Token生成,消息的发送(文本消息,卡片消息,互动消息等),组织列表获取,人员列表获取,基本信息获取,推送统一代办审批任务等。
部分截图:
如何申请钉钉企业内部应用并获取相关参数(Appkey,Appsecret,AgentId)不在本文范围内,网上资料很多,最快实现企业内部应用集成当属H5微应用方式,完成免登后即可集成到钉钉工作台。
获取Token
新旧方式对比(多数api现在不需要CorpId了):
Client ID (原 AppKey 和 SuiteKey)
Client Secret (原 AppSecret 和 SuiteSecret)
//传统方式
static string GetAccessToken(string appKey, string appSecret)
{
DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
OapiGettokenRequest request = new OapiGettokenRequest();
request.Appkey = appKey;
request.Appsecret = appSecret;
request.SetHttpMethod("GET");
try
{
OapiGettokenResponse response = client.Execute(request);
if (response.Errcode == 0)
{
accessToken = response.AccessToken;
return response.AccessToken;
}
else
{
return null;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return ex.Message;
}
}
//新版本方式
static string GetAccessTokenV2(string appKey, string appSecret)
{
AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateAuthClient();
AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest getAccessTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest
{
AppKey = appKey,
AppSecret = appSecret,
};
try
{
var resp = client.GetAccessToken(getAccessTokenRequest);
return resp.Body.AccessToken;//7200s
}
catch (TeaException err)
{
if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
{
// err 中含有 code 和 message 属性,可帮助开发定位问题
MessageBox.Show(err.Message);
}
}