dingtalk

这是一个集成钉钉常用功能的简易版服务端开发工具库,适用于创建一次客户端,多次调用的场景。内置token过期时间维护;内置用户id到用户userid的计算函数,可以方便的在企业用户名与userid之间自动转换;同时在reduce函数中可以设置加入白名单过滤,避免在测试环境中发信息给非白名单用户。具体参数说明,请参考钉钉开发文档

仓库地址

https://github.com/kevin2027/easy-dingtalk

安装

  go get -u github.com/kevin2027/easy-dingtalk

引入代码

import ("github.com/kevin2027/easy-dingtalk/dingtalk""github.com/kevin2027/easy-dingtalk/utils"
)

创建客户端

srv, _, err = dingtalk.NewDingtalk(utils.DingtalkOptions{AppKey:    config.AppKey,AppSecret: config.AppSecret,AgentId:   config.AgentId,
})

reduce函数

client.SetDingDiReduceFn(func(ctx context.Context, attr string, src ...string) (dest map[string]string) {dest = make(map[string]string)if attr == utils.AttDeptId {return}for _, s := range src {if user, ok := config.Users[s]; ok {switch attr {case utils.AttrUserid:dest[s] = user.Userid}}}return})

调用

消息通知

普通消息

var err errordefer deferErr(&err)msg := &message.MessageRequest{Msgtype: "text",Text: &message.TextMessage{Content: "这是一段文本消息",},}receiver, err := client.Message().SendToConversation("user0", 123453556, msg)if err != nil {err = fmt.Errorf("%w", err)return}fmt.Printf("%v\n", receiver)

工作通知

 var err errordefer deferErr(&err)msg := &message.MessageRequest{Msgtype: "text",Text: &message.TextMessage{Content: "这是一段文本消息",},}taskId, err := client.Message().CorpconversationaSyncsendV2([]string{"user0"}, nil, false, msg)if err != nil {err = fmt.Errorf("%w", err)return}fmt.Printf("%v\n", taskId)

日程(新版)

添加日程

req := &calendar_v2.CreateEventRequestEvent{Attendees: []*calendar_v2.Attendee{{Userid: tea.String("user0"),},},CalendarId:  "",Description: tea.String("测试创建日程描述"),End: calendar_v2.DataTime{Timestamp: tea.Int64(time.Date(2022, 5, 2, 14, 0, 0, 0, time.Local).Unix()),Timezone:  tea.String("Asia/Shanghai"),},Start: calendar_v2.DataTime{Timestamp: tea.Int64(time.Date(2022, 5, 2, 13, 0, 0, 0, time.Local).Unix()),Timezone:  tea.String("Asia/Shanghai"),},Organizer: calendar_v2.Attendee{Userid: tea.String("user0"),},Summary:  "测试创建日程",Reminder: nil,Location: &calendar_v2.Location{Place: tea.String("地点"),},NotificationType: "",}res, err := client.CalendarV2().CreateEvent(req)if err != nil {err = fmt.Errorf("%w", err)return}fmt.Printf("%v\n", *util.ToJSONString(res))

修改日程

req := &calendar_v2.UpdateEventRequestEvent{Attendees:   []*calendar_v2.Attendee{},CalendarId:  "",Description: "测试修改日程描述",Start:       calendar_v2.DataTime{Timestamp: tea.Int64(time.Date(2022, 5, 2, 15, 0, 0, 0, time.Local).Unix()), Timezone: tea.String("Asia/Shanghai")},End:         calendar_v2.DataTime{Timestamp: tea.Int64(time.Date(2022, 5, 2, 16, 0, 0, 0, time.Local).Unix()), Timezone: tea.String("Asia/Shanghai")},Summary:     "测试修改日程",EventId:     "9E7066D46163091754634D654103262E",Reminder: &calendar_v2.Reminder{Method:  tea.String("app"),Minutes: tea.Int(5),},Location:  &calendar_v2.Location{Place: tea.String("地点")},Organizer: calendar_v2.Attendee{Userid: tea.String("user0")},}err = client.CalendarV2().UpdateEvent(req)if err != nil {err = fmt.Errorf("%w", err)return}fmt.Printf("%v\n", "success")

取消日程

err = client.CalendarV2().CancelEvent("9E7066D46163091754634D654103262E")if err != nil {err = fmt.Errorf("%w", err)return}fmt.Printf("%v\n", "success")

修改日程参与者

attendeeList := []*calendar_v2.Attendee{{Userid:         tea.String("user1"),AttendeeStatus: tea.String("remove"),},}err = client.CalendarV2().AttendeeUpdate("9E7066D46163091754634D654103262E", attendeeList)if err != nil {err = fmt.Errorf("%w", err)return}fmt.Printf("%v\n", "success")

日程(旧版)

CreateEvent(unionId string, req *dingtalkcalendar_1_0.CreateEventRequest) (event *dingtalkcalendar_1_0.CreateEventResponseBody, err error)PatchEvent(unionId string, eventId string, req *dingtalkcalendar_1_0.PatchEventRequest) (event *dingtalkcalendar_1_0.PatchEventResponseBody, err error)DeleteEvent(unionId string, eventId string) (err error)AddAttendee(unionId string, eventId string, req *dingtalkcalendar_1_0.AddAttendeeRequest) (err error)RemoveAttendee(unionId string, eventId string, req *dingtalkcalendar_1_0.RemoveAttendeeRequest) (err error)

