【Python+微信】【企业微信开发入坑指北】1. 数据链路打通:接收用户消息处理并回复

  • 大家好,我是同学小张,日常分享AI知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

本站文章一览:

在这里插入图片描述


上篇文章我们将企业微信自建应用与我们自己的服务器连接起来了,下面进行第二步,接收用户消息处理,并回复。

类比公众号开发的这篇文章,打通数据链路:【超详细!】Python微信公众号开发(2)

还是采用Flask框架。

0. 接收与被动回复消息的格式

0.1 消息格式(以文本消息为例)

看下官方文档:https://developer.work.weixin.qq.com/document/path/96466

0.1.1 接收消息格式

在这里插入图片描述

0.1.2 回复消息格式

在这里插入图片描述

接收到的消息格式为xml格式,回复内容的格式也是xml格式。

这里接收到的xml格式的内容和发送出去的xml格式的内容都是需要加密的,所以在接收到之后和回复消息之前都应该进行解密和加密处理。

该功能的限制,与微信公众号一样,也是只有5s的响应时间,总共重试三次:
在这里插入图片描述

了解了基本内容之后,我们开始编写代码

1. 编写代码

1.1 入口的处理

@app.route('/company_wechat', methods=['GET', 'POST']) 
def company_wechat():
    if request.method == 'GET':
        return signature(request, 0)
    else:
        print("收到请求......")
        return handle_user_message(request, 0)

如果是GET请求,就去校验是否是微信消息。

如果是POST请求,就进行相应处理并给出回复。

1.2 解密接收到的消息内容

上面提到了,企业微信服务转发过来的消息是经过加密的,需要我们自己解密。

原始发过来的消息示例如下:

在这里插入图片描述

解密代码:

user_message = request.data
msg_signature = request.args.get('msg_signature', '')
timestamp = request.args.get('timestamp', '')
nonce = request.args.get('nonce', '')
ret, sMsg = qy_api[i].DecryptMsg(user_message.decode('utf-8'), msg_signature, timestamp, nonce)
decrypt_data = {}
for node in list(fromstring(sMsg.decode('utf-8'))):
    decrypt_data[node.tag] = node.text
print(decrypt_data)

解密完之后的消息内容:

在这里插入图片描述

1.3 对消息内容进行处理,并封装回复的消息体

得到明文的消息内容之后,我们就可以对其进行相应的处理,并给出回复了。

示例代码如下,如果用户发过来一个“我帅吗”,就给用户回复一个“帅得一逼”

# 处理文本消息
if decrypt_data.get('Content', '') == '我帅吗':
    sRespData = """<xml>
        <ToUserName>{to_username}</ToUserName>
        <FromUserName>{from_username}</FromUserName> 
        <CreateTime>{create_time}</CreateTime>
        <MsgType>text</MsgType>
        <Content>{content}</Content>
        </xml>
        """.format(to_username=decrypt_data['ToUserName'],
                from_username=decrypt_data['FromUserName'],
                create_time=decrypt_data['CreateTime'],
                content="帅得一逼",)

最后,封装完之后不要忘了加密:

ret, send_msg = qy_api[i].EncryptMsg(sReplyMsg=sRespData, sNonce=nonce)
if ret == 0:
    return send_msg
else:
    print(send_msg)

1.4 运行效果

在这里插入图片描述

成功!

2. 完整代码

参考:https://gist.github.com/GentleCP/5d02f4e84b8c8905bcf67643223cd499

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask, request, make_response
from company_wechat_verify.WXBizMsgCrypt3 import WXBizMsgCrypt
from xml.etree.ElementTree import fromstring

app = Flask(__name__)

import xml.etree.ElementTree as ET   
def printXML(xml_content):
    # 创建XML元素
    element = ET.XML(xml_content)

    # 使用indent()函数进行格式化打印
    ET.indent(element)
    print(ET.tostring(element, encoding='unicode'))

qy_api = [
    WXBizMsgCrypt("xxx", "xxx", "xxx"), 
] #对应接受消息回调模式中的token,EncodingAESKey 和 企业信息中的企业id

# 开启消息接受模式时验证接口连通性
def signature(request, i): 
    msg_signature = request.args.get('msg_signature', '')
    timestamp = request.args.get('timestamp', '')
    nonce = request.args.get('nonce', '')
    echo_str = request.args.get('echostr', '')
    ret,sEchoStr=qy_api[i].VerifyURL(msg_signature, timestamp, nonce, echo_str)
    if (ret != 0):
        print("ERR: VerifyURL ret: " + str(ret))
        return("failed")
    else:
        return(sEchoStr)

