我怎么能先聊聊聊天?

时间:2017-10-19 21:40:07

标签: unity3d ibm-cloud ibm-watson watson-conversation

我使用Unity3d和IBM沃森谈话制作了一个聊天机器人。

它就像我的网络工作区一样非常好。

在我的网络工作区中,聊天机器人通过识别“欢迎”与我交谈。

然而在团结中,我看不到欢迎文本,所以我做了假文本以开始谈话一段时间,但我改变了我的一些进展,我想先让它说话。我怎么能先聊聊聊天对话?

using IBM.Watson.DeveloperCloud.Services.Conversation.v1;
using IBM.Watson.DeveloperCloud.Utilities;
using System;
using System.Collections.Generic;
using UnityEngine;

class Watson : MonoBehaviour{    
static Credentials credentials;
static Conversation _conversation;
void Start()
{
    credentials = new Credentials("xx-xx-xx-xx-xx", "xx", "https://gateway.watsonplatform.net/conversation/api");
  //  credentials.Url = "";
    _conversation = new Conversation(credentials);

}
static Action<string, ManagerChat.Feel, bool> Act;
public static void GoMessage(string _str,Action<string, ManagerChat.Feel,bool> _act)
{

    if (!_conversation.Message(OnMessage, "xx-xx-xx-xx-xx", _str))
        Debug.Log("ExampleConversation Failed to message!");

    Act = _act;
}

static bool GetIntent(Dictionary<string, object> respDict)
{
    object intents;
    respDict.TryGetValue("intents", out intents);

    object intentString = new object();

    object confidenceString = new object();

    foreach (var intentObj in (intents as List<object>))
    {
        Dictionary<string, object> intentDict = intentObj as Dictionary<string, object>;

        intentDict.TryGetValue("intent", out intentString);


        intentDict.TryGetValue("confidence", out confidenceString);
    }
    string str = intentString as string;

    if (str == "6사용자_마무리")
        return true;

    return false;

}

static string GetOutput(Dictionary<string, object> respDict)
{
    object outputs;
    respDict.TryGetValue("output", out outputs);

    object output;
    (outputs as Dictionary<string, object>).TryGetValue("text", out output);

    string var = (output as List<object>)[0] as string;

    return var;
}

static ManagerChat.Feel GetEntities(Dictionary<string, object> respDict)
{
    object entities;
    respDict.TryGetValue("entities", out entities);

    List<object> entitieList = (entities as List<object>);

    if(entitieList.Count == 0)
    {
        return ManagerChat.Feel.Normal;
    }
    else
    {
        object entitie;
        (entitieList[0] as Dictionary<string, object>).TryGetValue("value", out entitie);
        ManagerChat.Feel feel = ManagerChat.Feel.NONE;

        string str = entitie as string;

        switch (str)
        {
            case "Happy":
                feel = ManagerChat.Feel.Happy;
                break;
            case "Expect":
                feel = ManagerChat.Feel.Expect;
                break;
            case "Born":
                feel = ManagerChat.Feel.Born;
                break;
            case "Sad":
                feel = ManagerChat.Feel.Sad;
                break;
            case "Surprise":
                feel = ManagerChat.Feel.Surprise;
                break;
            case "Normal":
                feel = ManagerChat.Feel.Normal;
                break;
            default:
                break;
        }

        return feel;
    }
}

static void OnMessage(object resp, string data)
{
    Dictionary<string, object> respDict = resp as Dictionary<string, object>;

  bool flag = (GetIntent(respDict));

    string output = (GetOutput(respDict));

   ManagerChat.Feel feel = GetEntities(respDict);
  //      Debug.Log(resp);
  //      Debug.Log(data);
        Act(output,feel, flag);
    }
}

2 个答案:

答案 0 :(得分:1)

我刚修好了issue。现在,您可以将空字符串传递给Conversation服务以启动对话。

//  Test initate with empty string
if (!_conversation.Message(OnMessage, _workspaceId, ""))
    Log.Debug("ExampleConversation", "Failed to message!");

private void OnMessage(object resp, string data)
{
    Log.Debug("ExampleConversation", "Conversation: Message Response: {0}", data);
}

答案 1 :(得分:0)

为什么不使用相同的方法向对话发送假文本?可能你的应用程序需要检查是否有新会话,发送假文本。或者更好的是,您的应用只需发送您自己的欢迎信息而无需进行对话。