即时通讯平台--企业微信客户端搭建

即时通讯平台–企业微信客户端搭建

背景介绍

本学期我搭建了基于光学传感器的道路环境感知系统,可以对道路中的车辆进行识别与跟踪,速度监控与流量统计。速度监控与流量统计的结果若只能本地展示,需要耗费大量人力资源看守监控,缺乏实用性,因此,我们搭建企业微信客户端,将速度监控与流量统计的结果与监控截图,实时发送给相关人员,减少人力资源的使用,大大提高项目的实用性与实时性;同时,企业微信可以将消息定向发布,避免隐私泄露,提高安全性。
下面,我从创建企业微信调用API接口,实现自动发布文字与图片消息,逐一介绍搭建方法,下图为小组建立的企业微信效果图。
企业微信效果图

建立自己的企业微信

我将详细介绍企业微信的创建过程,需要留意的是企业微信的ID,是企业号的标识;企业应用的AgentID,是创建的应用标识、Secret,是该应用管理组的凭证密钥。

1. 注册企业微信企业微信注册

扫码关联微信账号,然后填写管理员信息与企业相关信息。
填写企业信息

2. 创建企业应用

创建好企业微信后,扫码进入企业微信后台,在应用管理中,选择创建应用。应用是后续推送相关消息的助手,上传个酷酷的头像和名称后,一定要记得选择相关的部门与成员,这个后续会涉及到推送消息的对象。如果只选择成员的话,后续加入新成员,要记得修改添加。
创建应用

3. 获取企业Id与应用的AgentId和Secret:这三个后续调用API接口时会用到。

查看企业微信Id
查看企业Id
查看应用AgentID、Secret:在应用管理中,选择之前创建好的应用
查看应用AgentID与Secret

调用企业微信API,编写Python脚本

概述:

企业微信开放了消息发送接口,企业可以使用这些接口让自定义应用与企业微信后台或用户间进行双向通信。
因此,我们在创建好一个自建应用,且拿到了可用的应用id及secret,可以调用api控制应用,调用api的过程,本质上就是发送http请求给企业微信后台,而发送消息就是一个post请求,其参数为 access_token 和 消息体。因此我们需要针对这两部分编写程序,获取token、定义文本和图片的消息体。

接口概括

消息接口总体上分为主动发送单聊消息、接收单聊消息以及发送消息到群三部分

1.主动发送应用消息:企业后台调用接口通过应用向指定成员发送单聊消息

2.接收消息:企业后台接收来自成员的消息或事件
2.1要使用接收消息,需要在应用中设置开发者的回调服务器配置。
2.2接收消息分为两种:1. 成员在应用客户端里发送的消息;2. 某种条件下触发的事件消息。
2.3开发者后台在接收消息后,可以在响应的返回包里带上回复消息,企业微信会将这条消息推送给成员。这就是“被动回复消息”。

3发送消息到群聊会话:企业后台调用接口创建群聊后,可通过应用推送消息到群内。(暂不支持接收群聊消息)

消息接口流程图如下:(图中"URL"为用户配置的接收消息服务器地址)
消息接口流程图

1.声明头文件

import requests
import json
import urllib.request

2.定义WeChat类,初始化函数

这里需要填写自己创建的企业微信与应用的相关信息

class WeChat:def __init__(self):self.ID = '企业Id'self.Secret = '应用的Secret'self.AppID = 'AgentId'self.UserID = "ZhangSan|LiSi"  # 接收者用户名

这里我是按照接收者的用户名发送消息,也可以设置部门,按照部门进行发生消息

3.定义get_token函数,依据企业ID与凭证密钥Secret获取权限。

    def get_token(self):  ##获取TOKENgurl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={}&corpsecret={}".format(self.ID, self.Secret)r = requests.get(gurl)dict_result = (r.json())return dict_result['access_token']

4. 定义get_media_ID函数,上传图片素材,获取图片ID

