微信小程序自动回复机器人(模拟云信案例)

article/2025/8/22 19:22:12

1.场景:

输入关键词,对内容库进行检索,得到搜索结果,反馈给用户。其实也不算是机器人,也类似于搜索的样子,只不过以聊天界面的形式展现出来,当然了,在完成这个流程的过程中,也会出现一些问题,思路记录,仅供参考。

2.思路:

2.1 毋庸置疑,首先搭建前端界面(这块没什么可说的,对方和自己的样式最好大多数一样,通过一个‘me’和‘you’来进行区分,比较好);

2.2 逻辑处理部分(数据缓存处理):

有些可能需要做消息的缓存处理,利用‘键名’和‘键值’保存即可(但当然了,这不是惠话)。如果业务比较简单,一个城市,一个机器人,不要判断今天是今天(有些场景可能会涉及默认消息,比如默认消息,今天只发送一次,然后等明天再发送,怎么判断今天是今天)。所以如下:

2.2.1这里最好以城市加一个后缀或者前缀为键值,对发送过的消息进行做缓存处理。把城市做键值,缓存的消息体以json格式(外层数组方便遍历,数组内层每项以对象形式,对象中每一项通过键值对的方式,添加自己所需要的字段内容即可)。

2.2.2 判断今天是否发过默认消息(判断今天是今天),通过时间来区分,时间是唯一的。每发送一条消息时,获取时间(只取年月日),每次发送时从缓存中取时间,若缓存中无时间或缓存中的时间和当前时间不一致则把当前时间存入缓存并发送默认消息,若缓存时间和当前时间一致则不用更新缓存时间。每次发送消息都需要更新本地缓存记录。

2.2.3 缓存的消息一般需要做条数限制(因为小程序对缓存大小有上限),每发一条消息取出缓存中的消息把这条消息加入到取出的数组中,同时判断这个取出的数组长度是否大于最大条数限制,如果超过了就把取出的数组的第一删掉,如果没超过则不用管,然后再把取出的数组存入缓存中即可。

3.代码

3.1wxml

<view class='chating-wrapper'><!--消息展示--><view class='record-wrapper'><view wx:if="{{current_list.length}}"><block wx:for="{{current_list}}" wx:for-item='list' wx:for-index='listidx'><!-- 收 --><view class="record-chatting-item {{list.kind=='you'?'other':''}}" wx:if="{{list.kind=='you'}}"><view class="record-chatting-item-img"></view><view class="record-chatting-item-text qst"><view class='qst-ul'><view class="qst-li">{{list.list_ul}}</view></view></view></view><!-- 发 --><view class="record-chatting-item {{list.kind=='me'?'self':''}}"  wx:if="{{list.kind=='me'}}"><view class="record-chatting-item-text qst"><view class='qst-ul'><view class="qst-li">{{list.list_ul}}</view></view></view><view class="record-chatting-item-img"></view></view></block></view></view>
</view>
<!--输入框-->
<view class="chatinput-wrapper {{input_flag?'mb16':''}}"><view class="chatinput-content flex alignC flexSb"><view class="chatinput-img"></view><view class='chatinput-inputOut'><input class='chatinput-input' bindinput='inputChange' bindconfirm='inputSend' placeholder='请输入关键词"' confirm-type='send' value='{{inputValue}}' bindfocus='inputFocus' bindblur='inputBlue'></input></view><view class='chatinput-sendOut'><view class='chatinput-send' catchtap='inputSend'>发送</view></view></view>
</view>

3.2wxss

