微信公众号集成文心一言API

news2024/11/26 12:47:17

要将微信公众号集成文心一言API,并使用Python语言和Flask技术实现,可以按照以下步骤进行操作:

  1. 安装必要的依赖项:首先,确保你的开发环境中已安装了Python和Flask库。你可以使用pip命令来安装它们,例如:pip install Flask
  2. 创建Flask应用:使用Flask库创建一个简单的Web应用,用于处理微信公众号的相关请求。你可以使用Flask的路由和视图函数来处理不同的请求。
  3. 配置微信公众号API:获取微信公众号API的密钥和秘钥,并配置Flask应用以使用这些密钥。这通常需要在Flask应用中进行一些设置或配置。
  4. 集成文心一言API:将文心一言API集成到你的微信公众号中,需要在Flask应用中实现一个或多个函数来与文心一言API进行交互。你需要获取文心一言API的API密钥,并将其与你的微信公众号进行关联。
  5. 测试与部署:测试你的Flask应用是否能够正确地处理微信公众号的相关请求,并与文心一言API进行交互。确保你的应用能够正确地返回结果,并与微信公众号的要求相匹配。
  6. 上线部署:将你的Flask应用部署到服务器上,以便公众可以通过微信公众号访问它。你可以选择使用云服务器、本地服务器或虚拟主机等方案来部署你的应用。
  7. 需要注意的是,具体的实现过程可能会因开发环境和需求而有所不同。此外,文心一言API的使用可能需要一些额外的配置和授权过程,具体细节可以参考其官方文档。
  8. 总的来说,使用Python语言和Flask技术来集成微信公众号与文心一言API是一个相对复杂的过程,需要具备一定的编程和Web开发经验。

from flask import Flask, request,jsonify,make_response
import erniebot
from gevent import pywsgi
import xml.etree.cElementTree as ET
import hashlib
import time

app = Flask(__name__)

@app.route('/wx',methods=['GET','POST'])
def wechat():
    if request.method == 'GET':
        signature = request.args.get("signature", "")
        timestamp= request.args.get("timestamp", "")
        nonce= request.args.get("nonce", "")
        echostr= request.args.get("echostr", "")
        print(signature, timestamp, nonce, echostr)
        token="微信公众平台设置的token与此处token一致" 
        data =[token, timestamp, nonce]
        data.sort()
        temp = ''.join(data)
        sha1= hashlib.sha1(temp.encode('utf-8'))
        hashcode=sha1.hexdigest()
        if hashcode == signature:
            return echostr
        else:
            return "error"
    else:
        xmlData = ET.fromstring(request.stream.read())
        msg_type = xmlData.find('MsgType').text
        print(msg_type)
        if msg_type == 'text':
            ToUserName = xmlData.find('ToUserName').text
            FromUserName = xmlData.find('FromUserName').text
            Content = ''
            erniebot.api_type = 'aistudio'
            #获取令牌 https://aistudio.baidu.com/index/accessToken
            erniebot.access_token = 'access_token'  
            try:
                response = erniebot.ChatCompletion.create(model='ernie-bot-turbo',messages=[ {'role': 'user','content': xmlData.find('Content').text}])
                Content= response.get_result()
            except e: 
                print(e)
            reply = '''
            <xml>
            <ToUserName><![CDATA[%s]]></ToUserName>
            <FromUserName><![CDATA[%s]]></FromUserName>
            <CreateTime>%s</CreateTime>
            <MsgType><![CDATA[text]]></MsgType>
            <Content><![CDATA[%s]]></Content>
            </xml>
            '''
            response = make_response(reply % (FromUserName, ToUserName, str(int(time.time())), Content))
            response.content_type = 'application/xml'
            return response
        elif msg_type == 'event':
            event_type = xmlData.find('Event').text
            if event_type== "subscribe":
                ToUserName = xmlData.find('ToUserName').text
                FromUserName = xmlData.find('FromUserName').text
                reply = '''
                <xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[text]]></MsgType>
                <Content><![CDATA[%s]]></Content>
                </xml>
                '''
                response = make_response(reply % (FromUserName, ToUserName, str(int(time.time())), "欢迎来到XXX微信公众号!"))
                response.content_type = 'application/xml'
                return response
        else:
            ToUserName = xmlData.find('ToUserName').text
            FromUserName = xmlData.find('FromUserName').text
            reply = '''
            <xml>
            <ToUserName><![CDATA[%s]]></ToUserName>
            <FromUserName><![CDATA[%s]]></FromUserName>
            <CreateTime>%s</CreateTime>
            <MsgType><![CDATA[text]]></MsgType>
            <Content><![CDATA[%s]]></Content>
            </xml>
            '''
            response = make_response(reply % (FromUserName, ToUserName, str(int(time.time())), "我看不太懂!"))
            response.content_type = 'application/xml'
            return response


