再也不用花钱使用XX小客服了!
最近在做小程序,涉及到小程序引流到公众号的问题,
这一块微信做得极不友好,方法很多但都有局限性,
网上基本找不到相关的代码,感谢GPT,我这里给出一套确实可用的,希望可以帮助大家。
注意几点:
现在客服没法主动发消息,需要用户先主动发送,然后我们才能做出回复;
使用了自动回复后,人工客服将收不到消息;
发送图片没有实现,不过可以通过发送图片的链接卡片来引导用户
我的小程序客服回复逻辑如下:
用户发送任意内容 回复用户输入什么内容可以获得什么帮助
用户输入对应内容,返回对应消息,可以是文本消息或者链接卡片
可以一次回复多条消息。
下面我给出相应的完整python代码,你可以根据需要随意调整。
可以实现:
自动回复文字;
自动回复卡片链接;
自动回复多条消息
可以在用户发送任意消息时都回复;
使用方法见注释
如果实在不会 可以联系微信 WMeee-
from flask import Flask, request, abort
import hashlib
import json
import requests
"""
配置“消息推送”
进入小程序平台,选择左边栏“开发”->“开发设置”->“消息推送”->点击“启用”
填写配置,数据格式选择json,消息传输选择明文 token自定义
修改下面的配置,填写自己的小程序appid和appsecret 和 消息推送的token 消息加密密钥直接随机
"""
app = Flask(__name__)
TOKEN = "JG8vcz" # 填写自己的 token,与小程序后台填的一样即可
APPID = "wxedd72" # 填写自己的 AppID
SECRET = "e2d39f8f9e9" # 填写自己的 Secret
def get_access_token():
"""
获取微信公众号的访问令牌
"""
url = f'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={SECRET}'
result = requests.get(url).json()
if 'access_token' in result:
return result['access_token'] # 返回访问令牌
else:
print(f"Error getting access token: {result}")
return None
def request_api(json_data):
"""
发送自定义消息给用户
"""
access_token = get_access_token() # 获取访问令牌
# 构造发送消息的 URL
url = f"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={access_token}"
response = requests.post(url, data=json.dumps(
json_data, ensure_ascii=False).encode('utf-8'))
if response.json()['errcode'] == 0:
return 'success'
else:
return 'fail'
@app.route('/api/wxxcx', methods=['GET', 'POST'])
def wechat():
try:
if request.method == 'GET':
# 处理微信服务器验证请求
data = request.args
signature = data.get('signature')
timestamp = data.get('timestamp')
nonce = data.get('nonce')
echostr = data.get('echostr')
token = TOKEN
list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
[sha1.update(i.encode('utf-8')) for i in list] # 转换为 bytes 后再更新
hashcode = sha1.hexdigest()
if hashcode == signature:
return echostr
else:
abort(403)
elif request.method == 'POST':
# 处理用户发送的消息
post_data = request.get_json() # 获取请求数据
if post_data['MsgType'] == 'text': # 判断消息类型是否为文本消息
if '交流群' in post_data['Content'] or '交流' in post_data['Content'] or '客服' in post_data['Content']: # 判断消息内容
data1 = {
"touser": post_data['FromUserName'],
"msgtype": "link",
"link": {
"title": '加入群聊',
"description": '点我扫码加入交流群',
"url": 'https://fk.nnue.eu.org?code=YT02JmI9MTk%3D',
"thumb_url": 'https://fk.nnue.eu.org/favicon.ico',
}
}
data2 = {
"touser": post_data['FromUserName'],
"msgtype": "text",
"text": {
"content": '你好,点击链接卡片即可进入交流群,如需联系客服,咨询管理即可'
}
}
request_api(data1) # 发送自定义消息1
request_api(data2) # 发送自定义消息2
return 'success' # 返回成功
elif '兑换码' in post_data['Content'] or '兑换吗' in post_data['Content'] or '兑换' in post_data['Content']:
data1 = {
"touser": post_data['FromUserName'],
"msgtype": "link",
"link": {
"title": '获取兑换码',
"description": '点我获取小程序兑换码',
"url": 'https://fk.nnue.eu.org?code=YT02JmI9MTk%3D',
"thumb_url": 'https://fk.nnue.eu.org/favicon.ico',
}
}
data2 = {
"touser": post_data['FromUserName'],
"msgtype": "text",
"text": {
"content": '你好,点击链接卡片即可获取兑换码'
}
}
request_api(data1) # 发送自定义消息1
request_api(data2) # 发送自定义消息2
return 'success' # 返回成功
# elif post_data['Content'] == '3': # 判断文本内容是否为 '3'
# data = {
# "touser": post_data['FromUserName'],
# "msgtype": "text",
# "text": {
# "content": '你发送了3'
# }
# }
# return request_api(data)
else:
data = {
"touser": post_data['FromUserName'],
"msgtype": "text",
"text": {
"content": '欢迎来到元AI艺术二维码小程序,回复【兑换码】获取小程序点数兑换码,回复【交流群】即可进入小程序交流群,如需联系客服,进群后联系管理员即可。'
}
}
return request_api(data)
else:
data = {
"touser": post_data['FromUserName'],
"msgtype": "text",
"text": {
"content": '欢迎来到元AI艺术二维码小程序,回复【兑换码】获取小程序点数兑换码,回复【交流群】即可进入小程序交流群,如需联系客服,进群后联系管理员即可。'
}
}
return request_api(data)
else:
return 'Method not allowed', 405 # 返回错误信息和状态码
except Exception as e:
app.logger.error(f'An error occurred: {e}') # 记录错误日志
return 'Internal server error', 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5008, debug=True)
参与讨论