def handle_user_message(request, i):
    '''
    接收用户消息,可进行被动响应
    '''
    user_message = request.data
    printXML(user_message)
    msg_signature = request.args.get('msg_signature', '')
    timestamp = request.args.get('timestamp', '')
    nonce = request.args.get('nonce', '')
    ret, sMsg = qy_api[i].DecryptMsg(user_message.decode('utf-8'), msg_signature, timestamp, nonce)
    decrypt_data = {}
    for node in list(fromstring(sMsg.decode('utf-8'))):
        decrypt_data[node.tag] = node.text
    # 解析后得到的decrypt_data: {"ToUserName":"企业号", "FromUserName":"发送者用户名", "CreateTime":"发送时间", "Content":"用户发送的内容", "MsgId":"唯一id,需要针对此id做出响应", "AagentID": "应用id"}
    # 用户应根据Content的内容自定义要做出的行为,包括响应返回数据,如下例子,如果发送的是123,就返回hello world
    print(decrypt_data)
            
    # 处理文本消息
    if decrypt_data.get('Content', '') == '我帅吗':
        sRespData = """<xml>
            <ToUserName>{to_username}</ToUserName>
            <FromUserName>{from_username}</FromUserName> 
            <CreateTime>{create_time}</CreateTime>
            <MsgType>text</MsgType>
            <Content>{content}</Content>
            </xml>
            """.format(to_username=decrypt_data['ToUserName'],
                    from_username=decrypt_data['FromUserName'],
                    create_time=decrypt_data['CreateTime'],
                    content="帅得一逼",)
            
    ret, send_msg = qy_api[i].EncryptMsg(sReplyMsg=sRespData, sNonce=nonce)
    if ret == 0:
        return send_msg
    else:
        print(send_msg)

@app.route('/company_wechat', methods=['GET', 'POST']) 
def company_wechat():
    if request.method == 'GET':
        return signature(request, 0)
    else:
        print("收到请求......")
        return handle_user_message(request, 0)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80, debug=True)

3. 遇到的坑

其实也不能算是坑,应该算是惊吓。

刚开始没看具体发来的消息是什么,只是在收到请求的时候打了一行日志,结果… 发现一直在收到请求,着实吓到我了,不得不关了服务… 。
在这里插入图片描述
原本以为这是回复失败的尝试,但说明文档中说了只会重试3次,这里这么多请求,都是什么?

它其实是 Location 类型的消息,基本1s一次。

在这里插入图片描述

有这个消息的原因,是我在API接收消息是,勾选了 上报地理位置,并且在手机上,开启了位置权限。

在这里插入图片描述

如果觉得本文对你有帮助,麻烦点个赞和关注呗 ~~~


  • 大家好,我是 同学小张,日常分享AI知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜同学小张 🙏

本站文章一览:

在这里插入图片描述