if __name__=="__main__":
    #app.run()
    server = pywsgi.WSGIServer(('0.0.0.0',80),app)
    server.serve_forever()

这段代码是一个使用Python和Flask框架编写的微信公众号后台服务。它的主要目的是处理来自微信用户的消息,然后使用ErnieBot模型生成聊天回复。以下是代码的详细描述:

导入模块:

代码开始时导入了必要的模块和库,包括Flask、ErnieBot(假定是一个聊天机器人API)、Gevent、用于XML解析的xml.etree.cElementTree,hashlib用于哈希操作,以及time模块。

Flask应用程序设置:

代码初始化了一个Flask应用程序。
路由’/wx’:

这个路由处理来自微信的GET和POST请求。
对于GET请求,它用于验证微信服务器的真实性,比较接收到的signature(签名)与计算出的哈希值是否匹配。如果匹配,将返回echostr值以完成验证。如果不匹配,将返回错误消息。
对于POST请求,它处理来自微信的XML数据。它提取消息类型(MsgType)并检查是否为文本消息或事件。

处理文本消息:

如果是文本消息,它提取发送者和接收者的用户名以及文本内容。
然后,它为响应设置ErnieBot API,并将用户的消息传递给它。
最后,它构建一个XML响应,包含聊天机器人的回复,然后将响应发送回用户。
处理事件消息:

如果是订阅事件,它会回复欢迎消息。

对于其他事件类型或未处理的情况,它会回复一个通用的"我无法理解"消息。
主要执行部分:

代码通过Gevent服务器运行Flask应用程序,监听在0.0.0.0地址的80端口上。
需要注意的几点:

代码似乎缺少文本消息处理部分的错误处理。
需要将’access_token’替换为实际的访问令牌,这是与ErnieBot API交互所需的。
请根据微信公众号的设置将token替换为与微信服务器配置的token一致,以确保验证的安全性。

python环境 ≥ 3.8


pip install erniebot flask gevent 

看起来你需要在Python 3.8及以上环境中安装一些库,这些库包括: erniebot flask gevent 对于erniebotflask这两个库,它们是Python Web开发常用的库,主要用于构建Web应用。你可以使用pip来安装它们。pip是Python的包管理器,可以用于安装Python包。 在Python环境 ≥ 3.8的情况下,你可以使用以下命令来安装这些库: pip install erniebot flask gevent 如果你在安装过程中遇到任何问题,或者需要更具体的帮助,欢迎随时向我询问。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第六套区块链系统部署与运维

第六套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 子任务1-2-1: 搭建区块链系统并验证 题意: P2P起始端口 30500 channel起始端口 20500 JSONRPC 8945 使用Docker配置 使用 build_chain.sh 文件 进行生成节点文件 root@192-168-19-133:/yijiu/mode6# bas…

MySQL数据库#4

外键(表与表之间的关系) 什么是外键&#xff1a; 外键是指关系数据库中一个表中的字段&#xff0c;它与另一个表的主键相关联&#xff0c;用于建立两个表之间的关联关系。外键可以用来确保数据的完整性&#xff0c;通过检查关联表的主键来限制对于某个表的操作。当对主表进行操…

批量去除pdf每一页相同未知的同样的内容

例如我想去除每一页右下角的www.alevelcollege.com ①打开acrobat pro ②编辑文件和图像 ③ctrlF输入字符串www.alevelcollege.com替换为空 ④鼠标点击替换 ⑤回车键按下不放&#xff0c;会自动翻页&#xff0c;直到翻页到最后一页。

Spring Cloud Alibaba 教程 | Nacos 篇

Spring Cloud Alibaba 教程 | Nacos 篇 ​ 写在前面的话&#xff1a; 本笔记在参考网上视频以及博客的基础上&#xff0c;只做个人学习笔记&#xff0c;如有侵权&#xff0c;请联系删除&#xff0c;谢谢&#xff01; 1、使用nacos做服务的注册和发现 1、父工程项目pom <!…

三十九、【进阶】MySQL索引失效情况1

1、在索引列上进行运算操作 &#xff08;1&#xff09;基础表格 phone字段&#xff0c;存在一个单列索引。 &#xff08;2&#xff09;在索引列上进行运算操作 可以看到&#xff0c;在对phone字段进行运算操作之后&#xff0c;查询方式会变为“全表扫描”&#xff0c;导致索引…

【JAVA学习笔记】 51 - 日期类

项目代码 一、第一代日期类 1.Date: 精确到亳秒&#xff0c;代表特定的瞬间 2.SimpleDateFormat:格式和解析日期的类 3.SimpleDateFormat格式化和解析日期的具体类。它允许进行格式化(日期> 文本)、解析(文本->日期)和规范化 public class Date01 {public static voi…

C# Socket通信从入门到精通(5)——单个同步TCP服务器C#代码实现

