使用节点红色将聊天机器人实现为http,如何使用AJAX中的bluemix音调分析器分析输入音调

问题描述 投票:0回答:1

我一直在尝试创建一个聊天机器人,询问心理问题以分析一个人的感受。我在Bluemix中创建了一个聊天机器人,并在本教程的帮助下将其实现为节点红色:https://github.com/watson-developer-cloud/node-red-labs/tree/master/basic_examples/conversation所以我的流程非常相似,另外还有我添加了音调分析器并将其连接到与会话相同的部分。我的主要问题是我似乎无法通过点表示法访问html模板中音调分析器的值,但响应调试显示输入肯定是在分析。如何调整流程或AJAX代码,以便模板允许访问音调分析器值。 (注释掉的代码是我尝试对我的问题进行排序,虽然我并没有特别关注AJAX所以它有点混乱)。

<html>   <head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>       My BOT    </title>    <link rel="stylesheet"
    type="text/css"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />   </head>   <body>

<div class="container">
  <div id="no-script"class="bg-info">
    This application needs JavaScript enabled in your browser!
  </div>
  <div id="id_contextdump"></div>

  <h1>My BOT</h1>
  <div id=id_botchathistory>      </div>

  <div>
      <form>
        <label for="id_chattext">Your Input: </label>
        <input type="text" name="chattext" id="id_chattext">
        <br/><br/>
      </form>
      <button onclick="javascript:onChatClick()">Send</button>    </div>
</div>
<div id="id_tone">
<table>
    <thead>
        <tr>
            <th>Tone</th>
            <th>Score</th>
        </tr>
        {{#response.document_tone.tone_categories.0.tones}}
        <tr>
            <td>{{tone_id}}</td>
            <td>{{score}}</td>
        </tr>
        {{/response.document_tone.tone_categories.0.tones}}
    </thead>
</table>
</div>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<script type="text/javascript">

  $(document).ready(function() {
      javascriptCheck();
        $('#id_contextdump').hide();
  });

  // if javascript is enabled on the browser then can
  // remove the warning message
  function javascriptCheck() {
    $('#no-script').remove();
  }

  function createNewDiv(who, message) {
    var txt = who + ' : ' + message;
    return $('<div></div>').text(txt);
  }

  function chat(person, txt) {
    $('#id_botchathistory').append(createNewDiv(person, txt));
  }    
   //      function updateTone(){ //          $('#id_tone').append(createNewDiv(response.document_tone.tone_categories.0.tones)) //      }

  function processOK(response) {
    console.log(response);
    console.log(response.botresponse.messageout);
    console.log(response.botresponse.messageout.output.text);
    console.log(response.botresponse.messageout.context);
    chat('Bot', response.botresponse.messageout.output.text);
    $('#id_contextdump').data('convContext', response.botresponse.messageout.context);
  }

  function processNotOK() {
    chat('Error', 'Error whilst attempting to talk to Bot');
  }

  function invokeAjax(message) {
    var contextdata = $('#id_contextdump').data('convContext');
    console.log('checking stashed context data');
    console.log(contextdata);


    //var ajaxData = "msgdata=" + message;
    var ajaxData = {};
    ajaxData.msgdata = message;
    if (contextdata) {
      ajaxData.context = contextdata;    
    } //        var tone = { //            document: {}, //            sentence: {} //        };
     //        tone.document = getTones(data.document_tone);

    $.ajax({
      type: 'POST',
      url: 'botchat',
      data: ajaxData,
      success: processOK,
      error: processNotOK
    });
  }

  // User has entered some text.
  function onChatClick() {
    var txt = $('#id_chattext').val();
    chat('You', txt);
    invokeAjax(txt); //        updateTone();
  }
   //      var tone_analyser = watson.tone_analyzer({ //        username: 'e7cc7d78-d63f-42a9-ac1b-c900bbee33a4', //        password: '57NyBACkO5s3', //        version: 'v3', //        version_date: '2016-05-19' //    });
   //      window.setInterval("refreshDiv()", 500); //      function refreshDiv(){ //          tone_analyser= tone_analyser; //    }

</script>   </body> </html>

在:

_// stash away incoming data_
msg.mydata = {};
msg.mydata.messagein = msg.req.body.msgdata;
msg.payload = msg.mydata.messagein;

msg.params = { "context": msg.req.body.context};

return msg;

日期:

msg.mydata.messageout = msg.payload;

msg.payload = {};
msg.payload.botresponse = msg.mydata;

return msg;
javascript jquery html ajax node-red
1个回答
0
投票

问题是因为你在in函数节点之后分叉了流。除非out函数节点仅在收到2个输入消息后输出,否则这将不起作用。

当你分叉流时,它会顺序运行,而不是并行运行,这是因为NodeJS是完全单线程的。这意味着只有来自Art Attack节点的结果才会返回到http-out节点并返回到您的页面。

如果不确切知道out函数节点中的内容,就不可能说明如何解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.