<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def message(self, workspace_id, input=None, intents=None, entities=None, alternate_intents=None, context=None, output=None, nodes_visited_details=None, **kwargs):
 """ Get response to user input. Send user input to a workspace and receive a response. There is no rate limit for this operation. :param str workspace_id: Unique identifier of the workspace. :param MessageInput input: An input object that includes the input text. :param list[RuntimeIntent] intents: Intents to use when evaluating the user input. Include intents from the previous response to continue using those intents rather than trying to recognize intents in the new input. :param list[RuntimeEntity] entities: Entities to use when evaluating the message. Include entities from the previous response to continue using those entities rather than detecting entities in the new input. :param bool alternate_intents: Whether to return more than one intent. A value of `true` indicates that all matching intents are returned. :param Context context: State information for the conversation. To maintain state, include the context from the previous response. :param OutputData output: An output object that includes the response to the user, the dialog nodes that were triggered, and messages from the log. :param bool nodes_visited_details: Whether to include additional diagnostic information about the dialog nodes that were visited during processing of the message. :param dict headers: A `dict` containing the request headers :return: A `DetailedResponse` containing the result, headers and HTTP status code. :rtype: DetailedResponse """


        if workspace_id is None:
            raise ValueError('workspace_id must be provided')
        if input is not None:
            input = self._convert_model(input, MessageInput)
        if intents is not None:
            intents = [self._convert_model(x, RuntimeIntent) for x in intents]
        if entities is not None:
            entities = [self._convert_model(x, RuntimeEntity) for x in entities]
        if context is not None:
            context = self._convert_model(context, Context)
        if output is not None:
            output = self._convert_model(output, OutputData)

        headers = {}
        if 'headers' in kwargs:
            headers.update(kwargs.get('headers'))
        sdk_headers = get_sdk_headers('conversation', 'V1', 'message')
        headers.update(sdk_headers)

        params = {
            'version': self.version,
            'nodes_visited_details': nodes_visited_details
        }

        data = {
            'input': input,
            'intents': intents,
            'entities': entities,
            'alternate_intents': alternate_intents,
            'context': context,
            'output': output
        }

        url = '/v1/workspaces/{0}/message'.format(
            *self._encode_path_vars(workspace_id))
        response = self.request(
            method='POST',
            url=url,
            headers=headers,
            params=params,
            json=data,
            accept_json=True)
        return response