chat.py 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. from optionaldict import optionaldict
  4. from wechatpy.client.api.base import BaseWeChatAPI
  5. class WeChatChat(BaseWeChatAPI):
  6. """
  7. “微信企业号”旧接口,企业微信请使用 appchat。
  8. """
  9. def create(self, chat_id, name, owner, user_list):
  10. """
  11. 创建会话
  12. 详情请参考
  13. https://qydev.weixin.qq.com/wiki/index.php?title=企业会话接口说明
  14. :param chat_id: 会话id。字符串类型,最长32个字符。只允许字符0-9及字母a-zA-Z,
  15. 如果值内容为64bit无符号整型:要求值范围在[1, 2^63)之间,
  16. [2^63, 2^64)为系统分配会话id区间
  17. :param name: 会话标题
  18. :param owner: 管理员userid,必须是该会话userlist的成员之一
  19. :param user_list: 会话成员列表,成员用userid来标识。会话成员必须在3人或以上,1000人以下
  20. :return: 返回的 JSON 数据包
  21. """
  22. return self._post(
  23. 'chat/create',
  24. data={
  25. 'chatid': chat_id,
  26. 'name': name,
  27. 'owner': owner,
  28. 'userlist': user_list,
  29. }
  30. )
  31. def get(self, chat_id):
  32. """
  33. 获取会话
  34. 详情请参考
  35. https://qydev.weixin.qq.com/wiki/index.php?title=企业会话接口说明
  36. :param chat_id: 会话 ID
  37. :return: 会话信息
  38. """
  39. res = self._get('chat/get', params={'chatid': chat_id})
  40. return res['chat_info']
  41. def update(self, chat_id, op_user, name=None, owner=None,
  42. add_user_list=None, del_user_list=None):
  43. """
  44. 修改会话
  45. 详情请参考
  46. https://qydev.weixin.qq.com/wiki/index.php?title=企业会话接口说明
  47. :param chat_id: 会话 ID
  48. :param op_user: 操作人 userid
  49. :param name: 会话标题
  50. :param owner: 管理员userid,必须是该会话userlist的成员之一
  51. :param add_user_list: 会话新增成员列表,成员用userid来标识
  52. :param del_user_list: 会话退出成员列表,成员用userid来标识
  53. :return: 返回的 JSON 数据包
  54. """
  55. data = optionaldict(
  56. chatid=chat_id,
  57. op_user=op_user,
  58. name=name,
  59. owner=owner,
  60. add_user_list=add_user_list,
  61. del_user_list=del_user_list,
  62. )
  63. return self._post('chat/update', data=data)
  64. def quit(self, chat_id, op_user):
  65. """
  66. 退出会话
  67. 详情请参考
  68. https://qydev.weixin.qq.com/wiki/index.php?title=企业会话接口说明
  69. :param chat_id: 会话 ID
  70. :param op_user: 操作人 userid
  71. :return: 返回的 JSON 数据包
  72. """
  73. return self._post(
  74. 'chat/quit',
  75. data={
  76. 'chatid': chat_id,
  77. 'op_user': op_user,
  78. }
  79. )
  80. def clear_notify(self, op_user, type, id):
  81. """
  82. 清除会话未读状态
  83. 详情请参考
  84. https://qydev.weixin.qq.com/wiki/index.php?title=企业会话接口说明
  85. :param op_user: 会话所有者的userid
  86. :param type: 会话类型:single|group,分别表示:单聊|群聊
  87. :param id: 会话值,为userid|chatid,分别表示:成员id|会话id
  88. :return: 返回的 JSON 数据包
  89. """
  90. return self._post(
  91. 'chat/clearnotify',
  92. data={
  93. 'op_user': op_user,
  94. 'chat': {
  95. 'type': type,
  96. 'id': id,
  97. }
  98. }
  99. )
  100. def set_mute(self, user_mute_list):
  101. """
  102. 设置成员新消息免打扰
  103. 详情请参考
  104. https://qydev.weixin.qq.com/wiki/index.php?title=企业会话接口说明
  105. :param user_mute_list: 成员新消息免打扰参数,数组,最大支持10000个成员
  106. :return: 返回的 JSON 数据包
  107. """
  108. return self._post(
  109. 'chat/setmute',
  110. data={'user_mute_list': user_mute_list}
  111. )
  112. def send_text(self, sender, receiver_type, receiver_id, content):
  113. """
  114. 发送文本消息
  115. 详情请参考
  116. https://qydev.weixin.qq.com/wiki/index.php?title=企业会话接口说明
  117. :param sender: 发送人
  118. :param receiver_type: 接收人类型:single|group,分别表示:单聊|群聊
  119. :param receiver_id: 接收人的值,为userid|chatid,分别表示:成员id|会话id
  120. :param content: 消息内容
  121. :return: 返回的 JSON 数据包
  122. """
  123. data = {
  124. 'receiver': {
  125. 'type': receiver_type,
  126. 'id': receiver_id,
  127. },
  128. 'sender': sender,
  129. 'msgtype': 'text',
  130. 'text': {
  131. 'content': content,
  132. }
  133. }
  134. return self._post('chat/send', data=data)
  135. def send_single_text(self, sender, receiver, content):
  136. """
  137. 发送单聊文本消息
  138. :param sender: 发送人
  139. :param receiver: 接收人成员 ID
  140. :param content: 消息内容
  141. :return: 返回的 JSON 数据包
  142. """
  143. return self.send_text(sender, 'single', receiver, content)
  144. def send_group_text(self, sender, receiver, content):
  145. """
  146. 发送群聊文本消息
  147. :param sender: 发送人
  148. :param receiver: 会话 ID
  149. :param content: 消息内容
  150. :return: 返回的 JSON 数据包
  151. """
  152. return self.send_text(sender, 'group', receiver, content)
  153. def send_image(self, sender, receiver_type, receiver_id, media_id):
  154. """
  155. 发送图片消息
  156. 详情请参考
  157. https://qydev.weixin.qq.com/wiki/index.php?title=企业会话接口说明
  158. :param sender: 发送人
  159. :param receiver_type: 接收人类型:single|group,分别表示:单聊|群聊
  160. :param receiver_id: 接收人的值,为userid|chatid,分别表示:成员id|会话id
  161. :param media_id: 图片媒体文件id,可以调用上传素材文件接口获取
  162. :return: 返回的 JSON 数据包
  163. """
  164. data = {
  165. 'receiver': {
  166. 'type': receiver_type,
  167. 'id': receiver_id,
  168. },
  169. 'sender': sender,
  170. 'msgtype': 'image',
  171. 'image': {
  172. 'media_id': media_id,
  173. }
  174. }
  175. return self._post('chat/send', data=data)
  176. def send_single_image(self, sender, receiver, media_id):
  177. """
  178. 发送单聊图片消息
  179. :param sender: 发送人
  180. :param receiver: 接收人成员 ID
  181. :param media_id: 图片媒体文件id,可以调用上传素材文件接口获取
  182. :return: 返回的 JSON 数据包
  183. """
  184. return self.send_image(sender, 'single', receiver, media_id)
  185. def send_group_image(self, sender, receiver, media_id):
  186. """
  187. 发送群聊图片消息
  188. :param sender: 发送人
  189. :param receiver: 会话 ID
  190. :param media_id: 图片媒体文件id,可以调用上传素材文件接口获取
  191. :return: 返回的 JSON 数据包
  192. """
  193. return self.send_image(sender, 'group', receiver, media_id)
  194. def send_file(self, sender, receiver_type, receiver_id, media_id):
  195. """
  196. 发送文件消息
  197. 详情请参考
  198. https://qydev.weixin.qq.com/wiki/index.php?title=企业会话接口说明
  199. :param sender: 发送人
  200. :param receiver_type: 接收人类型:single|group,分别表示:单聊|群聊
  201. :param receiver_id: 接收人的值,为userid|chatid,分别表示:成员id|会话id
  202. :param media_id: 文件id,可以调用上传素材文件接口获取, 文件须大于4字节
  203. :return: 返回的 JSON 数据包
  204. """
  205. data = {
  206. 'receiver': {
  207. 'type': receiver_type,
  208. 'id': receiver_id,
  209. },
  210. 'sender': sender,
  211. 'msgtype': 'file',
  212. 'file': {
  213. 'media_id': media_id,
  214. }
  215. }
  216. return self._post('chat/send', data=data)
  217. def send_single_file(self, sender, receiver, media_id):
  218. """
  219. 发送单聊文件消息
  220. :param sender: 发送人
  221. :param receiver: 接收人成员 ID
  222. :param media_id: 文件id,可以调用上传素材文件接口获取, 文件须大于4字节
  223. :return: 返回的 JSON 数据包
  224. """
  225. return self.send_file(sender, 'single', receiver, media_id)
  226. def send_group_file(self, sender, receiver, media_id):
  227. """
  228. 发送群聊文件消息
  229. :param sender: 发送人
  230. :param receiver: 会话 ID
  231. :param media_id: 文件id,可以调用上传素材文件接口获取, 文件须大于4字节
  232. :return: 返回的 JSON 数据包
  233. """
  234. return self.send_file(sender, 'group', receiver, media_id)