懒人精灵吧 关注:361贴子:817
  • 3回复贴,共1

一个智能回复助手的开发源码分享

只看楼主收藏回复

软件功能介绍:
1、可模糊匹配用户所发出的消息,例:房子位置在上海吗?软件可识别到“位置”二字,进行关键字回复。
2、可对房源位置进行回复文档调用区分,例:主文档中存放有 上海房源回复信息文档,北京房源回复信息文档,软件可以对用户发出的房源位置进行分析自动匹配出所需要调用的文档。
3、软件可以对新老客户进行区分,例如小明上午首次来问的时候软件会认为是新客户为其进行关键字匹配回复并可以跟加两条固定回复,如果小明下午再次来问,此时他已成为老客户,软件将会自动匹配回复并不会进行固定回复。
4、软件可以自动识别用户所发出的联系方式,包括发送的手机号,或者是微信,进行匹配回复,并且软件可以把此用户前后三条消息包括联系方式一并推送至微信,可以让客户在第一时间处理防止客户等待时间过长。
5、软件还有一些其他拟人功能就不细讲了。
因为源码超过字数限制没法在内容中发出以评论的形式发出,如果看不到源码大概率是被屏蔽了。。。
各位看官老爷子可以借鉴下写法,百人百种写法,各路高手如看出有哪处可优化的地方欢迎指导
↓↓↓源码在下方评论中↓↓↓