page {height: 100%;background-color: #f3f4f6;
}.chating-wrapper {width: 100%;min-height: 100%;position: relative;box-sizing: border-box;background: #f6f6f6;
}.record-chatting-item {width: 100%;padding: 28rpx 23rpx 0;box-sizing: border-box;
}.record-chatting-item-img, .open-data-userAvatarUrl {width: 70rpx;height: 70rpx;border-radius: 100%;display: block;overflow: hidden;
}.other {display: flex;flex-direction: row;justify-content: flex-start;color: #222;
}.other .record-chatting-item-text {margin-left: 20rpx;margin-right: 0;
}.self {display: flex;flex-direction: row;justify-content: flex-end;color: #fff;
}.record-chatting-item-text {width: 455rpx;border-radius: 8rpx;background-color: #fff;padding: 26rpx;box-sizing: border-box;word-wrap: break-word;overflow: hidden;font-size: 26rpx;line-height: 42rpx;box-shadow: 0 0 8rpx #dedede;
}.qst-li {font-size: 26rpx;line-height: 1.1;padding: 16rpx 6rpx;border-bottom: 1rpx solid #d9d9d9;
}.qst-li:last-child {border: none;
}/*底部输入框*/.chatinput-wrapper {width: 100%;background-color: #fff;border-bottom: 1rpx solid gray;position: fixed;bottom: 0;left: 0;height: 92rpx;
}.chatinput-img {width: 59rpx;height: 59rpx;border-radius: 100%;
}.other .record-chatting-item-img,.chatinput-img,.self .record-chatting-item-img {background-image: url(data:image/png;base64,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);background-repeat: no-repeat;background-position: center;background-size: 100%;
}.chatinput-content {width: 100%;height: 92rpx;box-sizing: border-box;padding: 0 24rpx;
}.chatinput-inputOut {width: 490rpx;height: 60rpx;position: relative;box-sizing: border-box;padding-left: 20rpx;padding-right: 20rpx;background: #f0f0f0;border-radius: 60rpx;
}.chatinput-inputmask {width: 490rpx;height: 60rpx;position: absolute;left: 0;top: 0;border-radius: 60rpx;z-index: 2;
}.chatinput-input {width: 100%;height: 60rpx;border-radius: 60rpx;border: none;display: inline-block;vertical-align: top;font-size: 28rpx;color: #212121;background: #f0f0f0;
}.chatinput-sendOut {width: 90rpx;height: 60rpx;position: relative;
}.chatinput-sendmask {width: 90rpx;height: 60rpx;position: absolute;left: 0;top: 0;border-radius: 60rpx;color: #fff;background: #d0d0d0;line-height: 60rpx;font-size: 26rpx;
}.chatinput-send {width: 90rpx;height: 60rpx;line-height: 60rpx;text-align: center;border-radius: 60rpx;color: #fff;font-size: 26rpx;background-color: orange;
}.flex {display: flex;
}.alignC {align-items: center;
}.flexSb {justify-content: space-between;
}.self .record-chatting-item-text {background: #38adfa;margin-right: 20rpx;margin-left: 0;
}.mb16{margin-bottom: 16rpx;
}.record-wrapper{padding-bottom: 122rpx;
}

3.3 js

