用微信小程序实现简单的人工客服
最近在做软件工程的课程设计,选择性的做了微信小程序的简单的人工客服。在这里对该课程设计的原理和实现进行一个讲解,也算做一个总结和笔记,方便自己以后查看、复习和帮助大家的学习。
- 工具:微信开发者工具、Eclipse、Tomcat、图林机器人V2版、百度AI语音识别
- 实现原理与过程:
(1)微信小程序获取用户输入的文字、图片或语音消息,发送给Tomcat服务器;
(2)Tomcat服务器接收到消息后交给对应的servel进行处理。因为微信小程序发送文字消息可以使用GET方式,发送文件必须使用POST方式,所以只用一个Sevlet就可以进行处理。
(3)Servlet获取GET方式的请求,则调用doGet方法,获取请求携带的用户消息,发送给图林机器人,得到图林机器人的随机回复消息后,返回给微信小程序,显示给用户;
(4)Servlet获取POST方式的请求,则调用doPost方法,获取微信小程序上传的文件消息,先保存在本地的临时文件夹中,在判断是图片消息还是语音消息。如果是图片消息,仅保存在本地,不做任何处理,只返回给微信小程序一个文字回复,如:“图片我看不懂,你自己看”;如果是语音消息,则发送给百度AI进行语音识别,识别成功,在将结果发送给图林机器人,取得图林机器人的回复后,返回给微信小程序,显示给用户;识别失败,则返回给微信小程序一个文字回复,如:“太吵了,听不清楚。。”;
- 实现过程:
(1)服务器实现:
- 项目结构:
- 导入jar包到lib文件夹下:
- 新建web项目,创建一个Servelt(图中的MyServlet):
servlet部分
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
private static final String URL = "http://openapi.tuling123.com/openapi/api/v2";
private Tuling tuling = new Tuling();
//进行文本聊天
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String reqMes = request.getParameter("reqMes").toString().trim();
// System.out.println(reqMes);
//将用户发送过来的消息转换成JSON格式
String reqJson = tuling.getReqJson(reqMes);
//发送消息到图林机器人,获取图林机器人的回复
String sendPost = tuling.sendPost(URL, reqJson);
//获取图林机器人回复的JSON消息中的主要回复内容
String string = tuling.getResultMeg("[" + sendPost +"]");
System.out.println("get提问: "+reqMes);
System.out.println("回复: "+string);
//返回值给小程序
//将图林回复的消息string返回给小程序
PrintWriter out = response.getWriter();
out.write(string);
out.flush();
o