发送图片消息时,利用get_media_ID函数,先上传图片素材,获取图片的ID标识号。

    def get_media_ID(self, path):  ##上传到临时素材  图片IDGtoken = self.get_token()img_url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={}&type=image".format(Gtoken)files = {'image': open(path, 'rb')}r = requests.post(img_url, files=files)re = json.loads(r.text)return re['media_id']

5. 定义sent_text函数,发送文字消息

这部分是定义发送文本消息的信息体,下面整理了消息体的参数说明

参数是否必须说明
touser指定接收消息的成员,成员ID列表。特殊情况:指定为"@all",则向该企业应用的全部成员发送
toparty指定接收消息的部门,部门ID列表,,最多支持100个。当touser为"@all"时忽略本参数
totag指定接收消息的标签,标签ID列表,最多支持100个。当touser为"@all"时忽略本参数
msgtype消息类型,此时固定为:text
agentid企业应用的id,整型。企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值
content消息内容,最长不超过2048个字节,超过将截断(支持id转译)
enable_id_trans表示是否开启id转译,0表示否,1表示是,默认0。仅第三方应用需要用到,企业自建应用可以忽略。
enable_duplicate_check表示是否开启重复消息检查,0表示否,1表示是,默认0
duplicate_check_interval表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时
    def send_text(self, text):  ##发送文字post_data = {}msg_content = {}msg_content['content'] = text  ## 消息内容,最长不超过2048个字节post_data['touser'] = self.UserID# post_data['toparty'] = PartyIDpost_data['msgtype'] = 'text'post_data['agentid'] = self.AppIDpost_data['text'] = msg_contentpost_data['safe'] = '0'  # 表示是否是保密消息,0表示否,1表示是,默认0Gtoken = self.get_token()purl1 = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(Gtoken)json_post_data = json.dumps(post_data)request_post = urllib.request.urlopen(purl1, json_post_data.encode(encoding='UTF8'))return request_post

6定义send_pic函数,发送图片消息

发送图片消息与文本消息不同的地方在于,需要先上传图片素材,获取media_ID,msgtype的参数值也要改为“image”,其他地方和发送文本消息相似。

  def send_pic(self, path):  ##发送图片img_id = self.get_media_ID(path)post_data1 = {}msg_content1 = {}msg_content1['media_id'] = img_idpost_data1['touser'] = self.UserID# post_data1['toparty'] = PartyIDpost_data1['msgtype'] = 'image'post_data1['agentid'] = self.AppIDpost_data1['image'] = msg_content1post_data1['safe'] = '0'Gtoken = self.get_token()purl2 = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(Gtoken)json_post_data1 = json.dumps(post_data1)request_post = urllib.request.urlopen(purl2, json_post_data1.encode(encoding='UTF8'))return request_post

完整代码

填入自己注册企业微信的ID和应用的AgentID与Secret,就可以直接调用send_text和send_pic函数分别发送文字与图片消息。

# !/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
import urllib.requestclass WeChat:def __init__(self):self.ID = '企业ID'self.Secret = '应用密钥'self.AppID = 'AgentID'self.UserID = "ZhangSan|LiSi"  # 接收者用户名def get_token(self):  ##获取TOKENgurl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={}&corpsecret={}".format(self.ID, self.Secret)r = requests.get(gurl)dict_result = (r.json())return dict_result['access_token']def get_media_ID(self, path):  ##上传到临时素材  图片IDGtoken = self.get_token()img_url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={}&type=image".format(Gtoken)files = {'image': open(path, 'rb')}r = requests.post(img_url, files=files)re = json.loads(r.text)return re['media_id']##def send_text(self, text):  ##发送文字post_data = {}msg_content = {}msg_content['content'] = text  ## 消息内容,最长不超过2048个字节post_data['touser'] = self.UserID# post_data['toparty'] = PartyIDpost_data['msgtype'] = 'text'post_data['agentid'] = self.AppIDpost_data['text'] = msg_contentpost_data['safe'] = '0'  # 表示是否是保密消息,0表示否,1表示是,默认0Gtoken = self.get_token()purl1 = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(Gtoken)json_post_data = json.dumps(post_data)request_post = urllib.request.urlopen(purl1, json_post_data.encode(encoding='UTF8'))return request_postdef send_pic(self, path):  ##发送图片img_id = self.get_media_ID(path)post_data1 = {}msg_content1 = {}msg_content1['media_id'] = img_idpost_data1['touser'] = self.UserID# post_data1['toparty'] = PartyIDpost_data1['msgtype'] = 'image'post_data1['agentid'] = self.AppIDpost_data1['image'] = msg_content1post_data1['safe'] = '0'Gtoken = self.get_token()purl2 = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(Gtoken)json_post_data1 = json.dumps(post_data1)request_post = urllib.request.urlopen(purl2, json_post_data1.encode(encoding='UTF8'))return request_postif __name__ == "__main__":wx = WeChat()wx.send_text("车辆超速")wx.send_pic("图片路径")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43650.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序端接入企微客服 【微信客服】支持接入企微客服功能

