Ошибка IBM Watson conversation service: не удается преобразовать из "группы методов" в "разговор".onMessage'


Я пытаюсь запустить IBM Watson conversation service в unity и ниже приведен фрагмент кода

private Conversation m_Conversation = new Conversation();
    private string m_WrokspaceID = "xyz";
    private string m_input = "help";


    // Use this for initialization
    void Start () {
        Debug.Log("user : " + m_input);
        m_Conversation.Message(OnMessage, m_WrokspaceID, m_input);
    }

    void OnMessage(MessageResponse resp, string customData) {
        foreach (Intent mi in resp.intents)
        {
            Debug.Log("intent : " + mi.intent + ", confidence :" + mi.confidence);
        }

        Debug.Log("response :" + resp.output.text);
    }

Но я получаю эту ошибку

cannot convert from 'method group' to 'conversation.onMessage'

Что я делаю не так? Фрагмент кода, который я получаю от официального РЕПО GitHub watson.

Объект, возвращающийся в качестве предложенного ответа: Введите описание изображения здесь

2 3

2 ответа:

Вы можете привести ответ в виде словаря и попытаться получить значение оттуда. Используя универсальный объект вместо статической модели данных, вы можете передать больше информации через ответ.

private void OnMessage(object resp, string customData)
{
    Dictionary<string, object> respDict = resp as Dictionary<string, object>;
    object intents;
    respDict.TryGetValue("intents", out intents);

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

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

        object confidenceString;
        intentDict.TryGetValue("confidence", out confidenceString);

        Log.Debug("ExampleConversation", "intent: {0} | confidence {1}", intentString.ToString(), confidenceString.ToString());
    }
}

Согласностроке 32 в исходном коде Conversation делегат был изменен на:

public delegate void OnMessage(object resp, string customData);

Вам придется изменить свой метод OnMessage, чтобы отразить это:

void OnMessage(object resp, string customData) {
    // ...
}