Categorygithub.com/kevin2027/easy-dingtalk
module
0.0.6
Repository: https://github.com/kevin2027/easy-dingtalk.git
Documentation: pkg.go.dev

# README

dingtalk

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

安装

  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 error
 defer 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 error
 defer 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)

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author