var app = getApp();
Page({/*** 页面的初始数据*/data: {// 输入框的值inputValue: '',// 当前聊天数据的列表的indexcurrent_index: 0,// 数据列表 current_list: [],// 缓存最多存的消息条数max_length: 5,// 是否聚焦input_flag: false,// 城市mycity: 'bj'},/*** 生命周期函数--监听页面显示*/onShow: function() {var that = this;// 首先从缓存中拿缓存的值,若有,则优先渲染that.getRecord();},// 获取缓存记录getRecord() {var that = this;var current_list = that.data.current_list;var key_time = 'my' + that.data.mycity + 'time';var key_list = 'my' + that.data.mycity + 'list';// 初始化var myRecord_time = (wx.getStorageSync(key_time) == undefined || wx.getStorageSync(key_time) == '') ? '' : wx.getStorageSync(key_time);var myRecord_list = (wx.getStorageSync(key_list) == undefined || wx.getStorageSync(key_list) == '') ? '' : wx.getStorageSync(key_list);if (myRecord_time && myRecord_list.length) {console.log(myRecord_list)that.setData({current_list: myRecord_list,current_index: myRecord_list.length}, function() {that.scrollToBottom();});}},// 创建缓存记录setRecord(par_kind, par_list) {var that = this;var current_list = that.data.current_list;var key_time = 'my' + that.data.mycity + 'time';var key_list = 'my' + that.data.mycity + 'list';// 初始化var myRecord_time = (wx.getStorageSync(key_time) == undefined || wx.getStorageSync(key_time) == '') ? '' : wx.getStorageSync(key_time);var myRecord_list = (wx.getStorageSync(key_list) == undefined || wx.getStorageSync(key_list) == '') ? [] : wx.getStorageSync(key_list);if (!myRecord_time) {wx.setStorage({key: key_time,data: myRecord_time,});}if (!myRecord_list) {wx.setStorage({key: key_list,data: [],});}myRecord_time = wx.getStorageSync(key_time);// 如果缓存中没有时间 或者 和今天的截止时间不一致时,须把今天的截止日期赋给它,同时发送默认消息,同时把截止日赋值给缓存,同时发送默认消息,同时把默认消息开关设置为trueif (myRecord_time == '') {myRecord_time = get_endtime();// 用最新的覆盖wx.setStorage({key: key_time,data: myRecord_time,});}// 列表(将获取到的数据从头部添加,相当于最新的)var listdata = {'kind': par_kind,'list_ul': par_list};if (par_kind && par_list) {myRecord_list.push(listdata)}// 如果超过最大长度,需要截断if (myRecord_list.length > that.data.max_length) {myRecord_list.splice(0, 1)}wx.setStorage({key: key_list,data: myRecord_list,});},// 改变消息列表change_list(par_kind, par_list) {var that = this;var current_index = that.data.current_index;var data_key = "current_list[" + that.data.current_index + "]";var listdata = {'kind': par_kind,'list_ul': par_list};that.setData({current_index: current_index + 1,[data_key]: listdata,});if (par_kind == 'me') {that.setData({inputValue: ''});}},/*** 文本框输入事件*/inputChange(e) {var that = this;that.setData({inputValue: e.detail.value,});},// 发送消息inputSend() {var that = this;var inputValue = that.data.inputValue;if (inputValue) {var param = {city: that.data.mycity,keyword: inputValue,}// 创建记录 往上滚动that.scroll_record_list('me', inputValue);// 搜索结果var num_arr = ["你好哇", "我是元气满满的萌妹子", "你问这个干什么", "尼古拉·阿列克谢耶维奇·奥斯特洛夫斯基", "我在你的内心深处"];var num = Math.floor(Math.random() * 5);console.log(num)if (num != 6) {that.scroll_record_list('you', num_arr[num]);} else {that.scroll_record_list('you', '没有搜索到"' + inputValue + '"相关内容');}}},// 聚焦,失焦inputFocus(e) {var that = this;that.setData({input_flag: true});},inputBlue() {var that = this;that.setData({input_flag: false});},// 创建记录,同时页面往上滚动scroll_record_list(par_kind, par_list) {var that = this;// 改变消息列表that.change_list(par_kind, par_list);// 创建记录that.setRecord(par_kind, par_list);// 往上滚动that.scrollToBottom();},/*** 滚动页面到底部*/scrollToBottom() {wx.pageScrollTo({scrollTop: 999999,duration: 100});},
})// 获取当日23:59:59时间
function get_endtime() {var time_end = new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1);var time_format = format_date(time_end)return time_format;
}// 获取当前时间的  年月日时分秒  的时间格式化 20191220100246
function format_date(now) {var year = now.getFullYear(); //年var month = now.getMonth() + 1; //月var day = now.getDate(); //日var hh = now.getHours(); //时var mm = now.getMinutes(); //分var ss = now.getSeconds(); //秒var clock = year + "";if (month < 10) {clock += "0";}clock += month + "";if (day < 10) {clock += "0";}clock += day + "";if (hh < 10) {clock += "0";}clock += hh + "";if (mm < 10) {clock += '0'}clock += mm;if (ss < 10) {clock += '0'}clock += ss;return clock;
}

4.效果

 

5.说明

5.1 最好封装一个滚动函数,每次发送消息或者每次一进入页面从缓存中读取数据并赋值给当前渲染的数组以后页面就会渲染更新,此时也需要将页面滚动到最底部才比较合理,封装滚动函数后在这两个地方可直接调用就好了;

5.2 键盘需要做一个底部悬浮,但你会发现 position:fixed;bottom:0 当键盘弹起后,键盘会贴着input的底框框,此时需要做一个聚焦和失焦的处理,聚焦(也就是键盘弹起后给以margin-bottom),失焦的时候再把底部的margin-bottom去掉即可;

5.3 最开始我还想过通过index做键值的方式对消息缓存更新,后来感觉会有问题(index不靠谱,会出现重复,如果我发了二十条,有一个index二十,明天只取十条,我明天再发到第二十条的index就和之前的index值一样了)(这条可忽略);