会议

 CreateVideoConference(userId string, confTitle string, inviteUserIds []string, inviteCaller bool) (res *dingtalkconference_1_0.  CreateVideoConferenceResponseBody, err error)CloseVideoConference(unionId string, conferenceId string) (err error)QueryConferenceInfoBatch(conferenceIdList []string) (res []*dingtalkconference_1_0.QueryConferenceInfoBatchResponseBodyInfos, err error)

通讯录

GetUserInfo(userid string) (res *GetUserInfoResponseResult, err error)

Oauth2

  GetAccessToken() (accessToken string, expireIn time.Time, err error)GetAgentId() (agentId int64)SetAgentId(agentId int64)GetUserToken(code string, refreshToken string) (res *dingtalkoauth2_1_0.GetUserTokenResponseBody, err error)

dingtalk 一个让钉钉服务端开发更简单的golang工具库相关推荐

  1. 一个棋牌游戏的服务端开发1

    一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了90%的核心代码.关于这个项目,有很多地方值得聊一聊.本系列不打算把这个项目将得多么详细规范,那是设计文档应该描述的 ...

  2. Java游戏服务端开发之开课了

    从今天开始我将会重新的做一个专栏.这个专栏是专门为新手讲解游戏服务端开发的文章系列.同时也是将自己多年的经验做一个系统的分享. 通过这个系列大家可以掌握到一个游戏开发中的一些概率以及在线游戏服务器所包 ...

  3. JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

    一.什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的.停工时间,就是不能向用户提供服务的时间.高可用,就是系统具有高度可用性,尽量减少停工时间.如何用最简单的方法来搭建 ...

  4. Erlang服务端开发(无需Erlang基础)笔试题

    某游戏公司Erlang服务端开发(无需Erlang基础)笔试题,面向C/C++程序员 一.用你熟悉的语言解决下面的问题. 1.反转输出字符串,并移除其中的空格. 2.快速的判断一个数是否素数的方法. ...

  5. 一场B站服务端开发面试之旅

    作者 | 蓝 来源 | 我是程序员小贱(ID:Lanj1995Q) 此次B站服务端开发面试之旅可谓惊险,不过通过对大部分面试题套路的掌握,不出意外还是拿下了,下面我们来看看这些题是不是常见的不能再常见 ...

  6. java服务端开发 php_PHP使用thrift做服务端开发

    php中文网最新课程 每日17点准时技术干货分享 php使用thrift做服务端开发 thrift采用接口描述语言定义和创建服务,用二进制格式传输数据,体积更小.效率更高,对于高并发.数据量大和多语言 ...

  7. 第13章 Kotlin 集成 SpringBoot 服务端开发(1)

    第13章 Kotlin 集成 SpringBoot 服务端开发 本章介绍Kotlin服务端开发的相关内容.首先,我们简单介绍一下Spring Boot服务端开发框架,快速给出一个 Restful He ...

  8. rds基于什么开发_为什么不学基于TypeScript的Node.js服务端开发?

    为什么不学?学不动了吗?!别躺下啊,我扶你起来! 我们早就知道,如今的JavaScript已经不再是当初那个在浏览器网页中写写简单的表单验证.没事弹个alert框吓吓人的龙套角色了.借助基于v8引擎的 ...

  9. 服务端开发学习路径图,心疼小哥哥们

    关注微信公众号<小姐姐味道>获取更多-- 在github上看到一种图的表现形式很不错(github.com/kamranahmed- ),迫不及待的自己做了一张:服务端开发学习路径图,表现 ...

最新文章

  1. ARM NEON 编程简单入门1
  2. 纸质图书与电子图书的营销策略研究
  3. Object类、常用API
  4. (七)boost库之单例类
  5. 配置DNS辅助服务器:DNS系列之四
  6. as的使用技巧及注意点
  7. XMLHttpRequest+WebForm模式(接口IHttpHandler)实现ajax
  8. easyui打开新的选项卡_Jquery Easyui选项卡组件Tab使用详解(10)
  9. python的help()用法
  10. python学生管理系统用列表_史上最全面的python学生管理系统教程(二)
  11. ABAP 学习笔记一
  12. linux添加五笔输入法,RedHat Linux 9中vim升级方法及如何安装五笔输入法
  13. 如何获取新浪微博数据
  14. vue项目PC端屏幕分辨率与窗口大小自适应
  15. 大清朝数学家写的微积分教材,堪称天书!
  16. IE6浏览器不支持固定定位(position:fixed)解决方案
  17. es6之扩展运算符 Object.assign和 三个点(...)
  18. 色彩理论之彩虹CMYK值
  19. 安卓app之按键美化
  20. 6月30日,入职感悟、未来规划、本周工作总结,记录印象深刻的BUG。

热门文章

  1. python照片转彩色手绘_用PS把女生照片转成炫彩渐变手绘效果
  2. Mac电脑如何卸载Sophos防病毒软件?
  3. 信赖域狗腿(dogleg)方法
  4. typroa 思维导图_Typora-编写博客格式化文档的最佳软件
  5. 网页设计师要懂的前端知识之HTML标签及规范
  6. 【turtle系列一】所有函数对应的含义和理解
  7. 数字化教育解决方案,打造智慧校园新模式
  8. 1G到5G的技术标准,你都了解有哪些呢?
  9. jarvis oj Web By Assassin
  10. js 判断一个数是正数、负数、零或其他 正数转变成负数 负数转变成正数