钉钉机器人接口实现及其他API扩展


一、概述

钉钉作为一种高效的协同办公软件,已经被广泛集成到各类工业软件中,官方也提供了丰富的API开发文档及调试工具,很容易实现集成。OrBit平台也无例外的集成了钉钉的部分应用,如消息对象中的发送钉钉消息,应用了钉钉的“发送工作通知”接口。其实,钉钉API的集成,都是分2个步骤,首先需要获取Tocken,最后是调用相应的API,无非是不同的API,需要提供不同的Url和Body(即Json数据包)。当然,最大的前提是需要在钉钉管理者后台、钉钉开发者后台做好必要的配置,如微应用、机器人、API权限等。以下,将具体阐述“钉钉机器人API”在OrBit平台的集成方法。

PS:需先创建应用、机器人和必要的权限配置。

机器人消息API

【附件】sql procedures.rar

二、实现步骤

# 2.1 创建应用

在钉钉开发者后台的【应用开发】页面创建应用,如下:

# 2.2 创建机器人

在钉钉开发者后台的【应用开发】页面,选择应用进入详情页面,在应用功能-机器人与消息推送栏,创建机器人,如下:

# 2.3 钉钉群组添加机器人,并获取webhook

在钉钉群的设置里面,为群组添加机器人,并获取webhook的tocken,如下:

#三、系统配置

# 3.1 通讯组配置

与基础数据菜单组的通讯组配置相同(3.3.11.通讯组),增加了机器人字段,用来存储webhook的tocken,如下:

# 3.2 消息对象配置

在消息对象中新增群发的消息对象,并在【通讯应用】页签下配置群发应用,如下:

四、代码示例

【调用代码】

  1. DECLARE @ReceiveData NVARCHAR(MAX);
  2. DECLARE @appkey NVARCHAR(200) = N'应用的appkey';
  3. DECLARE @appsecret NVARCHAR(200) = N'应用的appsecret';
  4. DECLARE @LocalWCFUrl NVARCHAR(200) = N'';
  5. DECLARE @WebAPIUrl NVARCHAR(MAX)
  6. = N'https://oapi.dingtalk.com/gettoken?appkey=' + @appkey + N'&appsecret=' + @appsecret;
  7. -- 1、获取tocken
  8. EXEC dbo.CLR_CallWebAPIEx @ReceiveData = @ReceiveData OUTPUT, -- nvarchar(max)
  9. @LocalWCFUrl = @LocalWCFUrl,
  10. @IsPost = 0,
  11. @WebAPIUrl = @WebAPIUrl,
  12. @UserName = N'', -- nvarchar(100)
  13. @UserPassword = N'', -- nvarchar(100)
  14. @TimeOutS = 0, -- int
  15. @ContentType = N'', -- nvarchar(1000)
  16. @Headers = N'', -- nvarchar(max)
  17. @PostFormParams = N'', -- nvarchar(max)
  18. @PostRawParams = N'', -- nvarchar(max)
  19. @GetParams = N''; -- nvarchar(max)
  20. --SELECT @ReceiveData;
  21. -- 解析tocken
  22. DECLARE @tocken NVARCHAR(200) = N'';
  23. SELECT @tocken = [Value]
  24. FROM OPENJSON(@ReceiveData)
  25. WHERE [Key] = 'access_token';
  26. -------------------------------------------------------------------------------------------------------------
  27. -- 钉钉机器人
  28. -------------------------------------------------------------------------------------------------------------
  29. SET @WebAPIUrl = N'https://api.dingtalk.com/v1.0/robot/oToMessages/batchSend';
  30. DECLARE @Headers NVARCHAR(200) = N'x-acs-dingtalk-access-token<|=|>' + @tocken;
  31. DECLARE @JsonStr NVARCHAR(MAX) = N'';
  32. -- 机器人robotCode dinghgxdjrt0qs3uvmno
  33. ----2.1、发送机器人消息
  34. --SET @JsonStr = N'{
  35. -- "msgParam":"{ \"content\": \"机器人测试消息1... '+CONVERT(NVARCHAR(50),GETDATE(),121)+'\" }",
  36. -- "msgKey":"sampleText",
  37. -- "robotCode":"dingb3tamaqdi3v4jefo",
  38. -- "userIds":[
  39. -- "manager7362"
  40. -- ]
  41. --}';
  42. --EXEC dbo.CLR_CallWebAPIEx @ReceiveData = @ReceiveData OUTPUT, -- nvarchar(max)
  43. -- @LocalWCFUrl = @LocalWCFUrl,
  44. -- @IsPost = 1,
  45. -- @WebAPIUrl = @WebAPIUrl,
  46. -- @UserName = N'',
  47. -- @UserPassword = N'',
  48. -- @TimeOutS = 0,
  49. -- @ContentType = N'application/json;charset=utf-8',
  50. -- @Headers = @Headers,
  51. -- @PostFormParams = N'',
  52. -- @PostRawParams = @JsonStr,
  53. -- @GetParams = N'';
  54. --SELECT @ReceiveData;
  55. ----2.2、发送机器人群聊消息
  56. --SET @JsonStr
  57. -- = N'{
  58. -- "msgParam":"{ \"content\": \"机器人测试消息2... '+CONVERT(NVARCHAR(50),GETDATE(),121)+'\" }",
  59. -- "msgKey":"sampleText",
  60. -- "robotCode":"dinghgxdjrt0qs3uvmno",
  61. -- "userIds":[
  62. -- "manager7362"
  63. -- ]
  64. --}';
  65. --EXEC dbo.CLR_CallWebAPIEx @ReceiveData = @ReceiveData OUTPUT, -- nvarchar(max)
  66. -- @LocalWCFUrl = @LocalWCFUrl,
  67. -- @IsPost = 1,
  68. -- @WebAPIUrl = @WebAPIUrl,
  69. -- @UserName = N'',
  70. -- @UserPassword = N'',
  71. -- @TimeOutS = 0,
  72. -- @ContentType = N'application/json;charset=utf-8',
  73. -- @Headers = @Headers,
  74. -- @PostFormParams = N'',
  75. -- @PostRawParams = @JsonStr,
  76. -- @GetParams = N'';
  77. --SELECT @ReceiveData;
  78. --3、发送机器人群聊消息
  79. --3.1创建群,获取chartId/openConversationId
  80. DECLARE @webhook_tocken VARCHAR(MAX) = '机器人webhook的tocken'
  81. -- 3.2 发送群消息
  82. SET @WebAPIUrl = N'https://api.dingtalk.com/v1.0/robot/groupMessages/send';
  83. SET @JsonStr
  84. = N'{
  85. "msgParam":"{ \"content\": \"机器人测试消息 webhook方式 ... ' + CONVERT(NVARCHAR(50), GETDATE(), 121)
  86. + N'\" }",
  87. "msgKey":"sampleText",
  88. "token":"'+@webhook_tocken+'"
  89. }';
  90. EXEC dbo.CLR_CallWebAPIEx @ReceiveData = @ReceiveData OUTPUT, -- nvarchar(max)
  91. @LocalWCFUrl = @LocalWCFUrl,
  92. @IsPost = 1,
  93. @WebAPIUrl = @WebAPIUrl,
  94. @UserName = N'',
  95. @UserPassword = N'',
  96. @TimeOutS = 0,
  97. @ContentType = N'application/json;charset=utf-8',
  98. @Headers = @Headers,
  99. @PostFormParams = N'',
  100. @PostRawParams = @JsonStr,
  101. @GetParams = N'';
  102. SELECT @ReceiveData;

HG0064 2024年1月10日 09:06
目录