一、使用场景 用户在小程序中查看服务项目,想立即确认服务时间、价格、商家位置,这时只需要点击联系客服的按钮,即可在微信内免加好友进行咨询。【微信客服】将成为商家直连消费者较高效的方式,帮助商家完成与用户的“售前咨询-售…

uniapp接入微信客服聊天流程(企业微信)

1.注册并认证企业微信 多平台开发企业微信客服是最好的解决方案 企业微信 2.打开微信客服 3.启用微信客服,并添加客服账号 4.接入场景 如果多平台开发可以都接入 里面有步骤,按照步骤走即可(看完官方教程一定回来继续看代码!&…

Android(安卓) 接入企业微信

安卓接入企业微信 概述:博主是个三流代码搬运工,最近接手某个课题,需要做一个数据可视化的 app ,将一些信息直观的统计并且展示在地图上,所以也会用到高德地图 API 的接口,所以后续也会分享一下使用高德 A…

企业微信接入第三方应用(以服务商身份)

最近在搞企业微信的东西,刚开始对这个的确没有任何的概念,属于两眼抓瞎的类型,因为场景比较特殊网上搜到的资料也不多,只能自己看着官方文档一点一点去调试。于是,一系列的踩坑之路就上演了,这里就简单介绍…

从码力到算力的“狂飙”,探元宇宙的未来风向

导语 | 随着 GPT-4 的问世,大大加速催化了 AIGC 与元宇宙的融合发展,在大家对元宇宙的了解逐渐深入之后,越来越多企业不断探索元宇宙的发展机遇。那么在技术驱动的数字时代,我们该如何看待元宇宙的未来发展?今天&#…

chatgpt赋能python:Python怎么更改语言

Python怎么更改语言 Python是一种高级编程语言,因其简洁、易读、易学和可扩展性而受到许多程序员的青睐。 Python在许多领域中都有着广泛的应用,特别是在数据科学领域和人工智能领域。 本文将探讨如何使用Python更改语言,介绍一些工具和技巧…

ClickHouse用户路径分析原理及实现

在互联网数据分析钟,有一种针对用户行为路径的分析模型——路径分析。路径分析应用是对特定事件的上下游进行可视化展示并分析用户在使用产品时的路径分布情况。比如:当用户使用某APP时,是怎样从【首页】进入【详情页】的,用户从【…

【GIT】git个人笔记

GIT个人手册 版本 日期 修订内容 作者 V01 2019-06-25 初稿 备注: 使用中不断迭代完善,其他人使用中有其他总结的,可以补充。 目录 第一章 说明 一.1.1 GIT 中文手册 一.1.2 git仓库说明(工作区、暂存区、本地仓、远程仓)1 一.1.3 g…

ES优化实战- forceMerge搜索提升测试报告

测试结论 通过测试数据能够得出以下结论。 对于历史不变的数据,段合并的效果是非常好的。它对普通查询(query_string)有着较大的提升,提升在10%~90%不等的效果,其中搜索条件命中的结果集越多,提升就越明显…

unity对接T.Flight Hotas 4操控杆

unity对接T.Flight Hotas 4操控杆: 注: 提示: 本篇主要说明,如何使用unity获取 T.Flight Hotas 4 传回来的各种值 获取驱动: 提示:首先要下载安装官方的驱动,用他的软件先检测一边是否能够正常运行 地址: 固件地址:https://support.thrustmaster.com/zh/product…

ES优化实战 - 小操作节省百分之三十以上的磁盘空间

通过关闭索引的 _source来节省磁盘 un_source 是去掉存储的数据。在查询的时候,不反回数据。数据只做索引和倒排这些。 这样做的意思是,只让es做检索,不做存储。es检索完,只返回一个id。然后选用Hbase这样的数据库联动。Hbase擅长…

ES 搜索优化测试 - indexSort 对检索性能提升50%

indexSort 是在写入数据的时候,根据某个字段做排序。我们可以理解为数据的预排序。 在检索的时候,假如搜索正好是根据排好序的字段做排序的,那么将会有 50%的 检索性能提升效果。 注意,不要在请求中返回 count数据总量。这样配合i…

unity中的摇杆按钮设置

摇杆设备的所有按钮都有顺序编号,下图按钮框内的1到16分别对应摇杆设备的各个按钮。 若要使用摇杆的某个按钮需按 joystick button 按钮编号 的格式设置。unity的按钮从0开始计算在设置的时候需要减去一个数。 下图红线框住的选项其设置表示:摇杆7号按钮…

【转】浅谈协方差

【转】浅谈协方差 觉得有用的话,欢迎一起讨论相互学习~ 转载自:http://pinkyjie.com/2010/08/31/covariance/ 作者:进击的马斯特 协方差矩阵 Matlab协方差矩阵

IT 常用词汇(一)

1, amend [əmend] vt. 修改;改善,改进 vi. 改正,改善;改过自新 n. (Amend)人名;(德、英)阿门德 2, bearer [bɛrɚ] n. 持票人;[建] 承木;[机] 托架;送信人;搬运工人 …

浅谈协方差矩阵(马斯特的斯马特生活)

统计学的基本概念 学过概率统计的孩子都知道,统计里最基本的概念就是样本的均值,方差,或者再加个标准差。首先我们给你一个含有n个样本的集合,依次给出这些概念的公式描述,这些高中学过数学的孩子都应该知道吧&#x…

Thrustmaster(图马思特) HOTAS Warthog 疣猪杆 读取按钮数据

我所使用的摇杆是THRUSTMASTER(右下图所示),用于在目标追踪页面进行框选物体(实际应用场景不涉及鼠标键盘,只能使用操作杆进行操作) 1、首先,安装摇杆所需环境,winR输入cmd后&#x…

速魔与图马思特优缺点对比

速魔和图马思特优缺点对比速魔图马思特传动系统直驱双皮带最大力反馈10Nm10Nm工作电压110-240V220-240V功率360W240W快拆50mm/70mm 盘面通用特制优点1.直驱,没有传动装置 2.力反馈更加直接 3.回盘速度更快,输出力度更大,操控好 4.秒换方向盘 …

微软获GPT-3独家授权,OpenAI创始人马斯克:与初衷相悖

萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 微软获OpenAI GPT-3独家授权,马斯克不高兴了。 就在微软官宣GPT-3后一天,马斯克在社交媒体上吐槽此事:“这看起来像是与‘开放’相悖。OpenAI本质上已经被微软‘控制’了。” 这件事情的起因&…

张俊林:GPT-4 模型会开创哪些新的研究方向?

作者|张俊林知乎 整理|蘑菇先生学习记 分享一篇张俊林老师关于GPT-4模型会开创哪些新的研究方向的回答。 引言 在这个历史性的时刻,回答个问题,留下自己作为历史见证人的足迹。先遵循这个问题的主旨,写两句GPT-4开创了…