当前位置:   article > 正文

javaweb聊天室引入图灵机器人智能对话_javaweb调用图灵机器人

javaweb调用图灵机器人

很多人都开发过在线聊天室,但是很少有引入robot api的,如果有一个智能机器人和大家“聊骚”,这样聊天室的氛围岂不是更加愉快。

图灵机器人网址:http://www.tuling123.com/

注册登录后可设置一些机器人的基本信息(它还可以随着年龄的增长而学习知识技能的提升)


在知识库一栏可设置一些常用知识关键词汇的答案信息


能力扩展中开启你所涉及的领域:


下面开始在web中引入robot,先上图(当然也支持多人在线聊天)



怎么样,挺智能的吧。说说开发吧,首先要用到websockettomcat8

Js核心代码:

  1. var wsServer = null;
  2. var ws = null;
  3. //wsServer = "ws://" + location.host+"${pageContext.request.contextPath}" + "/chatServer";
  4. wsServer = "ws://localhost:8080/webChat/chatServer";//注意浏览器ip要与此处一致,否则session获取不到
  5. ws = new WebSocket(wsServer); //创建WebSocket对象
  6. ws.onopen = function (evt) {
  7. //alert('first onopen!');
  8. layer.msg("已经建立连接", { offset: 0});
  9. };
  10. ws.onmessage = function (evt) {
  11. //alert('first onmessage!');
  12. //alert('解析后台传回的消息,并予以展示');
  13. analysisMessage(evt.data); //解析后台传回的消息,并予以展示
  14. };
  15. ws.onerror = function (evt) {
  16. //alert('first onerror!'+evt);
  17. //console.log(evt);
  18. layer.msg("产生异常", { offset: 0});
  19. };
  20. ws.onclose = function (evt) {
  21. //alert('first onclose!');
  22. layer.msg("已经关闭连接", { offset: 0});
  23. };
  24. /**
  25. * 连接
  26. */
  27. function getConnection(){
  28. if(ws == null){
  29. ws = new WebSocket(wsServer); //创建WebSocket对象
  30. ws.onopen = function (evt) {
  31. layer.msg("成功建立连接!", { offset: 0});
  32. };
  33. ws.onmessage = function (evt) {
  34. analysisMessage(evt.data); //解析后台传回的消息,并予以展示
  35. };
  36. ws.onerror = function (evt) {
  37. layer.msg("产生异常", { offset: 0});
  38. };
  39. ws.onclose = function (evt) {
  40. layer.msg("已经关闭连接", { offset: 0});
  41. };
  42. }else{
  43. layer.msg("连接已存在!", { offset: 0, shift: 6 });
  44. }
  45. }
  46. /**
  47. * 关闭连接
  48. */
  49. function closeConnection(){
  50. if(ws != null){
  51. ws.close();
  52. ws = null;
  53. $("#list").html(""); //清空在线列表
  54. layer.msg("已经关闭连接", { offset: 0});
  55. }else{
  56. layer.msg("未开启连接", { offset: 0, shift: 6 });
  57. }
  58. }
  59. /**
  60. * 检查连接
  61. */
  62. function checkConnection(){
  63. if(ws != null){
  64. layer.msg(ws.readyState == 0? "连接异常":"连接正常", { offset: 0});
  65. }else{
  66. layer.msg("连接未开启!", { offset: 0, shift: 6 });
  67. }
  68. }
  69. /**
  70. * 发送信息给后台
  71. */
  72. function sendMessage(){
  73. if(ws == null){
  74. layer.msg("连接未开启!", { offset: 0, shift: 6 });
  75. return;
  76. }
  77. var message = $("#message").val();
  78. var to = $("#sendto").text() == "全体成员"? "": $("#sendto").text();
  79. if(message == null || message == ""){
  80. layer.msg("请不要惜字如金!", { offset: 0, shift: 6 });
  81. return;
  82. }
  83. $("#tuling").text() == "已上线"? tuling(message):console.log("图灵机器人未开启"); //检测是否加入图灵机器人
  84. ws.send(JSON.stringify({
  85. message : {
  86. content : message,
  87. from : '${userid}',
  88. to : to, //接收人,如果没有则置空,如果有多个接收人则用,分隔
  89. time : getDateFull()
  90. },
  91. type : "message"
  92. }));
  93. }
  94. /**
  95. * 解析后台传来的消息
  96. * "massage" : {
  97. * "from" : "xxx",
  98. * "to" : "xxx",
  99. * "content" : "xxx",
  100. * "time" : "xxxx.xx.xx"
  101. * },
  102. * "type" : {notice|message},
  103. * "list" : {[xx],[xx],[xx]}
  104. */
  105. function analysisMessage(message){
  106. message = JSON.parse(message);
  107. if(message.type == "message"){ //会话消息
  108. showChat(message.message);
  109. }
  110. if(message.type == "notice"){ //提示消息
  111. showNotice(message.message);
  112. }
  113. if(message.list != null && message.list != undefined){ //在线列表
  114. showOnline(message.list);
  115. }
  116. }
  117. /**
  118. * 展示提示信息
  119. */
  120. function showNotice(notice){
  121. $("#chat").append("<div><p class=\"am-text-success\" style=\"text-align:center\"><span class=\"am-icon-bell\"></span> "+notice+"</p></div>");
  122. var chat = $("#chat-view");
  123. chat.scrollTop(chat[0].scrollHeight); //让聊天区始终滚动到最下面
  124. }
  125. /**
  126. * 展示会话信息
  127. */
  128. function showChat(message){
  129. console.log(message);
  130. var to = message.to == null || message.to == ""? "全体成员" : message.to; //获取接收人
  131. var isSef = '${userid}' == message.from ? "am-comment-flip" : ""; //如果是自己则显示在右边,他人信息显示在左边
  132. var html = "<li class=\"am-comment "+isSef+" am-comment-primary\"><a href=\"#link-to-user-home\"><img width=\"48\" height=\"48\" class=\"am-comment-avatar\" alt=\"\" src=\"${ctx}/static/head/"+message.from+".jpg\"></a><div class=\"am-comment-main\">\n" +
  133. "<header class=\"am-comment-hd\"><div class=\"am-comment-meta\"> <a class=\"am-comment-author\" href=\"#link-to-user\">"+message.from+"</a> 发表于<time> "+message.time+"</time> 发送给: "+to+" </div></header><div class=\"am-comment-bd\"> <p>"+message.content+"</p></div></div></li>";
  134. $("#chat").append(html);
  135. $("#message").val(""); //清空输入区
  136. var chat = $("#chat-view");
  137. chat.scrollTop(chat[0].scrollHeight); //让聊天区始终滚动到最下面
  138. }
  139. /**
  140. * 展示在线列表
  141. */
  142. function showOnline(list){
  143. $("#list").html(""); //清空在线列表
  144. $.each(list, function(index, item){ //添加私聊按钮
  145. var li = "<li>"+item+"</li>";
  146. if('${userid}' != item){ //排除自己
  147. li = "<li>"+item+" <button type=\"button\" class=\"am-btn am-btn-xs am-btn-primary am-round\" οnclick=\"addChat('"+item+"');\"><span class=\"am-icon-phone\"><span> 私聊</button></li>";
  148. }
  149. $("#list").append(li);
  150. });
  151. $("#onlinenum").text($("#list li").length); //获取在线人数
  152. }
  153. /**
  154. * 图灵机器人
  155. * @param message
  156. */
  157. function tuling(message){
  158. var html;
  159. $.getJSON("http://www.tuling123.com/openapi/api?key=6ad8b4d96861f17d68270216c880d5e3&info=" + message,function(data){
  160. if(data.code == 100000){
  161. html = "<li class=\"am-comment am-comment-primary\"><a href=\"#link-to-user-home\"><img width=\"48\" height=\"48\" class=\"am-comment-avatar\" alt=\"\" src=\"${ctx}/static/img/robot.jpg\"></a><div class=\"am-comment-main\">\n" +
  162. "<header class=\"am-comment-hd\"><div class=\"am-comment-meta\"> <a class=\"am-comment-author\" href=\"#link-to-user\">Robot</a> 发表于<time> "+getDateFull()+"</time> 发送给: ${userid}</div></header><div class=\"am-comment-bd\"> <p>"+data.text+"</p></div></div></li>";
  163. }
  164. if(data.code == 200000){
  165. html = "<li class=\"am-comment am-comment-primary\"><a href=\"#link-to-user-home\"><img width=\"48\" height=\"48\" class=\"am-comment-avatar\" alt=\"\" src=\"${ctx}/static/img/robot.jpg\"></a><div class=\"am-comment-main\">\n" +
  166. "<header class=\"am-comment-hd\"><div class=\"am-comment-meta\"> <a class=\"am-comment-author\" href=\"#link-to-user\">Robot</a> 发表于<time> "+getDateFull()+"</time> 发送给: ${userid}</div></header><div class=\"am-comment-bd\"> <p>"+data.text+"</p><a href=\""+data.url+"\" target=\"_blank\">"+data.url+"</a></div></div></li>";
  167. }
  168. $("#chat").append(html);
  169. var chat = $("#chat-view");
  170. chat.scrollTop(chat[0].scrollHeight);
  171. $("#message").val(""); //清空输入区
  172. });
  173. }

