knowledge.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. package kf
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/util"
  5. )
  6. const (
  7. // addKnowledgeGroupURL 知识库分组添加
  8. addKnowledgeGroupURL = "https://qyapi.weixin.qq.com/cgi-bin/kf/knowledge/add_group?access_token=%s"
  9. // delKnowledgeGroupURL 知识库分组删除
  10. delKnowledgeGroupURL = "https://qyapi.weixin.qq.com/cgi-bin/kf/knowledge/del_group?access_token=%s"
  11. // modKnowledgeGroupURL 知识库分组修改
  12. modKnowledgeGroupURL = "https://qyapi.weixin.qq.com/cgi-bin/kf/knowledge/mod_group?access_token=%s"
  13. // listKnowledgeGroupURL 知识库分组列表
  14. listKnowledgeGroupURL = "https://qyapi.weixin.qq.com/cgi-bin/kf/knowledge/list_group?access_token=%s"
  15. // addKnowledgeIntentURL 知识库问答添加
  16. addKnowledgeIntentURL = "https://qyapi.weixin.qq.com/cgi-bin/kf/knowledge/add_intent?access_token=%s"
  17. // delKnowledgeIntentURL 知识库问答删除
  18. delKnowledgeIntentURL = "https://qyapi.weixin.qq.com/cgi-bin/kf/knowledge/del_intent?access_token=%s"
  19. // modKnowledgeIntentURL 知识库问答修改
  20. modKnowledgeIntentURL = "https://qyapi.weixin.qq.com/cgi-bin/kf/knowledge/mod_intent?access_token=%s"
  21. // listKnowledgeIntentURL 知识库问答列表
  22. listKnowledgeIntentURL = "https://qyapi.weixin.qq.com/cgi-bin/kf/knowledge/list_intent?access_token=%s"
  23. )
  24. // AddKnowledgeGroupRequest 知识库分组添加请求
  25. type AddKnowledgeGroupRequest struct {
  26. Name string `json:"name"`
  27. }
  28. // AddKnowledgeGroupResponse 知识库分组添加响应
  29. type AddKnowledgeGroupResponse struct {
  30. util.CommonError
  31. GroupID string `json:"group_id"`
  32. }
  33. // AddKnowledgeGroup 知识库分组添加
  34. // see https://developer.work.weixin.qq.com/document/path/95971#%E6%B7%BB%E5%8A%A0%E5%88%86%E7%BB%84
  35. func (r *Client) AddKnowledgeGroup(req *AddKnowledgeGroupRequest) (*AddKnowledgeGroupResponse, error) {
  36. var (
  37. accessToken string
  38. err error
  39. )
  40. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  41. return nil, err
  42. }
  43. var response []byte
  44. if response, err = util.PostJSON(fmt.Sprintf(addKnowledgeGroupURL, accessToken), req); err != nil {
  45. return nil, err
  46. }
  47. result := &AddKnowledgeGroupResponse{}
  48. err = util.DecodeWithError(response, result, "AddKnowledgeGroup")
  49. return result, err
  50. }
  51. // DelKnowledgeGroupRequest 知识库分组删除请求
  52. type DelKnowledgeGroupRequest struct {
  53. GroupID string `json:"group_id"`
  54. }
  55. // DelKnowledgeGroup 知识库分组删除
  56. // see https://developer.work.weixin.qq.com/document/path/95971#%E5%88%A0%E9%99%A4%E5%88%86%E7%BB%84
  57. func (r *Client) DelKnowledgeGroup(req *DelKnowledgeGroupRequest) error {
  58. var (
  59. accessToken string
  60. err error
  61. )
  62. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  63. return err
  64. }
  65. var response []byte
  66. if response, err = util.PostJSON(fmt.Sprintf(delKnowledgeGroupURL, accessToken), req); err != nil {
  67. return err
  68. }
  69. return util.DecodeWithCommonError(response, "DelKnowledgeGroup")
  70. }
  71. // ModKnowledgeGroupRequest 知识库分组修改请求
  72. type ModKnowledgeGroupRequest struct {
  73. GroupID string `json:"group_id"`
  74. Name string `json:"name"`
  75. }
  76. // ModKnowledgeGroup 知识库分组修改
  77. // see https://developer.work.weixin.qq.com/document/path/95971#%E4%BF%AE%E6%94%B9%E5%88%86%E7%BB%84
  78. func (r *Client) ModKnowledgeGroup(req *ModKnowledgeGroupRequest) error {
  79. var (
  80. accessToken string
  81. err error
  82. )
  83. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  84. return err
  85. }
  86. var response []byte
  87. if response, err = util.PostJSON(fmt.Sprintf(modKnowledgeGroupURL, accessToken), req); err != nil {
  88. return err
  89. }
  90. return util.DecodeWithCommonError(response, "ModKnowledgeGroup")
  91. }
  92. // ListKnowledgeGroupRequest 知识库分组列表请求
  93. type ListKnowledgeGroupRequest struct {
  94. Cursor string `json:"cursor"`
  95. Limit int `json:"limit"`
  96. GroupID string `json:"group_id"`
  97. }
  98. // ListKnowledgeGroupResponse 知识库分组列表响应
  99. type ListKnowledgeGroupResponse struct {
  100. util.CommonError
  101. NextCursor string `json:"next_cursor"`
  102. HasMore int `json:"has_more"`
  103. GroupList []KnowledgeGroup `json:"group_list"`
  104. }
  105. // KnowledgeGroup 知识库分组
  106. type KnowledgeGroup struct {
  107. GroupID string `json:"group_id"`
  108. Name string `json:"name"`
  109. IsDefault int `json:"is_default"`
  110. }
  111. // ListKnowledgeGroup 知识库分组列表
  112. // see https://developer.work.weixin.qq.com/document/path/95971#%E8%8E%B7%E5%8F%96%E5%88%86%E7%BB%84%E5%88%97%E8%A1%A8
  113. func (r *Client) ListKnowledgeGroup(req *ListKnowledgeGroupRequest) (*ListKnowledgeGroupResponse, error) {
  114. var (
  115. accessToken string
  116. err error
  117. )
  118. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  119. return nil, err
  120. }
  121. var response []byte
  122. if response, err = util.PostJSON(fmt.Sprintf(listKnowledgeGroupURL, accessToken), req); err != nil {
  123. return nil, err
  124. }
  125. result := &ListKnowledgeGroupResponse{}
  126. err = util.DecodeWithError(response, result, "ListKnowledgeGroup")
  127. return result, err
  128. }
  129. // AddKnowledgeIntentRequest 知识库问答添加请求
  130. type AddKnowledgeIntentRequest struct {
  131. GroupID string `json:"group_id"`
  132. Question IntentQuestion `json:"question"`
  133. SimilarQuestions IntentSimilarQuestions `json:"similar_questions"`
  134. Answers []IntentAnswerReq `json:"answers"`
  135. }
  136. // IntentQuestion 主问题
  137. type IntentQuestion struct {
  138. Text IntentQuestionText `json:"text"`
  139. }
  140. // IntentQuestionText 问题文本
  141. type IntentQuestionText struct {
  142. Content string `json:"content"`
  143. }
  144. // IntentSimilarQuestions 相似问题
  145. type IntentSimilarQuestions struct {
  146. Items []IntentQuestion `json:"items"`
  147. }
  148. // IntentAnswerReq 回答请求
  149. type IntentAnswerReq struct {
  150. Text IntentAnswerText `json:"text"`
  151. Attachments []IntentAnswerAttachmentReq `json:"attachments"`
  152. }
  153. // IntentAnswerText 回答文本
  154. type IntentAnswerText struct {
  155. Content string `json:"content"`
  156. }
  157. // IntentAnswerAttachmentReq 回答附件请求
  158. type IntentAnswerAttachmentReq struct {
  159. MsgType string `json:"msgtype"`
  160. Image IntentAnswerAttachmentImgReq `json:"image,omitempty"`
  161. Video IntentAnswerAttachmentVideoReq `json:"video,omitempty"`
  162. Link IntentAnswerAttachmentLink `json:"link,omitempty"`
  163. MiniProgram IntentAnswerAttachmentMiniProgramReq `json:"miniprogram,omitempty"`
  164. }
  165. // IntentAnswerAttachmentImgReq 图片类型回答附件请求
  166. type IntentAnswerAttachmentImgReq struct {
  167. MediaID string `json:"media_id"`
  168. }
  169. // IntentAnswerAttachmentVideoReq 视频类型回答附件请求
  170. type IntentAnswerAttachmentVideoReq struct {
  171. MediaID string `json:"media_id"`
  172. }
  173. // IntentAnswerAttachmentLink 链接类型回答附件
  174. type IntentAnswerAttachmentLink struct {
  175. Title string `json:"title"`
  176. PicURL string `json:"picurl"`
  177. Desc string `json:"desc"`
  178. URL string `json:"url"`
  179. }
  180. // IntentAnswerAttachmentMiniProgramReq 小程序类型回答附件请求
  181. type IntentAnswerAttachmentMiniProgramReq struct {
  182. Title string `json:"title"`
  183. ThumbMediaID string `json:"thumb_media_id"`
  184. AppID string `json:"appid"`
  185. PagePath string `json:"pagepath"`
  186. }
  187. // AddKnowledgeIntentResponse 知识库问答添加响应
  188. type AddKnowledgeIntentResponse struct {
  189. util.CommonError
  190. IntentID string `json:"intent_id"`
  191. }
  192. // AddKnowledgeIntent 知识库问答添加
  193. // see https://developer.work.weixin.qq.com/document/path/95972#%E6%B7%BB%E5%8A%A0%E9%97%AE%E7%AD%94
  194. func (r *Client) AddKnowledgeIntent(req *AddKnowledgeIntentRequest) (*AddKnowledgeIntentResponse, error) {
  195. var (
  196. accessToken string
  197. err error
  198. )
  199. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  200. return nil, err
  201. }
  202. var response []byte
  203. if response, err = util.PostJSON(fmt.Sprintf(addKnowledgeIntentURL, accessToken), req); err != nil {
  204. return nil, err
  205. }
  206. result := &AddKnowledgeIntentResponse{}
  207. err = util.DecodeWithError(response, result, "AddKnowledgeIntent")
  208. return result, err
  209. }
  210. // DelKnowledgeIntentRequest 知识库问答删除请求
  211. type DelKnowledgeIntentRequest struct {
  212. IntentID string `json:"intent_id"`
  213. }
  214. // DelKnowledgeIntent 知识库问答删除
  215. // see https://developer.work.weixin.qq.com/document/path/95972#%E5%88%A0%E9%99%A4%E9%97%AE%E7%AD%94
  216. func (r *Client) DelKnowledgeIntent(req *DelKnowledgeIntentRequest) error {
  217. var (
  218. accessToken string
  219. err error
  220. )
  221. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  222. return err
  223. }
  224. var response []byte
  225. if response, err = util.PostJSON(fmt.Sprintf(delKnowledgeIntentURL, accessToken), req); err != nil {
  226. return err
  227. }
  228. return util.DecodeWithCommonError(response, "DelKnowledgeIntent")
  229. }
  230. // ModKnowledgeIntentRequest 知识库问答修改请求
  231. type ModKnowledgeIntentRequest struct {
  232. IntentID string `json:"intent_id"`
  233. Question IntentQuestion `json:"question"`
  234. SimilarQuestions IntentSimilarQuestions `json:"similar_questions"`
  235. Answers []IntentAnswerReq `json:"answers"`
  236. }
  237. // ModKnowledgeIntent 知识库问答修改
  238. // see https://developer.work.weixin.qq.com/document/path/95972#%E4%BF%AE%E6%94%B9%E9%97%AE%E7%AD%94
  239. func (r *Client) ModKnowledgeIntent(req *ModKnowledgeIntentRequest) error {
  240. var (
  241. accessToken string
  242. err error
  243. )
  244. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  245. return err
  246. }
  247. var response []byte
  248. if response, err = util.PostJSON(fmt.Sprintf(modKnowledgeIntentURL, accessToken), req); err != nil {
  249. return err
  250. }
  251. return util.DecodeWithCommonError(response, "ModKnowledgeIntent")
  252. }
  253. // ListKnowledgeIntentRequest 知识库问答列表请求
  254. type ListKnowledgeIntentRequest struct {
  255. Cursor string `json:"cursor"`
  256. Limit int `json:"limit"`
  257. GroupID string `json:"group_id"`
  258. IntentID string `json:"intent_id"`
  259. }
  260. // ListKnowledgeIntentResponse 知识库问答列表响应
  261. type ListKnowledgeIntentResponse struct {
  262. util.CommonError
  263. NextCursor string `json:"next_cursor"`
  264. HasMore int `json:"has_more"`
  265. IntentList []KnowledgeIntent `json:"intent_list"`
  266. }
  267. // KnowledgeIntent 问答摘要
  268. type KnowledgeIntent struct {
  269. GroupID string `json:"group_id"`
  270. IntentID string `json:"intent_id"`
  271. Question IntentQuestion `json:"question"`
  272. SimilarQuestions IntentSimilarQuestions `json:"similar_questions"`
  273. Answers []IntentAnswerRes `json:"answers"`
  274. }
  275. // IntentAnswerRes 回答返回
  276. type IntentAnswerRes struct {
  277. Text IntentAnswerText `json:"text"`
  278. Attachments []IntentAnswerAttachmentRes `json:"attachments"`
  279. }
  280. // IntentAnswerAttachmentRes 回答附件返回
  281. type IntentAnswerAttachmentRes struct {
  282. MsgType string `json:"msgtype"`
  283. Image IntentAnswerAttachmentImgRes `json:"image,omitempty"`
  284. Video IntentAnswerAttachmentVideoRes `json:"video,omitempty"`
  285. Link IntentAnswerAttachmentLink `json:"link,omitempty"`
  286. MiniProgram IntentAnswerAttachmentMiniProgramRes `json:"miniprogram,omitempty"`
  287. }
  288. // IntentAnswerAttachmentImgRes 图片类型回答附件返回
  289. type IntentAnswerAttachmentImgRes struct {
  290. Name string `json:"name"`
  291. }
  292. // IntentAnswerAttachmentVideoRes 视频类型回答附件返回
  293. type IntentAnswerAttachmentVideoRes struct {
  294. Name string `json:"name"`
  295. }
  296. // IntentAnswerAttachmentMiniProgramRes 小程序类型回答附件返回
  297. type IntentAnswerAttachmentMiniProgramRes struct {
  298. Title string `json:"title"`
  299. AppID string `json:"appid"`
  300. PagePath string `json:"pagepath"`
  301. }
  302. // ListKnowledgeIntent 知识库问答列表
  303. // see https://developer.work.weixin.qq.com/document/path/95972#%E8%8E%B7%E5%8F%96%E9%97%AE%E7%AD%94%E5%88%97%E8%A1%A8
  304. func (r *Client) ListKnowledgeIntent(req *ListKnowledgeIntentRequest) (*ListKnowledgeIntentResponse, error) {
  305. var (
  306. accessToken string
  307. err error
  308. )
  309. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  310. return nil, err
  311. }
  312. var response []byte
  313. if response, err = util.PostJSON(fmt.Sprintf(listKnowledgeIntentURL, accessToken), req); err != nil {
  314. return nil, err
  315. }
  316. result := &ListKnowledgeIntentResponse{}
  317. err = util.DecodeWithError(response, result, "ListKnowledgeIntent")
  318. return result, err
  319. }