IP属地:河南1楼2023-10-08 12:04回复
    local 节点={详情={desc="详情"},地址加载完成={text="O1CN01mUYqI91hQAOHRsmBQ_!!6000000004271-2-tps-13-24.png_"},第二种地址加载完成={text="O1CN01dButtB20MwHglYMeb_!!6000000006836-2-tps-28-30.png_"},对话框={id="com.taobao.alihouse.broker:id/msgcenter_panel_input_edit"},消息页={text="消息"},}sleep(1000)function 详情加载() for i=1,5 do if nodeLib.findOne(0,0,0,0,节点.详情,true)~=nil then xs ("用户咨询最近详情加载成功") sleep(1000) return true else xs("等待用户咨询详情卡片加载中···") end sleep(1000) end return falseend
    while true do if nodeLib.findOne(0,0,0,0,节点.消息页,true)~=nil then xs("脚本初始化成功") break else xs("请手动打开天猫好房来客APP到消息页面") end sleep(2000)end
    while true do while true do if nodeLib.findOne(0,0,0,0,节点.消息页,true)~=nil then if 判断是否有新消息出现(进入前等待)==true then xs("出现新的消息") break else xs("脚本持续监控消息中···") end sleep(2000) else xs("注意非天猫好房来客APP消息页监控消息失效") end sleep(2000) 检测usb链接() end if 详情加载()==true then local 用户ID= 获取用户ID() local 识别新老客户=表匹配(用户信息,用户ID) local 通知内容="" local 通知标题="" local 用户消息内容= 获取用户消息() local 用户最新消息=用户消息内容[#用户消息内容] local 英数是否匹配成功=消息表英数匹配(用户消息内容) if 识别新老客户~=nil then--证明老客户 xs("老客户信息") if 英数是否匹配成功~=nil then 回复信息=英数话术 local 地址关键字=倒查表匹配(地址匹配回复文档,识别新老客户) 通知标题="机器名称:"..机器名称.."; 地址:"..地址关键字 通知内容="卡片信息:"..获取卡片内容()..";\n" for i=1,#用户消息内容 do 通知内容=通知内容.."用户第"..i.."条消息:"..用户消息内容[i]..";\n" end 微信消息通知(token,通知标题,通知内容) xs("脚本已向企业微信通知") else local 链接匹配文档=获取链接内容(识别新老客户) 回复信息=地址链接文档匹配(链接匹配文档,用户最新消息) end else xs("新客户信息") nodeLib.click(nodeLib.findOne(0,0,0,0,节点.详情,true)) while true do if nodeLib.findOne(0,0,0,0,节点.地址加载完成,true)~=nil or nodeLib.findOne(0,0,0,0,节点.第二种地址加载完成,true)~=nil then xs ("地址加载完成") local 待回复链接= 地址链接匹配(地址匹配回复文档,获取房源位置()) print(待回复链接) local 链接匹配文档=获取链接内容(待回复链接) print(链接匹配文档) 回复信息=链接匹配文档[1] print(回复信息) 表内成员添加(用户信息,用户ID,待回复链接) sleep(1000) keyPress("Back") while true do if nodeLib.findOne(0,0,0,0,节点.对话框,true)~=nil then xs ("对话框加载完成") break else xs("等待对话框加载中") end sleep(1000) end break else xs("地址加载中···") end sleep(1000) end end else local 待回复链接= 地址链接匹配(地址匹配回复文档,"我是未知滴") local 链接匹配文档=获取链接内容(待回复链接) 回复信息=链接匹配文档[1] end
    print(回复信息) if 回复信息~=nil and 回复信息~="" then xs("信息回复内容:"..回复信息) else xs("回复信息为空") end local 整合消息=splitStr(回复信息,"---") if #整合消息>1 then xs("本次消息回复为多条") for i=1,#整合消息 do 消息发送(整合消息[i]) sleep(500) end else xs ("本次消息回复为单条") 消息发送(回复信息) end sleep(1000) keyPress("Back") sleep(3000)end


    IP属地:河南2楼2023-10-08 12:07
    回复
      2025-12-27 06:39:01
      广告
      不感兴趣
      开通SVIP免广告
      function xs(参数) console.println(3,参数) toast(参数) print(参数)end
      function 开启日志窗口() local 屏幕X,屏幕Y = getDisplaySize() print("屏幕X="..屏幕X.." 屏幕Y="..屏幕Y) local 中心点X=math.floor(math.tointeger(屏幕X)*0.35) local 中心点Y=math.floor(math.tointeger(屏幕Y)*0.35) local 大小X=math.floor(math.tointeger(屏幕X)*0.65) local 大小Y=math.floor(math.tointeger(屏幕Y)*0.4) console.show() console.setTitle("脚本运行日志") console.clearLog() console.setPos(中心点X,中心点Y,大小X,大小Y) print("屏幕中心点X="..中心点X.." 屏幕中心点Y="..中心点Y)end
      function 无障碍判断() local r = isAccessibilityServiceRun() --无障碍服务是否开启 if r then xs("无障碍服务开启了") else for i=1,5 do xs("软件无障碍服务未开启请手动开启!") end exitScript() endendfunction 获取房源位置() local 局部节点={ 位置信息_兄弟节点={text="O1CN01mUYqI91hQAOHRsmBQ_!!6000000004271-2-tps-13-24.png_"}, 第二种位置信息_兄弟节点={text="O1CN01dButtB20MwHglYMeb_!!6000000006836-2-tps-28-30.png_"}, } local ret = nodeLib.findPreNode(局部节点.位置信息_兄弟节点,false) if ret ~= nil then xs("一类卡片") xs("房源位置:"..ret.text) print(ret.text) return ret.text else xs("二类卡片") local ret = nodeLib.findNextNode(局部节点.第二种位置信息_兄弟节点,false) if ret ~= nil then xs("房源位置:"..ret.text) print(ret.text) return ret.text else return "我是未知滴" end endend
      function 获取用户ID() local 局部节点={ 用户昵称父节点={id="com.taobao.alihouse.broker:id/main_title_item"} } local ret = nodeLib.findChildNodes(局部节点.用户昵称父节点,false) if ret ~= nil then xs("用户ID:"..ret[1].text) return ret[1].text else return false end end
      function 获取用户消息() local 对方消息={} local 索引=0 local ret = nodeLib.findAll({id="com.taobao.alihouse.broker:id/chat_msg_item_wrapper"},false) if ret ~= nil then for i=1,#ret do local 父类判断=ret[i] local r = nodeLib.findInNode(父类判断,{id="com.taobao.alihouse.broker:id/tv_user_name"},true,true) if r~= nil then local 内容 = nodeLib.findInNode(父类判断,{id="com.taobao.alihouse.broker:id/tv_chat_text"},true,true) if 内容~=nil then 索引=索引+1 对方消息[索引]=(内容[1].text) end end end end return 对方消息end
      function 判断是否有新消息出现(等待) local ret = nodeLib.findChildNodes({class="android.widget.LinearLayout",index="3",package="com.taobao.alihouse.broker"},false) if #ret > 1 then for i=1,等待 do xs("进入消息前已等待:"..i.."S 目标等待时长:"..等待.."S") sleep(1000) end nodeLib.click(nodeLib.findOne(0,0,0,0,{class="android.view.View",index="1",level="23"},true)) return true else print("没有新消息") return false endend
      function 消息发送(内容) nodeLib.matchOneAndInputText({id="com.taobao.alihouse.broker:id/msgcenter_panel_input_edit"},内容) sleep(1500) nodeLib.click(nodeLib.findOne(0,0,0,0,{text="发送"},true)) sleep(500)end
      function 表内成员添加(表,昵称,地址) 表[昵称]=地址end
      function 表匹配(表,ID) for i,k in pairs(表) do if i==ID then return k end end return nilendfunction 倒查表匹配(表,ID) for i,k in pairs(表) do local 匹配处理=splitStr(k,"---") if 匹配处理[2]== ID then return 匹配处理[1] end end return nilendfunction 地址链接匹配(待匹配表,待匹配地址) for i,k in pairs(待匹配表) do local 匹配处理=splitStr(k,"---") if string.find(待匹配地址, ".*"..匹配处理[1]..".*")~=nil then print(匹配处理[2]) return 匹配处理[2] end end return falseend
      function 地址链接文档匹配(表,内容) for i,k in pairs(表) do local 匹配处理=splitStr(k,"---") if #匹配处理>1 then if string.find(内容, ".*"..匹配处理[1]..".*")~=nil then print(匹配处理[2]) return 匹配处理[2] end end end xs("文档匹配失败") return 表[2]end
      function 消息表英数匹配(待匹配表) for i,k in pairs(待匹配表) do if 匹配英数消息(k)~=nil then xs(k) return k end end return nilend
      function 匹配英数消息(内容) if string.find(内容, "[a-zA-Z0-9\\s][a-zA-Z0-9\\s][a-zA-Z0-9\\s][a-zA-Z0-9\\s][a-zA-Z0-9\\s]")~=nil then--匹配用户消息是否存在英数 return 内容 else return nil endend
      function 获取链接内容(链接) local 临时存放={} local ret = httpGet(链接) cd=splitStr(ret,"\n") for i=1,#cd do 临时存放[i]=cd[i] end return 临时存放end
      function 微信消息通知(token,标题,内容) post内容="token="..token.."&title="..标题.."&content="..内容.."&channel=webhook&webhook=xianyu" local post请求=httpPost("http://www.pushplus.plus/send",post内容) xs("API通知回调:"..post请求) print(post请求)end
      function 获取卡片内容() local ret = nodeLib.findOne(0,0,0,0,{text="租房.*"},true) if ret ~= nil then xs("已获取卡片内容信息:"..ret.text) return ret.text endend
      function 检测usb链接() local ret = nodeLib.findOne(0,0,0,0,{text="传输文件"},true) if ret~=nil then toast("USB已链接选择传输文件") sleep(1000) nodeLib.click(ret) endend


      IP属地:河南3楼2023-10-08 12:08
      回复
        以上就是软件全部源码,如新手朋友有任何关于懒人上的问题欢迎私聊我,我将尽力解答٩(๑^o^๑)۶


        IP属地:河南来自Android客户端5楼2023-10-08 12:16
        回复