5.4 对于键盘弹起的问题,如果页面消息比较少会存在键盘把消息顶上去的情况,其实对于顶的情况,微信和QQ都是默认让顶的(这样每次都能保证在输入框聚焦的时候,能看到最后一条消息,这也时合理的)。如果你有特别的需要,你们公司产品不让顶上去,可以参考(思路:键盘固定,聚焦也固定,当消息比较多的时候,会挡住最后几条)。其实对于需要顶或者不顶各有优劣吧,根据自己需求取舍。


http://chatgpt.dhexx.cn/article/yXjeyLSi.shtml

相关文章

微信话术自动回复机器人软件

购买地址 &#xff1a; https://item.taobao.com/item.htm?ftt&id644635811302自动通过好友验证以及计数 1.设置通过好友验证时长&#xff0c;一般为2-3秒 2.设置启用新好友信息之后&#xff0c;通过的新好友自动发送保存好的文字/表情 3.好友计数指的是已经添加通过验证…

微信机器人自动回复(python实现)

微信机器人自动回复&#xff08;python实现&#xff09; 准备工作&#xff1a; 自动回复利用了图灵机器人的智能问答&#xff0c;需要在图灵网创建一个机器人&#xff0c;这时会得到一个apike 1、安装python以及python编译器 2、复制粘贴代码 import itchat import requests…

用Python做个微信自动回复机器人

微信已经成为我们生活不可或缺的一部分&#xff0c;每天有380亿条消息从微信上发出&#xff0c;其中6亿条是语音消息&#xff0c;有350万个活跃的公众账号&#xff0c;并存在着8亿活跃粉丝。微信是一个庞大的生态群体。 今天我们来玩转一下微信&#xff0c;微信有关的第三方框…

微信自动回复的智能聊天机器人怎么做?

wx微信简单话术群消息同步机器人,简单明了效率高。 工具 先安装微信特定版本3.0.0.57,后打开WeiChatTool.exe运行使用/操作 操作主界面如下: 自动通过好友验证以及计数 1.设置通过好友验证时长,一般为2-3秒 2.设置启用新好友信息之后,通过的新好友自动发送保存好的文字/…

如何用 30 行代码实现微信自动回复机器人?

作者 | Ahab 责编 | 胡巍巍 写在前面 很多朋友对itchat非常感兴趣&#xff0c;近日又学到了itchat另一种有趣的玩法——微信自动回复机器人。 程序很简单仅仅三十行代码左右&#xff0c;实现了机器人自动与你的微信好友聊天&#xff0c;下面是我的机器人小笼包跟自己微信好友聊…

手把手教你实现一个微信自动回复机器人

RebateBot 返利机器人 微信聊天机器人代码 项目地址 项目描述 关键词: 返利 微信 阿里妈妈 机器人 跨平台 返利机器人&#xff0c;基于微信建立机器人通道与用户通过聊天快速生成返利链接 利用闲置微信和极小的电脑性能开启24小时无人轮值返利机器人 购物只需要发送链接给…

超简单Python实现微信机器人自动回复

下面这个小文章适合初学Python的童鞋哦~~~ 一个很好用的微信库&#xff1a;itchat 拿使用图灵机器人设置自动回复&#xff0c;让机器人跟微信好友傻傻的聊天&#xff0c;机器人比小编还会聊天&#xff0c;无论是对美眉还是汉纸&#xff0c;上来就是爱&#xff01;爱&#xff…

怎么做一个微信自动回复的智能聊天机器人?

微信自动回复机器人的操作很简单&#xff0c;只需要完成30行代码&#xff0c;就可以让机器人实现查天气、查星座运势、智能回复、关键词回复等功能。 下面我们看个例子&#xff1a; 在程序设定时通过itchat获取微信信息&#xff0c;将微信消息传输到机器人的接口&#xff0…

微信自动回复机器人使用教程

第一步&#xff0c;打开软件&#xff0c;选择关键词回复一栏 第二步&#xff1a;单击鼠标右键选择添加一个词&#xff0c;设置好关键词&#xff0c;回复词&#xff0c;选择回复到哪个微信群即可。 第三步&#xff1a;测试一下效果 第四步&#xff1a;操作就是这么简单&#xff…

如何训练创建一个聊天自动回复的微信机器人(一)

