docs: def tone_chat(self,
                    utterances,
                    content_language=None,
                    accept_language=None,
                    **kwargs):
          """
          Analyze customer engagement tone.
  
          Use the customer engagement endpoint to analyze the tone of customer service and
          customer support conversations. For each utterance of a conversation, the method
          reports the most prevalent subset of the following seven tones: sad, frustrated,
          satisfied, excited, polite, impolite, and sympathetic.
          If you submit more than 50 utterances, the service returns a warning for the
          overall content and analyzes only the first 50 utterances. If you submit a single
          utterance that contains more than 500 characters, the service returns an error for
          that utterance and does not analyze the utterance. The request fails if all
          utterances have more than 500 characters. Per the JSON specification, the default
          character encoding for JSON content is effectively always UTF-8.
          **See also:** [Using the customer-engagement
          endpoint](https://cloud.ibm.com/docs/services/tone-analyzer/using-tone-chat.html#using-the-customer-engagement-endpoint).
  
          :param list[Utterance] utterances: An array of `Utterance` objects that provides
          the input content that the service is to analyze.
          :param str content_language: The language of the input text for the request:
          English or French. Regional variants are treated as their parent language; for
          example, `en-US` is interpreted as `en`. The input content must match the
          specified language. Do not submit content that contains both languages. You can
          use different languages for **Content-Language** and **Accept-Language**.
          * **`2017-09-21`:** Accepts `en` or `fr`.
          * **`2016-05-19`:** Accepts only `en`.
          :param str accept_language: The desired language of the response. For
          two-character arguments, regional variants are treated as their parent language;
          for example, `en-US` is interpreted as `en`. You can use different languages for
          **Content-Language** and **Accept-Language**.
          :param dict headers: A `dict` containing the request headers
          :return: A `DetailedResponse` containing the result, headers and HTTP status code.
          :rtype: DetailedResponse
          """
  
          if utterances is None:
              raise ValueError('utterances must be provided')
          utterances = [self._convert_model(x, Utterance) for x in utterances]
  
          headers = {
              'Content-Language': content_language,
              'Accept-Language': accept_language
          }
          if 'headers' in kwargs:
              headers.update(kwargs.get('headers'))
          sdk_headers = get_sdk_headers('tone_analyzer', 'V3', 'tone_chat')
          headers.update(sdk_headers)
  
          params = {'version': self.version}
  
          data = {'utterances': utterances}
  
          url = '/v3/tone_chat'
          response = self.request(
              method='POST',
              url=url,
              headers=headers,
              params=params,
              json=data,
              accept_json=True)
          return response