Java Websocket服务核心代码:

  1. package com.amayadream.webchat.websocket;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import javax.servlet.http.HttpSession;
  5. import javax.websocket.*;
  6. import javax.websocket.server.ServerEndpoint;
  7. import java.io.IOException;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.concurrent.CopyOnWriteArraySet;
  13. /**
  14. * websocket服务
  15. * @author : Ardo
  16. * @time : 2017.05
  17. */
  18. @ServerEndpoint(value = "/chatServer", configurator = HttpSessionConfigurator.class)
  19. public class ChatServer {
  20. private static int onlineCount = 0; //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
  21. private static CopyOnWriteArraySet<ChatServer> webSocketSet = new CopyOnWriteArraySet<ChatServer>();
  22. private Session session; //与某个客户端的连接会话,需要通过它来给客户端发送数据
  23. private String userid; //用户名
  24. private HttpSession httpSession; //request的session
  25. private static List<String> list = new ArrayList<String>(); //在线列表,记录用户名称
  26. private static Map<String, Object> routetab = new HashMap<String, Object>(); //用户名和websocket的session绑定的路由表
  27. /**
  28. * 连接建立成功调用的方法
  29. * @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
  30. */
  31. @OnOpen
  32. public void onOpen(Session session, EndpointConfig config){
  33. //System.out.println("********************ChatServer onOpen************************");
  34. this.session = session;
  35. webSocketSet.add(this); //加入set中
  36. addOnlineCount(); //在线数加1;
  37. this.httpSession = (HttpSession) config.getUserProperties().get(HttpSession.class.getName());
  38. this.userid=(String) httpSession.getAttribute("userid"); //获取当前用户
  39. list.add(userid); //将用户名加入在线列表
  40. routetab.put(userid, session); //将用户名和session绑定到路由表
  41. String message = getMessage("[" + userid + "]加入聊天室,当前在线人数为"+getOnlineCount()+"位", "notice", list);
  42. broadcast(message); //广播
  43. }
  44. /**
  45. * 连接关闭调用的方法
  46. */
  47. @OnClose
  48. public void onClose(){
  49. //System.out.println("********************ChatServer onClose************************");
  50. webSocketSet.remove(this); //从set中删除
  51. subOnlineCount(); //在线数减1
  52. list.remove(userid); //从在线列表移除这个用户
  53. routetab.remove(userid);
  54. String message = getMessage("[" + userid +"]离开了聊天室,当前在线人数为"+getOnlineCount()+"位", "notice", list);
  55. broadcast(message); //广播
  56. }
  57. /**
  58. * 接收客户端的message,判断是否有接收人而选择进行广播还是指定发送
  59. * @param _message 客户端发送过来的消息
  60. */
  61. @OnMessage
  62. public void onMessage(String _message) {
  63. //System.out.println("********************ChatServer onMessage************************");
  64. JSONObject chat = JSON.parseObject(_message);
  65. JSONObject message = JSON.parseObject(chat.get("message").toString());
  66. if(message.get("to") == null || message.get("to").equals("")){ //如果to为空,则广播;如果不为空,则对指定的用户发送消息
  67. broadcast(_message);
  68. }else{
  69. String [] userlist = message.get("to").toString().split(",");
  70. singleSend(_message, (Session) routetab.get(message.get("from"))); //发送给自己,这个别忘了
  71. for(String user : userlist){
  72. if(!user.equals(message.get("from"))){
  73. singleSend(_message, (Session) routetab.get(user)); //分别发送给每个指定用户
  74. }
  75. }
  76. }
  77. }
  78. /**
  79. * 发生错误时调用
  80. * @param error
  81. */
  82. @OnError
  83. public void onError(Throwable error){
  84. //System.out.println("********************ChatServer onError************************");
  85. error.printStackTrace();
  86. }
  87. /**
  88. * 广播消息
  89. * @param message
  90. */
  91. public void broadcast(String message){
  92. //System.out.println("********************ChatServer broadcast************************");
  93. for(ChatServer chat: webSocketSet){
  94. try {
  95. chat.session.getBasicRemote().sendText(message);
  96. } catch (IOException e) {
  97. e.printStackTrace();
  98. continue;
  99. }
  100. }
  101. }
  102. /**
  103. * 对特定用户发送消息
  104. * @param message
  105. * @param session
  106. */
  107. public void singleSend(String message, Session session){
  108. //System.out.println("********************ChatServer singleSend************************");
  109. try {
  110. session.getBasicRemote().sendText(message);
  111. } catch (IOException e) {
  112. e.printStackTrace();
  113. }
  114. }
  115. /**
  116. * 组装返回给前台的消息
  117. * @param message 交互信息
  118. * @param type 信息类型
  119. * @param list 在线列表
  120. * @return
  121. */
  122. public String getMessage(String message, String type, List list){
  123. //System.out.println("********************ChatServer getMessage************************");
  124. JSONObject member = new JSONObject();
  125. member.put("message", message);
  126. member.put("type", type);
  127. member.put("list", list);
  128. return member.toString();
  129. }
  130. public int getOnlineCount() {
  131. //System.out.println("********************ChatServer getOnlineCount************************");
  132. return onlineCount;
  133. }
  134. public void addOnlineCount() {
  135. //System.out.println("********************ChatServer addOnlineCount************************");
  136. ChatServer.onlineCount++;
  137. }
  138. public void subOnlineCount() {
  139. //System.out.println("********************ChatServer subOnlineCount************************");
  140. ChatServer.onlineCount--;
  141. }
  142. }

以上为核心代码,需要源码的留下邮箱吧!





声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/417955
推荐阅读
  

闽ICP备14008679号