自动回复_自动回复机器人 - CSDN
精华内容
参与话题
  • 写一个自动回复的聊天机器人

    千次阅读 2019-06-11 19:45:57
    要写一个自动聊天的机器人,底层必定离不开socket, TCP 是一个稳定、可靠的传输协议,常用于对数据进行准确无误的传输,socket里面有对它的封装。TCP 的概念 TCP 的英文全拼(Transmission Control Protocol)简称传输...
    要写一个自动聊天的机器人,底层必定离不开socket, TCP 是一个稳定、可靠的传输协议,常用于对数据进行准确无误的传输,socket里面有对它的封装。


    TCP 的概念

    TCP 的英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议

    socket 的概念

    socket (简称 套接字) 是进程之间通信一个工具进程之间想要进行网络通信需要基于这个 socket。它负责进程之间的网络数据传输,好比数据的搬运工。不夸张的说,只要跟网络相关的应用程序或者软件都使用到了 socket

    客户端

    下面是一个开发TCP应用程序客户端的一般流程,后面见具体代码:

    1. 创建客户端套接字对象

    2. 和服务端套接字建立连接

    3. 发送数据

    4. 接收数据

    5. 关闭客户端套接字

    from socket import *
    class Cilent_Socket:
        def __init__(self):
            self.tcp_client_socket = socket(AF_INET, SOCK_STREAM) # AF_INET指ipv4地址,SOCK_STREAM指TCP协议
            self.tcp_client_socket.connect(('192.168.137.1',8989))  #连接服务端,指定服务器ip和端口def run(self):
            while True:
                # 用户输入数据
                send_data = input("我:")
                if len(send_data)==0:
                     print('已断开连接!')
                     break
                if send_data == "quit" or send_data == "exit" or send_data =='Bye'or send_data =='bye':
                    self.tcp_client_socket.send(send_data.encode("gbk"))
                    recv_data = self.tcp_client_socket.recv(4096).decode('gbk')
                    print('小美:', recv_data)
                    self.tcp_client_socket.close()
                    break
                self.tcp_client_socket.send(send_data.encode("gbk"))​            # 接收对方发送过来的数据,最大接收4096个字节
                recv_data = self.tcp_client_socket.recv(4096).decode('gbk')
                print('小美:', recv_data)
            # 关闭套接字
            self.tcp_client_socket.close()
    def main():
        client = Cilent_Socket()
        client.run()
    ​if __name__ == '__main__':
        main()复制代码

    上面代码中的__init__方法初始化了一个客户端套接字,并与服务器建立一个长连接,run()方法中用于和后台机器人发送消息和接收机器人给你返回的消息。

    服务端

    创建一个服务端程序的基本步骤是:

    1. 创建服务端端套接字对象

    2. 绑定端口号

    3. 设置监听

    4. 等待接受客户端的连接请求

    5. 接收数据

    6. 发送数据

    7. 关闭套接字

    要创建一个能自动回复的机器人,只要循环接收用户输入的信息,将其输入的关键词进行判断,可以后台预先给定它对应的关键词对应给用户回复的信息即可,或者调用已知已经做好的API接口。下面两种情况会分别进行介绍。

    1.自定义消息关键词回复

    from socket import *
    import time
    import random​
    class Server_Socket:
        def __init__(self):
            tcp_server_socket = socket(AF_INET, SOCK_STREAM)
            tcp_server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) #设置端口复用
            tcp_server_socket.bind(('', 8989))  # 绑定服务器端口
            tcp_server_socket.listen(128)
            self.tcp_server_socket = tcp_server_socket
            self.chat_list = ['今天天气真好,和朋友出去玩一下吧','今天你学习了吗','又不知道吃什么','蓝瘦香菇','好嗨哟','去看电影吧','去吃好吃的'] # 定义初始化消息回复列表​
        def start(self):​
            client_socket, client_addr = self.tcp_server_socket.accept()
            while True:
                # 接收对方发送过来的数据
                recv_data = client_socket.recv(4096).decode('gbk')  # 接收4096个字节if len(recv_data) == 0:
                    print("程序结束")
                    break            # 下面一串是对用户的输入逻辑进行判断
                elif recv_data =="quit" or recv_data =="exit" or recv_data =='Bye' or recv_data =='bye' or recv_data =='再见':
                    client_socket.send('再见'.encode('gbk'))
                    break
                elif "你好" in recv_data or "hello" in recv_data:
                    client_socket.send("你好".encode('gbk'))
                elif "sb" in recv_data or "SB" in recv_data or "傻" in recv_data or "二货" in recv_data :
                    client_socket.send("你才傻,你全家都傻!!!".encode('gbk'))
                elif "贱" in recv_data or "蠢" in recv_data :
                    client_socket.send("你个蠢货!".encode('gbk'))
                elif "吃" in recv_data or "hello" in recv_data:
                    client_socket.send("红烧肉、东坡肘子...".encode('gbk'))
                elif "玩" in recv_data or "hello" in recv_data:
                    client_socket.send("云南丽江不错!".encode('gbk'))
                elif "名字" in recv_data or "name" in recv_data:
                    client_socket.send("我叫小美,编号9527,哈哈...".encode('gbk'))
                elif "时间" in recv_data or "time" in recv_data:
                    client_socket.send(('现在时间是:'+time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))).encode('gbk')) # 返回当前时间
                else:
                    self.chat_list.append(recv_data)  # 收集用户输入信息,丰富词汇
                    rand_idx = random.randint(0, len(self.chat_list) - 1)                # 通过随机下标获取一条信息
                    send_data = self.chat_list[rand_idx]                 # 将信息发送给客户端
                    client_socket.send(send_data.encode('gbk'))        # 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为这个客户端服务了,如果还需要服务,只能再次重新连接
            client_socket.close()​
    def main():
        server = Server_Socket()
        server.start()
    ​if __name__ == '__main__':
        main()复制代码

    上面的代码是聊天机器人服务端代码,可和用户进行一般的闲聊,返回当前时间等,代码逻辑不复杂,优点是可以自行定制。

    2.调用图灵机器人API实现自动回复

    图灵机器人的接口可以实现的功能有:中文聊天,情感引擎等。要使用图灵的API,首先要去它官网进行注册,然后创建机器人,获取一个APIkey,然后才能使用它的API接口。下面是网址入口:

    www.turingapi.com/

    下面对它的API文档有用的一部分进行摘抄:

    编码方式

    UTF-8(调用图灵API的各个环节的编码方式均为UTF-8)

    接口地址

    openapi.tuling123.com/openapi/api…

    请求方式

    HTTP POST

    请求参数

    请求参数格式为 json 请求示例:

    {    "reqType":0,    "perception": {        "inputText": {            "text": "附近的酒店"        },        "inputImage": {            "url": "imageUrl"        },        "selfInfo": {            "location": {                "city": "北京",                "province": "北京",                "street": "信息路"            }        }    },    "userInfo": {        "apiKey": "",        "userId": ""    }}复制代码

    参数说明

    参数类型是否必须取值范围说明
    reqTypeintN-输入类型:0-文本(默认)、1-图片、2-音频
    perception-Y-输入信息
    userInfo-Y-用户参数

    perception

    参数类型是否必须取值范围说明
    inputText-N-文本信息
    inputImage-N-图片信息
    inputMedia-N-音频信息
    selfInfo-N-客户端属性

    注意:输入参数必须包含inputText或inputImage或inputMedia!

    inputText

    参数类型是否必须取值范围说明
    textStringY1-128字符直接输入文本

    inputImage

    参数类型是否必须取值范围说明
    urlStringY图片地址

    inputMedia

    参数类型是否必须取值范围说明
    urlStringY音频地址

    selfInfo

    参数类型是否必须取值范围说明
    location-N-地理位置信息

    location

    参数类型是否必须取值范围说明
    cityStringY-所在城市
    provinceStringN-省份
    streetStringN-街道

    userInfo

    参数类型是否必须取值范围说明
    apiKeyStringY32位机器人标识
    userIdStringY长度小于等于32位用户唯一标识
    groupIdStringN长度小于等于64位群聊唯一标识
    userIdNameStringN长度小于等于64位群内用户昵称

    输出参数

    输出示例:

      {    "intent": {        "code": 10005,        "intentName": "",        "actionName": "",        "parameters": {            "nearby_place": "酒店"        }    },    "results": [        {            "groupType": 1,            "resultType": "url",            "values": {                "url": "http://m.elong.com/hotel/0101/nlist/#indate=2016-12-10&outdate=2016-12-11&keywords=%E4%BF%A1%E6%81%AF%E8%B7%AF"            }        },        {            "groupType": 1,            "resultType": "text",            "values": {                "text": "亲,已帮你找到相关酒店信息"            }        }    ]}复制代码

    参数说明

    参数类型是否必须取值范围说明
    intent-Y-请求意图
    results-N-输出结果集

    intent

    参数类型是否包含取值范围说明
    codeintY-输出功能code
    intentNameStringN-意图名称
    actionNameStringN-意图动作名称
    parametersMapN-功能相关参数

    results

    参数类型是否包含取值范围说明
    resultTypeStringY文本(text);连接(url);音频(voice);视频(video);图片(image);图文(news)输出类型
    values-Y-输出值
    groupTypeintY-‘组’编号:0为独立输出,大于0时可能包含同组相关内容 (如:音频与文本为一组时说明内容一致)

    下面是针对文档来封装实现输入关键词来返回用户输入信息的函数代码:

    import requests
    import json
    def get_response(msg):
        api = 'http://openapi.tuling123.com/openapi/api/v2' # 接口地址
        data = {        "perception": {            "inputText": {                "text": msg            },            "inputImage": {                "url": "imageUrl"            },            "selfInfo": {                "location": {                    "city": "成都",  # 参数必须指定地点                    "province": "四川", # 参数必须                    "street": "蜀西路"                }            }        },        "userInfo": {            "apiKey": '',  # 参数必须此处填入网站申请的key            "userId": ""        }    }
        data = json.dumps(data)  # 将字典格式转化为json格式,另外loads函数是将json转化为python中的字典
        print(data)
        print('=================================================================================')
        r = requests.post(api, data=data).json()  # 将post请求的结果转为json
        print(r)
        return r['results'][0]['values']['text'] # 返回的数据
    ​mes = get_response('天气') # 输入关键词复制代码

    上面用到了python内置的request和json库,调用了几次发现有时返回的结果不太满意,不知道是不是没有买它套餐的原因。上一个版本的机器人服务端只实现了单用户,下面实现可以多用户聊天的版本:

    import socket
    import threading
    import requests
    import json​​
    # 创建web服务器的类
    class HttpWebServer:
        """初始化套接字对象"""def __init__(self, port):
            tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
            tcp_server_socket.bind(('', port))
            tcp_server_socket.listen(128)
            self.tcp_server_socket = tcp_server_socket
    ​    @staticmethod
        def get_response(msg):
            # 调用图灵机器人API
            api = 'http://openapi.tuling123.com/openapi/api/v2'
            data = {            "perception": {                "inputText": {                    "text": msg                },                "inputImage": {                    "url": "imageUrl"                },                "selfInfo": {                    "location": {                        "city": "成都",                        "province": "四川",                        "street": ""                    }                }            },            "userInfo": {                "apiKey": '',# 填入申请的key                "userId": ""            }        }
            data = json.dumps(data)  # 将字典格式转化为json格式,另外loads函数是将json转化为python中的字典
            print(data)
            # print('=================================================================================')
            r = requests.post(api, data=data).json()  # 将post请求的结果转为json
            print(r)
            return r['results'][0]['values']['text']  # 返回的数据
    ​    @staticmethod
        def client(new_socket):
            """新套接-请求-响应"""
            # 接受客户端消息
            while True:
                recv_data = (new_socket.recv(4096))
                recv_decode = recv_data.decode('utf-8')
                # 判断请求内容长度,若为0,则浏览器断开连接
                if len(recv_data) == 0:
                    print('offline')
                    new_socket.close()
                    return​
                print('帅哥:' + recv_decode)
                response = HttpWebServer.get_response(recv_decode)
                new_socket.send(response.encode('utf-8'))
    ​​    def start(self):
            """开启服务器的方法"""
            while True:
                # 循环接受请求,并创建相应的套接字
                new_socket, ip_port = self.tcp_server_socket.accept()
                # 运用多线程实现多个客户端访问,并设置主线程守护
                sub_threading = threading.Thread(target=self.client, args=(new_socket,), daemon=True)
    ​            # 子线程开启
                sub_threading.start()​​
    def main():
        """程序入口"""
        web_server = HttpWebServer(8989)
        web_server.start()
    ​if __name__ == '__main__':
        main()复制代码

    上面采用了threading实现了可多用户聊天,并使用了守护主线程,防止了在主线程接受数据阻塞引起服务器崩溃的情况。


    转载于:https://juejin.im/post/5cc316e96fb9a032196ed543

    展开全文
  • 30行代码实现微信自动回复机器人

    千次阅读 2018-12-02 18:25:53
    本文转自:本文转自:...amp;mid=2653558126&idx=1&sn=b1a87e62fc2ae0a3b2e775dadf263ccc&chksm=806e3bd3b719b2c5a83684476a5b33f341c72b4b4399153ee3a2466a83c4...
    
    本文转自:本文转自:https://mp.weixin.qq.com/s?__biz=MzAxMjUyNDQ5OA==&mid=2653558126&idx=1&sn=b1a87e62fc2ae0a3b2e775dadf263ccc&chksm=806e3bd3b719b2c5a83684476a5b33f341c72b4b4399153ee3a2466a83c43d3b1b0a638ec937&mpshare=1&scene=1&srcid=1202ZbvHNyDCMttLhC9Nfu2y#rd
    
    

    一、写在前面

    很多朋友对itchat非常感兴趣,今天下午又学到了itchat另一种有趣的玩法—微信自动回复机器人。

    程序很简单仅仅三十行代码左右,实现了机器人自动与你的微信好友聊天,下面是我的机器人小笼包跟自己微信好友聊天的截图。
    在这里插入图片描述
    再给大家看看两个机器人的对话
    在这里插入图片描述

    二、程序介绍

    本程序通过itchat获取微信的相关消息,将微信消息传输到机器人接口(本程序使用的是图灵),获取机器人的返回消息。将返回消息返回给微信消息的发送人。以此实现将微信个人号变身为聊天机器人。

    三、具体实现

    安装
    itchat的安装可以通过下面这行代码

    pip install itchat
    

    登录
    itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短时间的登录,并不会保留登录的状态,也就是下次登录时还是需要扫描二维码。

    1# 扫描二维码登陆微信,实际上就是通过网页版微信登陆
    itchat.auto_login()
    

    如果加上hotReload==True,那么就会保留登录的状态,至少在后面的几次登录过程中不会再次扫描二维码,该参数生成一个静态文件itchat.pkl用于存储登录状态

    itchat.auto_login(hotReload=True)
    

    微信信息的发送
    微信可以发送各类消息,文本、图片、文件等,下面是具体的方法的介绍。

    itchat.send('Message Content', 'toUserName')
    

    该发送消息的函数需要两个参数,消息的内容与接受者的UserName,即标识符。
    用下面的代码举一个小栗子,实现向文件助手发送信息。

    import itchat
    
    itchat.auto_login(hotReload=True)
    itchat.send(u'测试消息发送', 'filehelper')   
    

    微信消息的获取
    itchat 将根据接受到的消息类型寻找对应的已注册的方法。如果一个消息类型没有对应的注册方法, 该消息将会被舍弃。在运行过程中也可以动态注册方法, 注册方式与结果不变。

    注册方法
    不带具体对象注册, 将注册为普通消息的回复方法.

    import itchat
        from itchat.content import *
        @itchat.msg_register(TEXT)   #这里的TEXT表示如果有人发送文本消息,那么就会调用下面的方法
        def simple_reply(msg):
            #这个是向发送者发送消息
            itchat.send_msg('已经收到了文本消息,消息内容为%s'%msg['Text'],toUserName=msg['FromUserName'])
            return "T reveived: %s" % msg["Text"]     #返回的给对方的消息,msg["Text"]表示消息的内容
    

    带对象参数注册, 对应消息对象将调用该方法,其中isFriendChat表示好友之间,isGroupChat表示群聊,isMapChat表示公众号。

    import itchat
    from itchat.content import *
    
    @itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True,isMpChat=True)
    def text_reply(msg):
        msg.user.send("%s : %s" % (mst.type, msg.text))
    

    消息类型
    向注册方法传入的 msg 包含微信返回的字典的所有内容.itchat 增加 Text, Type(也就是参数) 键值, 方便操作。

    itcaht.content 中包含所有的消息类型参数。例如图片、语音、名片、分享等,也对应不同的注册参数:

    1. 图片对应:itchat.content.PICTURE

    2. 语音对应:itchat.content.RECORDING

    3. 名片对应:itchat.content.CARD

    其余的可以参考官方API
    https://pypi.org/project/itchat/

    import itchat
    
    @itchat.msg_register(itchat.content.TEXT)
    def print_content(msg):
        print(msg['Text'])
    
    itchat.auto_login()
    itchat.run()
    

    通过运行上面的代码,实现基础的文本信息的接收。

    实现与图灵机器人的交互
    实现机器人有很多种方法,最简单的就是使用他人提供的接口。这里以图灵机器人为例,演示这一功能。图灵机器人简单而言就是以一定的规则给图灵的服务器发送数据包(包含你对他说的话)图灵的服务器会以一定的规则给你返回数据包(包含他回复你的话)

    你需要一个Tuling Key来告诉图灵服务器你有权和他对话。

    8edce3ce905a4c1dbb965e6b35c3834d
    eb720a8970964f3f855d863d24406576
    1107d5601866433dba9599fac1bc0083
    71f28bf79c820df10d39b4074345ef8c
    
    接下来需配置图灵机器人
    {
        'key'    : 'TULING_KEY',
        'info'   : 'YOUR_MSG',
        'userid' : 'USERID',
    }
    

    下面使用图灵机器人向好友发送了hello

    #coding=utf8
    import requests
    
    apiUrl = 'http://www.tuling123.com/openapi/api'
    data = {
        'key'    : '8edce3ce905a4c1dbb965e6b35c3834d', # 如果这个Tuling Key不能用,那就换一个
        'info'   : 'hello', # 这是我们发出去的消息
        'userid' : 'wechat-robot', # 这里你想改什么都可以
    }
    # 我们通过如下命令发送一个post请求
    r = requests.post(apiUrl, data=data).json()
    
    # 让我们打印一下返回的值,看一下我们拿到了什么
    print(r)
    

    完整代码:

    import requests
    import itchat
    
    KEY = '8edce3ce905a4c1dbb965e6b35c3834d'
    
    def get_response(msg):
        # 这里实现与图灵机器人的交互
        # 构造了要发送给服务器的数据
        apiUrl = 'http://www.tuling123.com/openapi/api'
        data = {
            'key' : KEY,
          'info' : msg,
          'userid' : 'wechat-robot',
        }
        try:
            r = requests.post(apiUrl, data=data).json()
            # 字典的get方法在字典没有'text'值的时候会返回None而不会抛出异常
            return r.get('text')
        # 为了防止服务器没有正常响应导致程序异常退出,这里用try-except捕获了异常
        # 如果服务器没能正常交互(返回非json或无法连接),那么就会进入下面的return
        except:
            # 将会返回一个None
            return
    
    # 这里实现微信消息的获取
    @itchat.msg_register(itchat.content.TEXT)
    def tuling_reply(msg):
        # 为了保证在图灵Key出现问题的时候仍旧可以回复,这里设置一个默认回复
        defaultReply = 'I received: ' + msg['Text']
        # 如果图灵Key出现问题,那么reply将会是None
        reply = get_response(msg['Text'])
        # a or b的意思是,如果a有内容,那么返回a,否则返回b
        # 有内容一般就是指非空或者非None,你可以用`if a: print('True')`来测试
        return reply or defaultReply
    
    # 为了让实验过程更加方便(修改程序不用多次扫码),我们使用热启动
    itchat.auto_login(hotReload=True)
    itchat.run()
    

    itchat不仅仅能够实现自动回复,还有其他的相关功能比如群发助手,好友单删检测,获取微信好友信息等功能,后续会慢慢去体验各种玩法。

    小提示:不要频繁操作,否则会禁止登录web微信。

    更多案例请关注“思享会Club”公众号或者关注思享会博客:http://gkhelp.cn/
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181202180648906.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MzMxMTg0,size_16,color_FFFFFF,t_70)
    展开全文
  • QQ群聊天机器人 易语言 自动回复 QQ机器人免费版

    千次下载 热门讨论 2020-07-30 23:32:37
    QQ机器人 QQ群聊天机器人 自动回复机器人
  • RebateBot 返利机器人 项目地址 项目描述 关键词: 返利 微信 阿里妈妈 机器人 跨平台 ...利用闲置微信和极小的电脑性能开启24小时无人轮值返利机器人 购物只需要发送链接给机器人,机器人能马上给你回复优惠价...

    RebateBot 返利机器人

    项目地址

    项目描述

    关键词: 返利 微信 阿里妈妈 机器人 跨平台

    返利机器人,基于微信建立机器人通道与用户通过聊天快速生成返利链接


    利用闲置微信和极小的电脑性能开启24小时无人轮值返利机器人
    购物只需要发送链接给机器人,机器人能马上给你回复优惠价格及链接


    功能实现

    微信机器人

    这个模块在这里可以看到最新的代码微信机器人

    • [x] 消息回调
    • [x] 自动回复消息
    • [x] 新增好友回调
    • [x] 默认同意新增好友
    • [x] 自动回复(文字,表情)

    阿里妈妈

    • [x] 链接识别
    • [x] 淘口令识别
    • [x] 链接转换返利链接
    • [x] 自动分配不同pid
    • [x] 扫码登录
    • [x] 订单定时下载
    • [x] 自动计算返利反点

    消息处理

    • [x] 签到
    • [x] 帮助
    • [x] 自动绑定订单
    • [x] 手动绑定订单
    • [x] 提现
    • [x] 收货提醒
    • [x] 支付提醒

    运行

    开发和构建

    环境要求

    • golang
    • mysql

    拉取代码

    
    git clone https://github.com/546669204/RebateBot.git
    cd RebateBot
    

    安装依赖

    
    go get 
    cd msgprocess
    go get 
    cd ../alimama
    go get 
    cd ../
    

    配置mysql

    
    cd msgprocess
    vim database.json
    
    {
        "database": "webot",        //数据库名字
        "host": "127.0.0.1:3306",    //数据库Host
        "user": "root",                //数据库用户名
        "password": ""                 //数据库密码
    }
    

    调试运行

    
    go run master.go
    

    相关模块地址

    您的鼓励,是我最大的动力。

    来源:https://segmentfault.com/a/1190000016017064

    展开全文
  • 自动回复消息

    2019-09-16 19:09:49
    添加jar <!--json转为对象包--> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson<...

    添加jar

    <!--json转为对象包-->
        <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>2.8.3</version>
        </dependency>
    
        <!--解析xml-->
        <dependency>
          <groupId>dom4j</groupId>
          <artifactId>dom4j</artifactId>
        </dependency>
        <dependency>
          <groupId>com.thoughtworks.xstream</groupId>
          <artifactId>xstream</artifactId>
          <version>1.4.10</version>
        </dependency>

    实体类

        公共消息实体

    
    public class BaseMessage {
    
        protected String ToUserName;
        protected String FromUserName;
        protected long CreateTime;
        protected String MsgType;
        private Voice Voice;
    
        public Voice getVoice() {
            return Voice;
        }
    
        public void setVoice(Voice voice) {
            Voice = voice;
        }
    
        public BaseMessage() {
            super();
        }
    
        public String getToUserName() {
            return ToUserName;
        }
    
        public void setToUserName(String toUserName) {
            ToUserName = toUserName;
        }
    
        public String getFromUserName() {
            return FromUserName;
        }
    
        public void setFromUserName(String fromUserName) {
            FromUserName = fromUserName;
        }
    
        public long getCreateTime() {
            return CreateTime;
        }
    
        public void setCreateTime(long createTime) {
            CreateTime = createTime;
        }
    
        public String getMsgType() {
            return MsgType;
        }
    
        public void setMsgType(String msgType) {
            MsgType = msgType;
        }
    
    }
    

        文本消息

        

    
    public class MessageText extends BaseMessage {
        private String Content;// 文本消息内容
    
        private String MsgId;// 消息id,64位整型
    
        public MessageText() {
    
        }
    
        public MessageText(String toUserName, String fromUserName, long createTime, String msgType, String content,
                           String msgId) {
            super();
            ToUserName = toUserName;
            FromUserName = fromUserName;
            CreateTime = createTime;
            MsgType = msgType;
            Content = content;
            MsgId = msgId;
        }
    
        public String getContent() {
            return Content;
        }
    
        public void setContent(String content) {
            Content = content;
        }
    
        public String getMsgId() {
            return MsgId;
        }
    
        public void setMsgId(String msgId) {
            MsgId = msgId;
    
        }
    }
    

    语音消息

    
    public class Voice extends BaseMessage{
        private String MediaId;
    
    
        public Voice(){}
        public Voice(String toUserName, String fromUserName, long createTime, String msgType,
                     String mediaId) {
            super();
            ToUserName = toUserName;
            FromUserName = fromUserName;
            CreateTime = createTime;
            MsgType = msgType;
            MediaId = mediaId;
        }
    
        public String getMediaId() {
            return MediaId;
        }
    
        public void setMediaId(String mediaId) {
            MediaId = mediaId;
        }
    }
    

    消息工具类

    
    
    import com.thoughtworks.xstream.XStream;
    
    import java.util.Date;
    
    
    public class TextMessageUtil {
        /**
         * 将发送消息封装成对应的xml格式
         */
        public  String messageToxml(BaseMessage message) {
            XStream xstream  = new XStream();
            xstream.alias("xml", message.getClass());
            return xstream.toXML(message);
        }
        /**
         * 封装文本发送消息对象,封装时,需要将调换发送者和接收者的关系
         * @param FromUserName
         * @param ToUserName
         */
        public  String initMessage(String FromUserName, String ToUserName,String content) {
            MessageText text = new MessageText();
            text.setToUserName(FromUserName);
            text.setFromUserName(ToUserName);
            text.setContent(content);
            text.setCreateTime(new Date().getTime());
            text.setMsgType("text");
            return  this.messageToxml(text);
        }
        /**
         * 封装音乐发送消息对象,封装时,需要将调换发送者和接收者的关系
         * @param FromUserName
         * @param ToUserName
         */
        public  String musicMessage(String FromUserName, String ToUserName,String mediaId) {
            BaseMessage text = new BaseMessage();
            text.setToUserName(FromUserName);
            text.setFromUserName(ToUserName);
    
            text.setCreateTime(new Date().getTime());
            text.setMsgType("voice");
            this.messageToxml(text);
            Voice music=new Voice();
            music.setMediaId(mediaId);
            text.setVoice(music);
            return  this.messageToxml(text);
        }
    
    }
    

    请求路径

     @PostMapping("checkToken")
        public void selectMenu(HttpServletRequest request, HttpServletResponse response){
    
            response.setCharacterEncoding("UTF-8");
            PrintWriter out = null;
            //将微信请求xml转为map格式,获取所需的参数
            Map<String,String> map = MessageUtil.xmlToMap(request);
            String ToUserName = map.get("ToUserName");
            String FromUserName = map.get("FromUserName");
            String MsgType = map.get("MsgType");
            String Content = map.get("Content");
            System.out.println(ToUserName);
            System.out.println(FromUserName);
            System.out.println(MsgType);
            System.out.println(Content);
            String message = null;
            //处理文本类型,实现输入1,回复相应的封装的内容
            if("text".equals(MsgType)){
                TextMessageUtil textMessage = new TextMessageUtil();
                if("我爱你".equals(Content)){
    
                    message = textMessage.musicMessage(FromUserName, ToUserName,“这里填写你上传语音文件时返回的media_id”);
    
                    System.out.println(message);
                }else{
                    message = textMessage.initMessage(FromUserName, ToUserName,"我是你爸爸,给我好好说话,说的什么乱七八糟的我听不懂");
                    System.out.println(message);
                }
            }
            try {
                out = response.getWriter();
                out.write(message);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            out.close();
        }

     

    转载于:https://my.oschina.net/u/3535099/blog/3093396

    展开全文
  • 自动回复机器人

    千次阅读 2019-06-13 10:09:10
    直接使用这个接口即可。 public class HttpUtils { public static final String ROBOT_URL = "http://openapi.tuling123.com/openapi/api/v2"; public static final String QINGYUN_URL= ...
  • 论坛自动回复

    千次阅读 2015-08-10 10:42:13
    论坛自动回复,打算找个软件用一下的,结果没有合适的,于是只好自己上阵,下面的是一个开源js,实现了自动回复隐藏贴, http://userscripts-mirror.org/scripts/review/152745 根据目标论坛适配,将 var input_...
  • 超简单Python实现微信机器人自动回复

    万次阅读 多人点赞 2019-05-13 18:42:37
    拿使用图灵机器人设置自动回复,让机器人跟微信好友傻傻的聊天,机器人比小编还会聊天,无论是对美眉还是汉纸,上来就是爱!爱!爱!简直太辣眼睛!!!用它进行来调戏微信好友,简直6的一笔! (记住一条!千万不...
  • 小程序客服自动回复一个图文链接? 小程序客服可以发小程序卡片吗? 小程序客服能像公众号一样设置关键词回复吗? 收到消息时自动回复? 微信小程序新手如何默认自动回复功能 如果你遇到以上问题,请往下看!教...
  • 那么微信公众号添加关注后怎么自动回复图文信息?下面小编就为大家介绍一下,一起来看看吧! 方法/步骤 1、登录到微信公众号的后台后,在左侧找到自动回复的按钮,并点击进入。如果只是想在公众号被关注后...
  • VBA outlook实战#01--自动回复邮件

    万次阅读 2016-02-22 09:35:03
    VBA编程实现自动回复邮件
  • 微擎 首次访问自动回复

    千次阅读 2017-11-07 18:57:59
    添加一条普通的关键字自动回复, 然后 选择要关注回复内容的那条、
  • 微信公众账号自动回复小程序链接

    万次阅读 2019-01-03 11:50:57
    &lt;a data-miniprogram-appid="appid" data-miniprogram-path="路径" href="可以不写"&gt;小程序&lt;/a&gt; 效果图  文章引用于: ...
  • 微信公众号自动回复示例代码

    千次阅读 2016-03-04 10:57:38
    define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->responseMsg(); class wechatCallbackapiTest ... public function responseMsg() ... //get post data, May be
  • 这周刚好在研究网站里的自动回复客服( 机器人),在网上看了很多资料,大都是基于移动端,网页版的少之又少。在踩了无数个坑之后终于摸索出了一条泥泞小路(哭兮兮),在这里跟大家分享一下,有不足之处欢迎指正...
  • 最近找了个钱少事少离家近兼混吃等死的工作…… 好吧就是跑去某个销量还不错的天猫...也就是我们常说的自动回复,比如我们进店经常能看到的欢迎语就是其中的一种 折腾了半个月,现在也勉强掌握了个大概 所以接...
  • 开发微信订阅号,服务号的朋友都知道,在微信公众号开发中有一个自动回复的消息功能,一般来说,自动回复的 内容需要我们自定义,而且每次返回的内容基本没什么特别的变化,如果要根据提问的内容返回不同的消息,...
  • 微信关键字自动回复功能实现

    万次阅读 2015-03-16 17:00:45
    微信自动回复可以分为三种,一种是首次关注的欢迎语,一种是关键字自动回复,还有就是无法识别的回复。这三种模式在实现上是完全一样的,只是基于的事件不同而已。要想实现自动回复功能,首先要对微信相关API进行...
  • 如果只是想在公众号被关注后自动推送纯文字不含图片的的信息的话,直接在右侧被添加自动回复一项下面设置就可以了。如果希望回复的是图文信息,那么接着往下看。 点击关键词自动回复,在出现的...
  • 选择自动回复-自动回复 →设置自动回复 (不要理会自动回复短语,这个功能太简陋了,可以以后到店小蜜里去弄更高级的) 这里有两个版本 一个是团队版本,一个是个人版本 个人版本可以客服独立设置 团队...
1 2 3 4 5 ... 20
收藏数 174,774
精华内容 69,909
关键字:

自动回复