<think>好的,用户现在想知道如何在企业微信中接智能客服。之前他们问过AI知识库和智能客服的交互,现在可能是在实际应用中遇到了具体问题,需要具体的操作导。首先,我需要确认用户的使用场景,可能是企业用户希望整合现有的企业微信系统,提升客户服务效率。 用户身份可能是企业的IT管理员或者客服负责人,他们需要技术实现的步骤。用户的需求不仅仅是步骤,可能还包括一些注意事项和最佳实践,比如如何选择服务商,如何测试,如何优化体验等。此外,用户可能还关心成本、集成难度以及后续维护的问题。 接下来,我需要整理接企业微信智能客服的主要步骤。首先,注册企业微信是基础,然后选择智能客服服务商,比如腾讯云、环信或者自研。每个步骤需要详细说明,比如在服务商后台配置,获取API密钥,设置回调地址等。然后是企业微信端的配置,包括应用创建、权限设置、安装应用等。 可能用户会忽略一些细节,比如回调地址的配置,或者会话存档的开启,这些需要特别提醒。另外,测试环节也很重要,要确保功能正常,尤其是消息接收和知识库调用是否准确。最后,上线后的监控和优化也是持续运营的关键。 需要确保回答清晰,分步骤说明,给出示例,比如API接口的参数示例,帮助用户理解。同时,比较不同服务商的优缺点,帮助用户做出选择。可能用户对技术术语不太熟悉,需要用通俗的语言解释,比如回调地址的作用,会话存档的重要性等。 还要考虑用户可能的后续问题,比如如何处理用户隐私,如何集成到现有系统,是否需要二次开发等。因此,在回答中可以加一些注意事项,比如合规性检查,权限控制,用户体验优化等,提前解答用户的潜在疑问。 最后,总结整个流程,强调关键点,比如选择服务商、配置流程、测试和优化,确保用户有一个全面的了解,能根据引进行操作。</think>微信中接智能客服,可通过**API对接**或**第三方服务商工具**实现,以下是详细操作步骤与核心逻辑: --- ### **一、接前准备** 1. **注册企业微信** - 完成企业认证(需营业执照),获得`企业ID`、`Secret`等关键凭证。 2. **选择智能客服服务商** - **平台型**:腾讯云智聆、环信、网易七鱼等(直接调用API) - **自研型**:基于开源框架(Rasa/Dialogflow)开发后对接 --- ### **二、主流接方案** #### **方案1:使用企业微信原生API(适合技术团队)** **步骤说明:** 1. **创建自建应用** - 进企业微信后台 → 应用管理 → 创建应用(如“智能客服助手”) - 记录`AgentId`、`Secret`用于消息收发权限 2. **配置消息接收** - 开启API接收消息 → 设置`Token`、`EncodingAESKey`、回调URL(需服务器支持验证) ```python # 示例:验证消息签名(Python) import hashlib def verify_signature(token, timestamp, nonce, msg_encrypt, signature): sort_list = sorted([token, timestamp, nonce, msg_encrypt]) sha1 = hashlib.sha1() sha1.update("".join(sort_list).encode('utf-8')) return sha1.hexdigest() == signature ``` 3. **实现消息交互逻辑** - 用户消息触发企业微信推送至服务器 → 调用智能客服引擎 → 返回答案到企业微信接口 ```http POST https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN { "touser": "USERID", "msgtype": "text", "agentid": 1000002, "text": {"content": "AI生成的回复内容"} } ``` #### **方案2:通过第三方平台快速接(推荐非技术团队)** **以「微炬云」为例的配置流程:** 1. **服务商后台配置** - 在微炬云绑定企业微信 → 授权通讯录、客户联系等API权限 2. **机器人训练** - 上传知识库文档(支持PDF/Excel)、设置问答意图(如“订单查询→关联ERP系统”) 3. **渠道部署** - 将机器人绑定到企业微信「客户联系」或「群聊」,设置自动应答规则 - 示例:当用户发送关键词“退货” → 自动推送退货流程图及表单链接 --- ### **三、关键功能配置** 1. **会话分配策略** - **分流规则**:按客户标签(如VIP等级)分配至人工或AI - **兜底机制**:AI无法回答时转接定客服成员 2. **知识库同步** - 通过企业微信「素材库」同步产品资料 → 智能客服自动抓取更新 - 使用`企微API`动态更新问答库: ```http POST https://api.weixin.qq.com/customservice/kfaccount/update?access_token=TOKEN { "kf_account": "test@test", "knowledge_base": {"articles": [{"title":"退换货政策", "content":"..."}]} } ``` 3. **数据打通** - 对接企业微信「客户画像」→ 智能客服调用用户历史订单、沟通记录 - 示例:用户问“我的订单状态” → AI自动查询最近订单反馈物流信息 --- ### **四、高阶场景实现** 1. **群聊机器人** - 在内部群/@机器人提问 → 自动检索知识库(如“@客服助手 年假怎么计算?”) - 配置令:`/ai 问题内容` 触发智能应答 2. **工单系统联动** - AI识别用户需求 → 自动创建工单(如“设备报修”) → 同步至企业微信「审批」流程 ```json // 工单创建API请求体示例 { "creator": "userid", "template_id": "T2024", "apply_data": {"故障类型":"网络中断", "紧急程度":"高"} } ``` 3. **会话存档合规** - 开通企业微信「会话内容存档」功能 → 智能客服对话记录自动加密存储 --- ### **五、注意事项** 1. **权限控制** - 敏感接口(如客户信息读取)需二次授权,遵循最小权限原则 2. **性能优化** - 设置消息频率限制(如每秒10次请求),避免API调用超限(企业微信默认限流2000次/分钟) 3. **合规检查** - 需明示用户正在与AI对话(如添加“[智能助理]”前缀) - 医疗/金融等领域需人工复核关键答案 -- ### **六、调试与监控** 1. **测试工具** - 使用企业微信开发者工具」模拟用户消息(支持文本/图片/文件等类型) 2. **日志分析** - 通过`corpid`+`msgid`追踪对话链路,定位AI误答原因 3. **效果标** - 监控「首次响应时长」「问题解决率」「转人工率」优化知识库 --- 通过以上步骤,企业微信可在**1-3天**内完成智能客服部署,实现80%以上常见问题的自动化处理,同时保留人工无缝介的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

同学小张

如果觉得有帮助,欢迎给我鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值