如何创建一个聊天自动回复的微信机器人&#xff08;一&#xff09; 这里&#xff0c;本来打算用一个微信号来做机器人的&#xff0c;但是机器人有几个缺点 1、如果任意一个人想使用机器人的话&#xff0c;那么必须添加机器人为好友才能使用测试 2、基于微信识别异常微信号的自…

Python几十行代码轻松实现微信自动回复机器人

Python几十行代码轻松实现微信自动回复机器人 最近因为太无聊了就考虑能不能做一些好玩的东西出来&#xff0c;正好在CSDN的推荐上看到大佬做的微信自动回复机器人&#xff0c;觉得很有趣&#xff0c;因此想着自己也能动手做一个。在此就写下我的具体思路和实现过程吧。 首先&…

多核CPU算法

多核CPU环境下的进程调度算法有哪些&#xff0c;与单核CPU环境下的进程调度有何不同&#xff1f; 多核CPU调度算法 全局队列调度 操作系统维护一个全局的任务等待队列。当系统中有一个CPU核心空闲时&#xff0c;操作系统就从全局任务等待队列中选取就绪任务开始在此核心上执…

多CPU和多核CPU对应多进程和多线程调度

目录 cpu架构和工作原理多核cpu和多cpu 架构cpu的缓存进程和线程进程和线程在多核cpu&#xff0c;多cpu中的运行关系 cpu架构和工作原理 计算机有5大基本组成部分&#xff0c;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入和输出。运算器和控制器封装到一起&a…

单核CPU vs. 多核CPU

单核CPU vs. 多核CPU 单核CPU 起源&#xff1a; CPU的起源是1971年英特尔公司推出&#xff0c;由此正式宣告计算机的诞生&#xff0c;可以说是世界级的改变&#xff0c;并且严格准守冯诺依曼体系结构&#xff0c;在英特尔推出CPU之前的计算机所使用的处理器工作是非常麻烦的…

多核计算机是指有多个cpu,多核和多个CPU有什么区别?

多核和多个CPU有什么区别&#xff1f; 多核和多个CPU有什么区别&#xff1f;首先让我们了解以下两项: 什么是多核CPU&#xff1f;简单的理解是&#xff0c;我们将多个内核加载到一个程序包中&#xff0c;让用户了解这是一个处理器. 这样做的好处是&#xff0c;最初在单台计算机…

多核CPU、多CPU与多进程、多线程关系

文章目录 1 cpu架构和工作原理2 多核cpu和多cpu架构3 进程和线程4 多核、多CPU与多线程、多进程的对应关系5 总结 1 cpu架构和工作原理 计算机有5大基本组成部分&#xff0c;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入和输出。运算器和控制器封装到一起&…

多核与多处理器的区别

一、定义 多核&#xff1a;单块CPU上面能处理数据的芯片组的数量&#xff0c;比如&#xff0c;双核就是包括2个相对独立的CPU核心单元组&#xff0c;四核就包含4个相对独立的CPU核心单元组。 多处理器&#xff1a;主板上实际插入的cpu数量&#xff0c;一般有两个或者多个处理…

多核CPU和单核的区别~

昨天有同学问我多核cpu和单核的区别大不大&#xff0c;今天简单写一篇回复下吧。大家有其他问题也可以文末给我留言&#xff0c;我会尽量抽时间写文回复。 首先回顾下基本概念&#xff0c;cpu&#xff0c;就是中央处理器&#xff0c;包括运算器和控制器。cpu的主要功能就是“一…

多核处理器结构

文章目录 一、多核处理器的发展演化二、多核处理器的访存结构2.1 通用多核处理器的片上Cache结构2.2 存储一致性模型2.3 Cache一致性协议 三、多核处理器的互连结构3.1 片上总线3.2 交叉开关3.3 片上网络 四、多核处理器的同步机制4.1 原子操作4.2 锁的软件实现方法4.3 屏障软件…

关于 CPU 的多核和超线程技术

1. 关于 CPU 的多核和超线程技术 CPU 的物理个数由主板上的插槽数量决定&#xff0c;每个 CPU 可以有多核心&#xff0c;每核心可能会有多线程。 多核 CPU 的每核(每核都是一个小芯片)&#xff0c;在 OS 看来都是一个独立的 CPU。 对于超线程 CPU 来说&#xff0c;每核 CPU …