微信API开发自动回复
- 格式:docx
- 大小:2.61 MB
- 文档页数:30
1.注册微信公众平台账号(推荐服务号,服务号可开发功能比订阅号多。
)服务号订阅号2.下载微信官方API(wx_sample.php文件),建议使用Dreamweaver打开。
3.进入微信公众号,点击“功能-> 高级功能”。
使用开发模式。
4.注册“百度开发者”账号(不要使用中文)。
注册完成之后,在右上角“开发者服务管理中”创建工程点击左侧菜单“应用引擎”选项,来添加环境配置。
部署类型选择php-web。
点击扩展服务,添加mysql 服务。
5.Svn设同步代码置。
先下载svn,可直接安装。
在任意位置新建文件夹(如:E:\\weixin)。
复制svn地址。
在E:\\weixin 文件夹右击,选择” SVN Checkout” ,将复制的svn地址粘贴到红框内提交,用户名和密码就是百度账号的用户名/密码。
将步骤2下载的wx_sample.php拉到weixin 目录下,右击选择“Add”再右击wx_sample.php,选择svn Commit ,填写提交信息后提交回到百度开发中心,工程状态会提示有新版(不显示刷新页面),点击快捷发布即可。
6.接口验证,需要url和Token的值。
打开wx_sample.php文件,第七行中的weixin为Token的值(可修改为你喜欢的值)。
url 的值为步骤4中域名/wx_sample.php,即/wx_sample.php。
7.关键词回复开发。
用Dreamweaver打开步骤2下载的wx_sample.php,在46行插入以下代码。
$msgType = "text";//回复信息类型为文本信息switch ( $keyword ){case "1"; //用户回复1,显示”公司简介”$contentStr = "公司简介";break;case "2";//用户回复1,显示”最新套餐”$contentStr = "最新套餐";break;default; //用户回复1、2以外的信息,显示”感谢您……”$contentStr = "感谢您关注川臂网络科技!回复“1”公司简介;回复“1”最新套餐";}选择Dreamweaver 修改---页面属性,将编码改为UTF-8保存,避免出现中文乱码。
微信公众号开发之⽂本消息⾃动回复php代码本⽂实例为⼤家分享了php微信⽂本消息⾃动回复别代码,供⼤家参考,具体内容如下2.wx_sample.php初始代码<?php/*** wechat php test*///define your tokendefine("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();$wechatObj->valid();class wechatCallbackapiTest{public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($this->checkSignature()){echo $echoStr;exit;}}public function responseMsg(){//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//extract post dataif (!empty($postStr)){/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,the best way is to check the validity of xml by yourself */libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$time = time();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";if(!empty( $keyword )){$msgType = "text";$contentStr = "Welcome to wechat world!";$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;}else{echo "Input something...";}}else {echo "";exit;}}private function checkSignature(){// you must define TOKEN by yourselfif (!defined("TOKEN")) {throw new Exception('TOKEN is not defined!');}$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);// use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}}>3.调⽤回复信息⽅法在wx_sample.php⽂件中注释掉$wechatObj->valid();,在其下增加⼀句“$wechatObj->responseMsg();”。
使⽤nodeJs开发微信公众号(设置⾃动回复消息)微信向第三⽅服务器发送请求时会降 signature 、timestamp、 nonce 、 openid(⽤户标识),发送内容会以 xml 的形式附加在请求中想要获取⽤户发送信息,需要从请求中获得 xml ,因此需要⽤到 raw-body(获得原⽣请求体)npm install raw-body --save接下来需要将xml从请求中分离并且格式化成jsonvar getRawBody = require('raw-body')var contentType = require('content-type')var data = getRawBody(req, {length: req.headers['content-length'],limit: '1mb',encoding: contentType.parse(req).parameters.charset}, function(err, buf) {utils.formatMessage(buf.toString()).then(message => {//判断消息,做出回应})})我将格式化 xml 的操作封装在 formatMessagevar xml2js = require('xml2js')exports.formatMessage = function(xml) {return new Promise((resolve, reject) => {// 接收⽂本信息格式// <xml> <ToUserName><![CDATA[toUser]]></ToUserName>// <FromUserName><![CDATA[fromUser]]></FromUserName>// <CreateTime>1348831860</CreateTime>// <MsgType><![CDATA[text]]></MsgType>// <Content><![CDATA[this is a test]]></Content>// <MsgId>1234567890123456</MsgId></xml>xml2js.parseString(xml, function(err, content) {var result = content.xmlvar message = {};if (typeof result === 'object') {var keys = Object.keys(result);for (var i = 0; i < keys.length; i++) {var key = keys[i];var item = result[key];if (!(item instanceof Array) || item.length === 0) continue;if (item.length === 1) {var val = item[0];if (typeof val === 'object') message[key] = formatMessage(val);else message[key] = (val || '').trim();} else {message[key] = [];for (var j = 0, k = item.length; j < k; j++) message[key].push(formatMessage(item[j]));}}}resolve(message)})})}解析完成后我们可以拿到 FromUserName、MsgType 和 ContentMsgType可能是 event(事件)或者是 text (⽂本)event类型有:subscribe,unsubscribe,LOCATION,CLICK,SCAN根据 content中发送的内容,我们可以进⾏判断,返回⾃定义消息回复因此在返回信息前需要拼接内容成指定xml格式,我将拼接⽅法封装在 template.js ⽂件中,使⽤时只要直接调⽤即可lib/template.js:exports.textMessage = function(message){var createTime = new Date().getTime()return `<xml><ToUserName><![CDATA[${message.FromUserName}]]></ToUserName><FromUserName><![CDATA[${message.ToUserName}]]></FromUserName><CreateTime>${createTime}</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[${message.reply}]]></Content></xml>`}exports.imageMessage = function(message){var createTime = new Date().getTime()return `<xml><ToUserName><![CDATA[${message.FromUserName}]]></ToUserName><FromUserName><![CDATA[${message.ToUserName}]]></FromUserName><CreateTime>${createTime}</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[${message.mediaId}]]></MediaId></Image></xml>`}exports.voiceMessage = function(message){var createTime = new Date().getTime()return `<xml><ToUserName><![CDATA[${message.FromUserName}]]></ToUserName><FromUserName><![CDATA[${message.ToUserName}]]></FromUserName><CreateTime>${createTime}</CreateTime><MsgType><![CDATA[voice]]></MsgType><Voice><MediaId><![CDATA[${message.mediaId}]]></MediaId></Voice></xml>`}exports.videoMessage = function(message){var createTime = new Date().getTime()return `<xml><ToUserName><![CDATA[${message.FromUserName}]]></ToUserName><FromUserName><![CDATA[${message.ToUserName}]]></FromUserName><CreateTime>${createTime}</CreateTime><MsgType><![CDATA[video]]></MsgType><Video><MediaId><![CDATA[${message.mediaId}]]></MediaId><Title><![CDATA[${message.title}]]></Title><Description><![CDATA[${message.description}]]></Description></Video></xml>`}exports.articleMessage = function(message){var createTime = new Date().getTime()return `<xml><ToUserName><![CDATA[${message.FromUserName}]]></ToUserName><FromUserName><![CDATA[${message.ToUserName}]]></FromUserName><CreateTime>${createTime}</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>${message.articles.length}</ArticleCount><Articles>${message.articles.map(article =>`<item><Title><![CDATA[${article.title}]]></Title><Description><![CDATA[${article.description}]]></Description><PicUrl><![CDATA[${article.img}]]></PicUrl><Url><![CDATA[${article.url}]]></Url></item>`).join('')}</Articles></xml>`}⾃动回复整体流程:收到微信请求->校验是否来⾃微信->获取access_token->解析请求体xml->根据类型以及内容作出相应回复代码:var express = require('express')var router = express.Router()var getRawBody = require('raw-body')var contentType = require('content-type')var utils = require('../lib/utils.js')var template = require('../lib/template.js')// 微信官⽅请求回调接⼝router.all('/', function(req, res, next) {var data = getRawBody(req, {length: req.headers['content-length'],limit: '1mb',encoding: contentType.parse(req).parameters.charset}, function(err, buf) {if (err) return next(err)utils.formatMessage(buf.toString()).then(message => {if (message.MsgType == 'event') {if (message.Event === 'subscribe') {if (message.EventKey) {console.log('扫描⼆维码关注:' + message.EventKey + ' ' + message.ticket);}message.reply = '终于等到你,还好我没放弃';} else if (message.Event === 'unsubscribe') {message.reply = '';console.log(message.FromUserName + ' 悄悄地⾛了...');} else if (message.Event === 'LOCATION') {message.reply = '您上报的地理位置是:' + titude + ',' + message.Longitude; } else if (message.Event === 'CLICK') {message.reply = '您点击了菜单:' + message.EventKey;} else if (message.Event === 'SCAN') {message.reply = '关注后扫描⼆维码:' + message.Ticket;}res.send(template.textMessage(message))} else if (message.MsgType === 'text') {var content = message.Contentif (content === '1') {message.reply = '终于等到你'res.send(template.textMessage(message))} else if (content === '2') {message.mediaId = '需要发送图⽚的媒体id'res.send(template.imageMessage(message))} else if (content === '3') {message.articles = [{title: '标题',description: '描述',picUrl: '图⽚路径,不需要事先上传',url: '素材路径,素材需要事先上传'}]res.send(template.articleMessage(message))} else {message.reply = '你说的话:“' + content + '”,我听不懂呀'res.send(template.textMessage(message))}}})})});module.exports = router;。
python实现微信⾃动回复(⾃动聊天)原⽂地址(本⼈):介绍微信⾃动回复其实主要就是登录,接收消息,回复消息三个功能,微信没有提供公开的API,但是可以分析⽹页版微信通信原理,通过模拟浏览器来实现需要的功能。
下⾯将给出微信⽹页版通信原理以及Python代码。
分析-获取uuid:GETParam _ (13位时间戳)Response window.QRLogin.code = 200; window.QRLogin.uuid = "4YyQFP2Daw==";-获取⼆维码:GET ==Param 4YyQFP2Daw== 即上⾯的uuidResponse ⼆维码图⽚-监听是否扫描⼆维码以及是否确认登录:GET https:///cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=4YyQFP2Daw==Param uuid 同上Responsewindow.code=200;window.redirect_uri="https:///cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=ARxD7GSdBYtNHOxhK0BF0ek-@qrticket_0&uuid=4YyQFP2Daw==&lang=zh_CN&scan=1486743186";code:408 ⽆响应201 扫描⼆维码但没有登录(此时响应数据中还包含⽤户头像图⽚base64编码的字符串,UserAvatar)200 登录redirect_uri 为接下来需要请求的地址-获取后续访问所需要的key等GETParam URL为上次返回的redirect_uri 参数已经带上了Response<error><ret>0</ret><message/><skey>@crypt_828c27e0_e98d62f6954235194f2b1252943f25ad</skey><wxsid>0zEvAdWKm9ZZgYVn</wxsid><wxuin>1564527827</wxuin><pass_ticket>OLxGHwqL%2BWNArxvXaqjDy06qzdrSojq6DJwiBF19sgw2CibZSJBv1WwOXAfKnLIg</pass_ticket><isgrayscale>1</isgrayscale>< /error>-初始化POST https:///cgi-bin/mmwebwx-bin/webwxinit?r=-485039295&lang=zh_CN&pass_ticket=OLxGHwqL%2BWNArxvXaqjDy06qzdrSojq6DJwiBF19sgw2CibZSJBv1WwOXAfKnLIgParam r ( - + 9位随机数),pass_ticket,{"BaseRequest": {"Uin": "1564527827", "Skey": "@crypt_828c27e0_e98d62f6954235194f2b1252943f25ad", "DeviceID": "e924318232435460", "Sid": "0zEvAdWKm9ZZgYVn"}} 第三个参数其中为json数据,DeviceID为(e + 15位随机数)Response 返回json,包含⽤户⾃⼰的信息,最近联系⼈,订阅的公众号消息等等;这⾥只需要关注UserName=@821c154488cdddbfb04141aa8f681174305d21d67a24cfd6eca3e77a152e52ff 每位⽤户都有⼀个UserName,但是每次登陆UserName都是重新分配的,SyncKey 为⼀组key ,后⾯接收消息需要将其作为参数,同时每次接收接收消息时,也会返回⼀组SyncKey作为在下⼀次请求的参数,以此类推-状态检查这⾥会建⽴⼀个长连接,每次连接⼤约20秒左右,若新消息,⼿机端发出退出⽹页登录指令,或者状态异常会返回特定的状态码GET https:///cgi-bin/mmwebwx-bin/synccheck?r=1486743215000&skey=@crypt_828c27e0_e98d62f6954235194f2b1252943f25ad&sid=0zEvAdWKm9Z ZgYVn&uin=1564527827&deviceid=e891796429.95749&synckey=1_660530221%7C2_660530488%7C3_660530485%7C1000_1486721341&_=1486740215000 Paramr(时间戳),skey,sid,uin,deviceid,synckey(将SyncKey中的多组key 以 key1_value1|key2_value2 的形式拼接成字符串如:3_660530485|1000_1486721341),_ (时间戳) Responsewindow.synccheck={retcode:"0",selector:"2"}retcode=0 正常,1101 退出登录,1102 会话异常, selector= 0 ⽆变化 2or6 有消息-接收消息若状态检查到有新消息,则请求消息POST https:///cgi-bin/mmwebwx-bin/webwxsync?sid=0zEvAdWKm9ZZgYVn&skey=@crypt_828c27e0_e98d62f6954235194f2b1252943f25ad&lang=zh_CN&pass_ticket=OLxGHwqL%2BWNArxvXaqjDy06qzdrSojq6DJwiBF19sgw2CibZSJBv1 Paramsid,skey,pass_ticket 以及 json数据 {"SyncKey": {"Count": 4, "List": [{"Key": 1, "Val": 660530221}, {"Key": 2, "Val": 660530488}, {"Key": 3, "Val": 660530485}, {"Key":1000, "Val": 1486721341}]}, "BaseRequest": {"Sid": "0zEvAdWKm9ZZgYVn", "Skey": "@crypt_828c27e0_e98d62f6954235194f2b1252943f25ad", "DeviceID":"e141257009.76972", "Uin": "1564527827"}, "rr": "-888098293"} 其中rr (- + 9位随机数)Responsejson数据包含消息的所有信息,其中关注 FromUserName=@821c154488cdddbfb04141aa8f681174305d21d67a24cfd6eca3e77a152e52ff 消息发送者以及 Content消息内容-发送消息POST https:///cgi-bin/mmwebwx-bin/webwxsendmsg?lang=zh_CN&pass_ticket=0%2BoUqOWdYEen6oDVFEIv5ncIIaJcWs1LeSi69C8tUTgcp36azGAl6a8uT02PiaHuParam pass_ticket, json数据{"Msg": {"FromUserName": "@9e718026650771acd6d759922e000fafceaa1a5fda83aea7b3b70bc1bd6c3774", "LocalID":"14867488199507670", "ClientMsgId": "14867488199507670", "ToUserName": "@9e718026650771acd6d759922e000fafceaa1a5fda83aea7b3b70bc1bd6c3774","Content": "消息内容", "Type": "1"}, "BaseRequest": {"Sid": "5Qn7rswOtPRHFw92", "Skey": "@crypt_828c27e0_ad386b3d4d68a282eda03d7d5b2d3104","DeviceID": "e397471984070243", "Uin": "1564527827"}, "Scene": "0"} 其中LocalID,ClientMsgId 为13位时间戳加上5位随机数Response 返回响应的状态码,发送成功会返回 LocalID 和 ClientMsgID以上就是我们需要的知道的,当然其他⽐如读取所有联系⼈等都是⼤同⼩异,这⾥就不多赘述了。
6实现微信公众号⾃动回复功能⼀实先⾃动回复功能的逻辑步骤 1 处理POST类型的控制逻辑,接收XML的数据包; 2 解析XML数据包(获得数据包的消息类型或者是事件类型); 3 拼装我们定义好的消息; 4 包装成XML格式; 5 在5秒内返回回去⼆代码实操--实现关注公众号⾃动回复功能 本节代码参照上节课继续修改和完善,⽬录结构跟之前相同,新引⼊的模块raw-body使⽤npm install安装⼀下即可,app.js启动⽂件和util.js不做变动,主要修改⼀下generator.js⽂件,以及在generator.js同级⽬录下新建wechat.js⽂件和tools.js⽂件。
wechat.js⽂件是将前⼀节generator.js⽂件中票据部分的代码抽离出来单独放在⼀个⽂件中,具体代码如下:'use strict';// 引⼊模块var Promise = require('bluebird');var request = Promise.promisify(require('request'));//增加url配置项var prefix = 'https:///cgi-bin/';var api = {accessToken: prefix + 'token?grant_type=client_credential'};//利⽤构造函数⽣成实例完成票据存储逻辑function weChat(opts) {var that = this;this.appID = opts.appID;this.appSecret = opts.appSecret;this.getAccessToken = opts.getAccessToken;this.saveAccessToken = opts.saveAccessToken;//获取票据的⽅法this.getAccessToken().then(function(data) {//从静态⽂件获取票据,JSON化数据,如果有异常,则尝试更新票据try {data = JSON.parse(data);} catch (e) {return that.updateAccessToken();}//判断票据是否在有效期内,如果合法,向下传递票据,如果不合法,更新票据if (that.isValidAccessToken(data)) {Promise.resolve(data);} else {return that.updateAccessToken();}})//将拿到的票据信息和有效期信息存储起来.then(function(data) {//console.log(data);that.access_token = data.access_token;that.expires_in = data.expires_in;that.saveAccessToken(data);})};//在weChat的原型链上增加验证有效期的⽅法weChat.prototype.isValidAccessToken = function(data) {//进⾏判断,如果票据不合法,返回falseif (!data || !data.access_token || !data.expires_in) {return false;}//拿到票据和过期时间的数据var access_token = data.access_token;var expires_in = data.expires_in;//获取当前时间var now = (new Date().getTime());//如果当前时间⼩于票据过期时间,返回true,否则返回falseif (now < expires_in) {return true;} else {return false;};};//在weChat的原型链上增加更新票据的⽅法weChat.prototype.updateAccessToken = function() {var appID = this.appID;var appSecret = this.appSecret;var url = api.accessToken + '&appid=' + appID + '&secret=' + appSecret;return new Promise(function(resolve, reject) {//使⽤request发起请求request({url: url,json: true}).then(function(response) {var data = response.body;var now = (new Date().getTime());var expires_in = now + (data.expires_in - 20) * 1000;//把新票据的有效时间赋值给datadata.expires_in = expires_in;resolve(data);})})};//向外暴露weChatmodule.exports = weChat; generator.js⽂件进⾏精简后,添加判断对xml数据的格式化⽅法以及判断事件,添加关注事件测试信息,具体代码如下:'use strict';// 引⼊模块var sha1 = require('sha1');var getRawBody = require('raw-body');var weChat = require('./wechat');var tools = require('./tools');// 建⽴中间件函数并暴露出去module.exports = function(opts, handler) {//实例化weChat()函数//var wechat = new weChat(opts);return function*(next) {//console.log(this.query);var that = this;var token = opts.token;var signature = this.query.signature;var nonce = this.query.nonce;var timestamp = this.query.timestamp;var echostr = this.query.echostr;// 进⾏字典排序var str = [token, timestamp, nonce].sort().join('');// 进⾏加密var sha = sha1(str);//使⽤this.method对请求⽅法进⾏判断if (this.method === 'GET') {// 如果是get请求判断加密后的值是否等于签名值if (sha === signature) {this.body = echostr + '';} else {this.body = 'wrong';};} else if (this.method === 'POST') {//如果是post请求也是先判断签名是否合法如果不合法直接返回wrongif (sha !== signature) {this.body = 'wrong';return false;};//通过raw-body模块可以把把this上的request对象也就是http模块中的request对象去拼装它的数据最终拿到⼀个buffer的xml数据//通过yield关键字获取到post过来的原始的XML数据var data = yield getRawBody(this.req, {length: this.length,limit: '1mb',encoding: this.charset});//console.log(data.toString());打印XML数据(当微信公众号有操作的时候终端可以看到返回的XML数据)//tools为处理XML数据的⼯具包使⽤tools⼯具包的parseXMLAsync⽅法把XML数据转化成数组对象var content = yield tools.parseXMLAsync(data);//console.log(content);打印转化后的数组对象//格式化content数据为json对象var message = tools.formatMessage(content.xml);console.log(message);//打印message//判断message的MsgType 如果是event 则是⼀个事件if (message.MsgType === 'event') {//如果是订阅事件if (message.Event === 'subscribe') {//获取当前时间戳var now = new Date().getTime();//设置回复状态是200that.status = 200;//设置回复的类型是xml格式that.type = 'application/xml';//设置回复的主体that.body = '<xml>' +'<ToUserName><![CDATA[' + message.FromUserName + ']]></ToUserName>' + '<FromUserName><![CDATA[' + message.ToUserName + ']]></FromUserName>' + '<CreateTime>' + now + '</CreateTime>' +'<MsgType><![CDATA[text]]></MsgType>' +'<Content><![CDATA[你好,同学!]]></Content>' +'</xml>';return;}}}}}; tools.js是处理XML数据的⼯具⽂件:'use strict';//引⼊模块var xml2js = require('xml2js');var Promise = require('bluebird');//导出解析XML的⽅法exports.parseXMLAsync = function(xml) {return new Promise(function(resolve, reject) {xml2js.parseString(xml, { trim: true }, function(err, content) {if (err) {reject(err);} else {resolve(content);};});});};//因为value值可能是嵌套多层的所以先对value值进⾏遍历function formatMessage(result) {//声明空对象messagevar message = {};//对result类型进⾏判断if (typeof result === 'object') {//如果是object类型通过Object.keys()⽅法拿到result所有的key 并存⼊keys变量中var keys = Object.keys(result);//对keys进⾏循环遍历for (var i = 0; i < keys.length; i++) {//拿到每个key对应的value值var item = result[keys[i]];//拿到keyvar key = keys[i];//判断item是否为数组或者长度是否为0if (!(item instanceof Array) || item.length === 0) {//如果item不是数组或者长度为0 则跳过继续向下解析continue;}//如果长度为1if (item.length === 1) {//拿到value值存⼊val变量var val = item[0];//判断val是否为对象if (typeof val === 'object') {//如果val为对象则进⼀步进⾏遍历message[key] = formatMessage(val);} else {//如果不是对象就把值赋给当前的key放⼊message⾥并去除收尾空格message[key] = (val || '').trim();}}//如果item的长度既不是0也不是1 则说明它是⼀个数组else {//把message的key设置为空数组message[key] = [];//对数组进⾏遍历for (var j = 0, k = item.length; j < k; j++) {message[key].push(formatMessage(item[j]));}}}}return message;}exports.formatMessage = function(xml) {return new Promise(function(resolve, reject) {xml2js.parseString(xml, { trim: true }, function(err, content) {if (err) {reject(err);} else {resolve(content);};});});};exports.formatMessage = formatMessage; 以上代码完成后,当关注微信测试公众号的时候,会⾃动回复『你好,同学!』的提⽰信息。
【易语⾔】开发微信群AI⼈⼯智能机器⼈,实现⾃动对话,智能回复聊天的功能⼯具我们已经打包好了,关注公众号“花花爱软件”回复“博客园”下载哈。
⽀持⼀下,码字不易需要的⼯具:l 易语⾔l 精易模块V8l 精易助⼿,朋友们⼤家好,我是今天的讲师,花花爱⼈,今天教⼤家⽤易语⾔开发⼀款属于你⾃⼰的,微信AI对话机器⼈,可以实现⾃动对话,群聊回复,⾃动监控微信消息,⾃动创建拉群的功能,废话不多讲,我们进⼊正题。
咋们先设计下软件的界⾯吧。
界⾯咋们已经设计好了主要就两⼤功能⼀键拉群和消息回复然后写核⼼代码我们双击⼀键启动按钮然后打开微信,获取窗⼝句柄,坐标等数据、建议⽤精易助⼿去获取,⽐较准确两个值都获取好了相对窗⼝:408 ,558微信窗⼝句柄:459122然后就把这些数据整合到我们的代码⾥⾯这就是代码,功能⾃⼰脑补继续写这个命令的功能是,⾃动向微信编辑框输⼊消息,来实现⾃动回复消息的功能我们先测试下效果吧,点击按钮后,会不会⾃动输⼊⽂字。
看来是可以的,点击按钮后⾃动向编辑框内输⼊了hello的字样接下来就是写发送的代码了此命令就可以实现模拟回车的效果,也就是发送消息了那这样就基本实现了,微信⾃动发消息回消息的功能了还有就是⾃动拉群的效果,其实这个⽐较简单我们下期在讲吧,时间有限。
直接分享拉群部分的代码:.版本 2.⽀持库 spec.⽀持库 eAPI.⽀持库 shellEx.程序集窗⼝程序集_启动窗⼝.⼦程序 _按钮1_被单击.判断开始 (单选框1.选中=真)指定⼿机号拉群 ().默认加群操作 ().判断结束.⼦程序指定⼿机号拉群.局部变量⼿机号, ⽂本型, , "0".局部变量 i, 整数型⼿机号=分割⽂本 (编辑框1.内容, #换⾏符, ).计次循环⾸ (取数组成员数 (⼿机号), i)⿏标_单击 (到整数 (编辑框_句柄.内容), 283, 34, 1)延迟 (2000)⿏标_单击 (到整数 (编辑框_句柄.内容), 137, 33, 1)置剪辑板⽂本 (⼿机号 [i])延迟 (1000)模拟按键 (#Ctrl键, #V键, ).计次循环尾 ().⼦程序 __启动窗⼝_创建完毕注册热键 (_启动窗⼝.取窗⼝句柄 (), 标签3.取窗⼝句柄 (), 0, #F1键)注册热键 (_启动窗⼝.取窗⼝句柄 (), 标签4.取窗⼝句柄 (), 0, #F2键).⼦程序加群操作.局部变量 i, 整数型⿏标_单击 (到整数 (编辑框_句柄.内容), 282, 34, 1)延时 (3000).计次循环⾸ (到整数 (编辑框_⼈数.内容), i)⿏标_单击 (到整数 (编辑框_句柄.内容), 151, 500, 1)延时 (2000)模拟按键 (40, , ).计次循环尾 ()信息框 (“准确⽣成群”, 0, , )延迟 (3000)⿏标_单击 (到整数 (编辑框_句柄.内容), 418, 452, 1).⼦程序 _按钮2_被单击.判断开始 (编辑框2.内容= “554480179”)信息框 (“临时注册成功”, 0, , ).默认按钮1.禁⽌=假单选框1.禁⽌=假.判断结束.⼦程序 _标签3_反馈事件, 整数型.参数参数⼀, 整数型.参数参数⼆, 整数型暂停 ().⼦程序 _标签4_反馈事件, 整数型.参数参数⼀, 整数型.参数参数⼆, 整数型编辑框_句柄.内容=到⽂本 (取⿏标所在窗⼝句柄 ())。
python wxbot 使用案例Python wxbot 是一个基于 Python 的微信个人号 API,可以用于实现微信个人号的自动化操作。
下面列举了一些使用 wxbot 的案例,展示了它的功能和灵活性。
1. 自动回复消息通过 wxbot,可以实现自动回复消息的功能。
当收到消息时,可以编写代码来根据消息内容进行判断,并给出相应的回复。
例如,可以设置一个关键词回复功能,当收到包含特定关键词的消息时,自动回复相应的内容。
2. 发送定时提醒wxbot 可以通过定时任务功能,定时发送提醒消息。
例如,可以设置每天早上发送天气预报,或者每个小时发送一次工作提醒。
3. 群发消息wxbot 可以实现批量发送消息的功能。
可以通过编写代码,读取一个文本文件中的消息,然后将这些消息发送给指定的好友或群组。
4. 监控微信消息通过 wxbot,可以实现对微信消息的监控功能。
可以编写代码来实时监控微信消息的到来,并根据需要进行相应的处理。
例如,可以监控微信群中的关键词,当有人发送包含关键词的消息时,自动进行提醒或处理。
5. 自动添加好友wxbot 可以实现自动添加好友的功能。
可以编写代码来根据一定的规则自动添加新的好友,并发送欢迎消息。
6. 自动转发消息通过 wxbot,可以实现自动转发消息的功能。
可以编写代码来监听指定的好友或群组,并将收到的消息自动转发给另外的好友或群组。
7. 管理群组wxbot 可以实现对微信群组的管理功能。
可以编写代码来自动邀请成员加入群组,或者将指定的成员移出群组。
8. 自动抢红包通过 wxbot,可以实现自动抢红包的功能。
可以编写代码来监听红包消息,并自动点击抢红包按钮。
9. 自动爬取微信公众号文章wxbot 可以实现自动爬取微信公众号文章的功能。
可以编写代码来模拟用户操作,自动登录微信并爬取指定公众号的文章内容。
10. 自动发送朋友圈通过 wxbot,可以实现自动发送朋友圈的功能。
可以编写代码来模拟用户操作,自动登录微信并发布指定的朋友圈内容。