前言: 我们在开发TCP通信程序时,除了开发TCP客户端程序,有时候我们也需要开发TCP服务器程序,这在实际项目中是经常会遇到的,所以说掌握TCP服务器程序的开发是一项必备的技能,尤其在上位机软件开发领域,掌握TCP服务器程序的开发是走向高级工程师的必经之路,也是面试必考…

山西电力市场日前价格预测【2023-10-30】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-30&#xff09;山西电力市场全天平均日前电价为309.35元/MWh。其中&#xff0c;最高日前电价为400.33元/MWh&#xff0c;预计出现在18:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

Qt实现卡牌对对碰游戏

效果 闲来无事&#xff0c;实现一个对对碰游戏&#xff0c;卡牌样式是火影动漫。 先上效果&#xff1a; 卡牌对对碰_火影主题 玩法 启动游戏&#xff0c;进入第一关卡&#xff0c;所有卡牌都为未翻开状态&#xff0c;即背面朝上&#xff1b;点击卡牌&#xff0c;则将卡牌翻开…

06、SpringCloud -- 订单详情界面实现

目录 订单详情界面实现需求:代码前端后端controllerservicemapperdomain效果:订单详情界面实现 需求: 现在的订单详情界面是这样的。需要获取订单的数据对这个详情页面进行渲染 代码 前端 后端 controller

C语言基础简述(一)

目录 1. 标准输入输出库 2. 定义变量 3. 关于基本数据类型 3.1 计算机如何存储数据 3.2 基本数据类型 3.2.1 数值类型 3.2.1.1 整数类型 3.2.1.2 浮点数类型 3.2.2 字符类型 3.2.2.1 ASCII表 4. 进制数之间的转换 4.1 十进制整数和二进制之间的相互转换 5. C语言运…

ArcGIS Maps SDK for JS:隐藏地图边框

文章目录 1 问题描述2 解决方案 1 问题描述 近期&#xff0c;将ArcGIS Api for JS v4.16更新到了ArcGIS Maps SDK for JS v4.27&#xff0c;原本去除地图的css代码失效了。 v4.26及以前版本 &#xff0c;需要用.esri-view-surface--inset-outline:focus::after 控制边框属性。…

Photoshop(PS)2021版 安装教程(图文教程超详细)

软件&#xff1a;PS版本&#xff1a;2021语言&#xff1a;简体中文大小&#xff1a;2.26G安装环境&#xff1a;Win11/Win10&#xff08;1809以上版本&#xff09;硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff0c;不支持7代以下CPU&#xff09;下载通道①百度网盘丨64位…

python随手小练11(南农作业题)

题目1&#xff1a; 计算阶乘的和 可以看出如下形式&#xff1a;12!3!...15! 12(13(14...(15(1)))) 具体操作&#xff1a; x int(input("输入数字&#xff1a;")) res 1 for i in range(x, 1 , -1):res (1 (i * res)) print("阶乘的和为&#xff1a;"…

【SoC基础】通信种类(串口与并口、)

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

生活日用品经营小程序商城的作用是什么

生活日用品如牙膏牙刷、护手霜等小产品是人们生活所需&#xff0c;传统客户会通过线下超市商场购买&#xff0c;但现在的消费者往往会选择线上渠道购买&#xff0c;省时省力坐在家里等货上门即可。 因此对商家来说&#xff0c;需要打通线上渠道才能获得更多生意&#xff0c;提…

微信小程序学习(03)

什么是生命周期函数 生命周期函数&#xff1a;是由小程序框架提供的内置函数&#xff0c;会伴随着生命周期&#xff0c;自动按次序执行。 生命周期函数的作用&#xff1a;允许程序员在特定的时间点&#xff0c;执行某些特定的操作。例如&#xff0c;页面刚加载的时候&#xff0…

Hexo + NexT 博客评论系统(Valine)配置小记

这几天刚配置了船新的 Hexo 博客&#xff0c;然后看到使用的 NexT 主题支持很多评论系统。我尝试配置了一下&#xff0c;发现里面坑太多了&#xff0c;真的挺费周章。于是想水一篇分享一下~ 1. 为什么不是…… NexT 主题一共支持如下的几个评论系统&#xff1a; 其中我觉得最…

测试时间函数

clock():测试时间函数 测试程序开始运行(即从main开始)到执行当前行需要的时间值,单位毫秒.需要引用time.h 例如&#xff1a;需要需要测试输出0~100需要的时间可以用如下代码&#xff1a; #include<stdio.h> #include<time.h>//单位是毫秒 int main() {clock_t c1…

07、SpringCloud -- jmeter 压测

目录 jmeter 入门jmeter 安装测试步骤测试数据模拟多用户操作1、创建http请求2、添加http cookie 管理器3、并发获取当前登录用户数据的效果4、添加多个用户模拟并发请求5、访问方法6、jmeter添加 CSV Data Set Config7、高并发执行访问的效果8、总结流程高并发秒杀压测jmeter …