/// <summary> /// Send user input to assistant. /// /// Send user input to an assistant and receive a response. /// /// There is no rate limit for this operation. /// </summary> /// <param name="successCallback">The function that is called when the operation is successful.</param> /// <param name="failCallback">The function that is called when the operation fails.</param> /// <param name="assistantId">Unique identifier of the assistant. You can find the assistant ID of an assistant /// on the **Assistants** tab of the Watson Assistant tool. For information about creating assistants, see the /// [documentation](https://cloud.ibm.com/docs/services/assistant/create-assistant.html#creating-assistants). /// /// **Note:** Currently, the v2 API does not support creating assistants.</param> /// <param name="sessionId">Unique identifier of the session.</param> /// <param name="request">The message to be sent. This includes the user's input, along with optional intents, /// entities, and context from the last response. (optional)</param> /// <returns><see cref="MessageResponse" />MessageResponse</returns> /// <param name="customData">A Dictionary<string, object> of data that will be passed to the callback. The raw /// json output from the REST call will be passed in this object as the value of the 'json' /// key.</string></param> public bool Message(SuccessCallback <MessageResponse> successCallback, FailCallback failCallback, String assistantId, String sessionId, MessageRequest request = null, Dictionary <string, object> customData = null) { if (successCallback == null) { throw new ArgumentNullException("successCallback is required for Message"); } if (failCallback == null) { throw new ArgumentNullException("failCallback is required for Message"); } if (string.IsNullOrEmpty(assistantId)) { throw new ArgumentException("assistantId is required for Message"); } if (string.IsNullOrEmpty(sessionId)) { throw new ArgumentException("sessionId is required for Message"); } MessageRequestObj req = new MessageRequestObj(); req.SuccessCallback = successCallback; req.FailCallback = failCallback; req.HttpMethod = UnityWebRequest.kHttpVerbPOST; req.DisableSslVerification = DisableSslVerification; req.CustomData = customData == null ? new Dictionary <string, object>() : customData; if (req.CustomData.ContainsKey(Constants.String.CUSTOM_REQUEST_HEADERS)) { foreach (KeyValuePair <string, string> kvp in req.CustomData[Constants.String.CUSTOM_REQUEST_HEADERS] as Dictionary <string, string> ) { req.Headers.Add(kvp.Key, kvp.Value); } } if (request != null) { fsData data = null; _serializer.TrySerialize(request, out data); string json = data.ToString().Replace('\"', '"'); req.Send = Encoding.UTF8.GetBytes(json); } req.Headers["Content-Type"] = "application/json"; req.Parameters["version"] = VersionDate; req.OnResponse = OnMessageResponse; RESTConnector connector = RESTConnector.GetConnector(Credentials, string.Format("/v2/assistants/{0}/sessions/{1}/message", assistantId, sessionId)); if (connector == null) { return(false); } return(connector.Send(req)); }
/// <summary> /// Send user input to assistant. /// /// Send user input to an assistant and receive a response. /// /// There is no rate limit for this operation. /// </summary> /// <param name="successCallback">The function that is called when the operation is successful.</param> /// <param name="failCallback">The function that is called when the operation fails.</param> /// <param name="assistantId">Unique identifier of the assistant. You can find the assistant ID of an assistant /// on the **Assistants** tab of the Watson Assistant tool. For information about creating assistants, see the /// [documentation](https://console.bluemix.net/docs/services/assistant/create-assistant.html#creating-assistants). /// /// **Note:** Currently, the v2 API does not support creating assistants.</param> /// <param name="sessionId">Unique identifier of the session.</param> /// <param name="request">The message to be sent. This includes the user's input, along with optional intents, /// entities, and context from the last response. (optional)</param> /// <returns><see cref="MessageResponse" />MessageResponse</returns> /// <param name="customData">A Dictionary<string, object> of data that will be passed to the callback. The raw /// json output from the REST call will be passed in this object as the value of the 'json' /// key.</string></param> public bool Message(SuccessCallback <MessageResponse> successCallback, FailCallback failCallback, String assistantId, String sessionId, MessageRequest request = null, Dictionary <string, object> customData = null) { if (successCallback == null) { throw new ArgumentNullException("successCallback"); } if (failCallback == null) { throw new ArgumentNullException("failCallback"); } MessageRequestObj req = new MessageRequestObj(); req.SuccessCallback = successCallback; req.FailCallback = failCallback; req.CustomData = customData == null ? new Dictionary <string, object>() : customData; if (req.CustomData.ContainsKey(Constants.String.CUSTOM_REQUEST_HEADERS)) { foreach (KeyValuePair <string, string> kvp in req.CustomData[Constants.String.CUSTOM_REQUEST_HEADERS] as Dictionary <string, string> ) { req.Headers.Add(kvp.Key, kvp.Value); } } IDictionary <string, string> requestDict = new Dictionary <string, string>(); int iterator = 0; StringBuilder stringBuilder = new StringBuilder("{"); foreach (KeyValuePair <string, string> property in requestDict) { string delimeter = iterator < requestDict.Count - 1 ? "," : ""; stringBuilder.Append(string.Format("\"{0}\": {1}{2}", property.Key, property.Value, delimeter)); iterator++; } stringBuilder.Append("}"); string stringToSend = stringBuilder.ToString(); req.Send = Encoding.UTF8.GetBytes(stringToSend); req.Headers["Content-Type"] = "application/json"; req.Parameters["version"] = VersionDate; req.OnResponse = OnMessageResponse; RESTConnector connector = RESTConnector.GetConnector(Credentials, string.Format("/v2/assistants/{0}/sessions/{1}/message", assistantId, sessionId)); if (connector == null) { return(false); } return(connector.Send(req)); }