=begin
PureCloud Platform API

With the PureCloud Platform API, you can control all aspects of your PureCloud environment. With the APIs you can access the system configuration, manage conversations and more.

OpenAPI spec version: v2
Contact: DeveloperEvangelists@genesys.com
Generated by: https://github.com/swagger-api/swagger-codegen.git

License: UNLICENSED
https://help.mypurecloud.com/articles/terms-and-conditions/

Terms of Service: https://help.mypurecloud.com/articles/terms-and-conditions/

=end

require "uri"

module PureCloud
  class VoicemailApi
    attr_accessor :api_client

    def initialize(api_client = ApiClient.default)
      @api_client = api_client
    end

    # Delete a voicemail message.
    # A user voicemail can only be deleted by its associated user. A group voicemail can only be deleted by a user that is a member of the group. A queue voicemail can only be deleted by a user with the acd voicemail delete permission.
    # @param message_id Message ID
    # @param [Hash] opts the optional parameters
    # @return [nil]
    def delete_voicemail_message(message_id, opts = {})
      delete_voicemail_message_with_http_info(message_id, opts)
      return nil
    end

    # Delete a voicemail message.
    # A user voicemail can only be deleted by its associated user. A group voicemail can only be deleted by a user that is a member of the group. A queue voicemail can only be deleted by a user with the acd voicemail delete permission.
    # @param message_id Message ID
    # @param [Hash] opts the optional parameters
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def delete_voicemail_message_with_http_info(message_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.delete_voicemail_message ..."
      end
      
      
      # verify the required parameter 'message_id' is set
      fail ArgumentError, "Missing the required parameter 'message_id' when calling VoicemailApi.delete_voicemail_message" if message_id.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/messages/{messageId}".sub('{format}','json').sub('{' + 'messageId' + '}', message_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:DELETE, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#delete_voicemail_message\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Delete all voicemail messages
    # 
    # @param [Hash] opts the optional parameters
    # @return [nil]
    def delete_voicemail_messages(opts = {})
      delete_voicemail_messages_with_http_info(opts)
      return nil
    end

    # Delete all voicemail messages
    # 
    # @param [Hash] opts the optional parameters
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def delete_voicemail_messages_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.delete_voicemail_messages ..."
      end
      
      # resource path
      local_var_path = "/api/v2/voicemail/messages".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:DELETE, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#delete_voicemail_messages\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get the group's mailbox information
    # 
    # @param group_id groupId
    # @param [Hash] opts the optional parameters
    # @return [VoicemailMailboxInfo]
    def get_voicemail_group_mailbox(group_id, opts = {})
      data, _status_code, _headers = get_voicemail_group_mailbox_with_http_info(group_id, opts)
      return data
    end

    # Get the group&#39;s mailbox information
    # 
    # @param group_id groupId
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailMailboxInfo, Fixnum, Hash)>] VoicemailMailboxInfo data, response status code and response headers
    def get_voicemail_group_mailbox_with_http_info(group_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_group_mailbox ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling VoicemailApi.get_voicemail_group_mailbox" if group_id.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/groups/{groupId}/mailbox".sub('{format}','json').sub('{' + 'groupId' + '}', group_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMailboxInfo')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_group_mailbox\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # List voicemail messages
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size Page size (default to 25)
    # @option opts [Integer] :page_number Page number (default to 1)
    # @return [VoicemailMessageEntityListing]
    def get_voicemail_group_messages(group_id, opts = {})
      data, _status_code, _headers = get_voicemail_group_messages_with_http_info(group_id, opts)
      return data
    end

    # List voicemail messages
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size Page size
    # @option opts [Integer] :page_number Page number
    # @return [Array<(VoicemailMessageEntityListing, Fixnum, Hash)>] VoicemailMessageEntityListing data, response status code and response headers
    def get_voicemail_group_messages_with_http_info(group_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_group_messages ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling VoicemailApi.get_voicemail_group_messages" if group_id.nil?
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/groups/{groupId}/messages".sub('{format}','json').sub('{' + 'groupId' + '}', group_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'pageSize'] = opts[:'page_size'] if opts[:'page_size']
      query_params[:'pageNumber'] = opts[:'page_number'] if opts[:'page_number']

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMessageEntityListing')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_group_messages\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get a group's voicemail policy
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @return [VoicemailGroupPolicy]
    def get_voicemail_group_policy(group_id, opts = {})
      data, _status_code, _headers = get_voicemail_group_policy_with_http_info(group_id, opts)
      return data
    end

    # Get a group&#39;s voicemail policy
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailGroupPolicy, Fixnum, Hash)>] VoicemailGroupPolicy data, response status code and response headers
    def get_voicemail_group_policy_with_http_info(group_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_group_policy ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling VoicemailApi.get_voicemail_group_policy" if group_id.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/groups/{groupId}/policy".sub('{format}','json').sub('{' + 'groupId' + '}', group_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailGroupPolicy')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_group_policy\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get the current user's mailbox information
    # 
    # @param [Hash] opts the optional parameters
    # @return [VoicemailMailboxInfo]
    def get_voicemail_mailbox(opts = {})
      data, _status_code, _headers = get_voicemail_mailbox_with_http_info(opts)
      return data
    end

    # Get the current user&#39;s mailbox information
    # 
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailMailboxInfo, Fixnum, Hash)>] VoicemailMailboxInfo data, response status code and response headers
    def get_voicemail_mailbox_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_mailbox ..."
      end
      
      # resource path
      local_var_path = "/api/v2/voicemail/mailbox".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMailboxInfo')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_mailbox\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get the current user's mailbox information
    # 
    # @param [Hash] opts the optional parameters
    # @return [VoicemailMailboxInfo]
    def get_voicemail_me_mailbox(opts = {})
      data, _status_code, _headers = get_voicemail_me_mailbox_with_http_info(opts)
      return data
    end

    # Get the current user&#39;s mailbox information
    # 
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailMailboxInfo, Fixnum, Hash)>] VoicemailMailboxInfo data, response status code and response headers
    def get_voicemail_me_mailbox_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_me_mailbox ..."
      end
      
      # resource path
      local_var_path = "/api/v2/voicemail/me/mailbox".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMailboxInfo')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_me_mailbox\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # List voicemail messages
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size Page size (default to 25)
    # @option opts [Integer] :page_number Page number (default to 1)
    # @return [VoicemailMessageEntityListing]
    def get_voicemail_me_messages(opts = {})
      data, _status_code, _headers = get_voicemail_me_messages_with_http_info(opts)
      return data
    end

    # List voicemail messages
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size Page size
    # @option opts [Integer] :page_number Page number
    # @return [Array<(VoicemailMessageEntityListing, Fixnum, Hash)>] VoicemailMessageEntityListing data, response status code and response headers
    def get_voicemail_me_messages_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_me_messages ..."
      end
      
      
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/me/messages".sub('{format}','json')

      # query parameters
      query_params = {}
      query_params[:'pageSize'] = opts[:'page_size'] if opts[:'page_size']
      query_params[:'pageNumber'] = opts[:'page_number'] if opts[:'page_number']

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMessageEntityListing')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_me_messages\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get the current user's voicemail policy
    # 
    # @param [Hash] opts the optional parameters
    # @return [VoicemailUserPolicy]
    def get_voicemail_me_policy(opts = {})
      data, _status_code, _headers = get_voicemail_me_policy_with_http_info(opts)
      return data
    end

    # Get the current user&#39;s voicemail policy
    # 
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailUserPolicy, Fixnum, Hash)>] VoicemailUserPolicy data, response status code and response headers
    def get_voicemail_me_policy_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_me_policy ..."
      end
      
      # resource path
      local_var_path = "/api/v2/voicemail/me/policy".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailUserPolicy')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_me_policy\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get a voicemail message
    # 
    # @param message_id Message ID
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :expand If the caller is a known user, which fields, if any, to expand
    # @return [VoicemailMessage]
    def get_voicemail_message(message_id, opts = {})
      data, _status_code, _headers = get_voicemail_message_with_http_info(message_id, opts)
      return data
    end

    # Get a voicemail message
    # 
    # @param message_id Message ID
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :expand If the caller is a known user, which fields, if any, to expand
    # @return [Array<(VoicemailMessage, Fixnum, Hash)>] VoicemailMessage data, response status code and response headers
    def get_voicemail_message_with_http_info(message_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_message ..."
      end
      
      
      # verify the required parameter 'message_id' is set
      fail ArgumentError, "Missing the required parameter 'message_id' when calling VoicemailApi.get_voicemail_message" if message_id.nil?
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/messages/{messageId}".sub('{format}','json').sub('{' + 'messageId' + '}', message_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'expand'] = @api_client.build_collection_param(opts[:'expand'], :multi) if opts[:'expand']

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMessage')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_message\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get media playback URI for this voicemail message
    # 
    # @param message_id Message ID
    # @param [Hash] opts the optional parameters
    # @option opts [String] :format_id The desired media format. (default to WEBM)
    # @return [VoicemailMediaInfo]
    def get_voicemail_message_media(message_id, opts = {})
      data, _status_code, _headers = get_voicemail_message_media_with_http_info(message_id, opts)
      return data
    end

    # Get media playback URI for this voicemail message
    # 
    # @param message_id Message ID
    # @param [Hash] opts the optional parameters
    # @option opts [String] :format_id The desired media format.
    # @return [Array<(VoicemailMediaInfo, Fixnum, Hash)>] VoicemailMediaInfo data, response status code and response headers
    def get_voicemail_message_media_with_http_info(message_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_message_media ..."
      end
      
      
      # verify the required parameter 'message_id' is set
      fail ArgumentError, "Missing the required parameter 'message_id' when calling VoicemailApi.get_voicemail_message_media" if message_id.nil?
      
      
      
      
      
      
      
      
      if opts[:'format_id'] && !['WAV', 'WEBM', 'WAV_ULAW', 'OGG_VORBIS', 'OGG_OPUS', 'MP3', 'NONE'].include?(opts[:'format_id'])
        fail ArgumentError, 'invalid value for "format_id", must be one of WAV, WEBM, WAV_ULAW, OGG_VORBIS, OGG_OPUS, MP3, NONE'
      end
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/messages/{messageId}/media".sub('{format}','json').sub('{' + 'messageId' + '}', message_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'formatId'] = opts[:'format_id'] if opts[:'format_id']

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMediaInfo')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_message_media\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # List voicemail messages
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [String] :ids An optional comma separated list of VoicemailMessage ids
    # @option opts [Array<String>] :expand If the caller is a known user, which fields, if any, to expand
    # @return [VoicemailMessageEntityListing]
    def get_voicemail_messages(opts = {})
      data, _status_code, _headers = get_voicemail_messages_with_http_info(opts)
      return data
    end

    # List voicemail messages
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [String] :ids An optional comma separated list of VoicemailMessage ids
    # @option opts [Array<String>] :expand If the caller is a known user, which fields, if any, to expand
    # @return [Array<(VoicemailMessageEntityListing, Fixnum, Hash)>] VoicemailMessageEntityListing data, response status code and response headers
    def get_voicemail_messages_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_messages ..."
      end
      
      
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/messages".sub('{format}','json')

      # query parameters
      query_params = {}
      query_params[:'ids'] = opts[:'ids'] if opts[:'ids']
      query_params[:'expand'] = @api_client.build_collection_param(opts[:'expand'], :multi) if opts[:'expand']

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMessageEntityListing')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_messages\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get a policy
    # 
    # @param [Hash] opts the optional parameters
    # @return [VoicemailOrganizationPolicy]
    def get_voicemail_policy(opts = {})
      data, _status_code, _headers = get_voicemail_policy_with_http_info(opts)
      return data
    end

    # Get a policy
    # 
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailOrganizationPolicy, Fixnum, Hash)>] VoicemailOrganizationPolicy data, response status code and response headers
    def get_voicemail_policy_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_policy ..."
      end
      
      # resource path
      local_var_path = "/api/v2/voicemail/policy".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailOrganizationPolicy')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_policy\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # List voicemail messages
    # 
    # @param queue_id Queue ID
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size Page size (default to 25)
    # @option opts [Integer] :page_number Page number (default to 1)
    # @return [VoicemailMessageEntityListing]
    def get_voicemail_queue_messages(queue_id, opts = {})
      data, _status_code, _headers = get_voicemail_queue_messages_with_http_info(queue_id, opts)
      return data
    end

    # List voicemail messages
    # 
    # @param queue_id Queue ID
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size Page size
    # @option opts [Integer] :page_number Page number
    # @return [Array<(VoicemailMessageEntityListing, Fixnum, Hash)>] VoicemailMessageEntityListing data, response status code and response headers
    def get_voicemail_queue_messages_with_http_info(queue_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_queue_messages ..."
      end
      
      
      # verify the required parameter 'queue_id' is set
      fail ArgumentError, "Missing the required parameter 'queue_id' when calling VoicemailApi.get_voicemail_queue_messages" if queue_id.nil?
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/queues/{queueId}/messages".sub('{format}','json').sub('{' + 'queueId' + '}', queue_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'pageSize'] = opts[:'page_size'] if opts[:'page_size']
      query_params[:'pageNumber'] = opts[:'page_number'] if opts[:'page_number']

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMessageEntityListing')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_queue_messages\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Search voicemails using the q64 value returned from a previous search
    # 
    # @param q64 q64
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :expand expand
    # @return [VoicemailsSearchResponse]
    def get_voicemail_search(q64, opts = {})
      data, _status_code, _headers = get_voicemail_search_with_http_info(q64, opts)
      return data
    end

    # Search voicemails using the q64 value returned from a previous search
    # 
    # @param q64 q64
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :expand expand
    # @return [Array<(VoicemailsSearchResponse, Fixnum, Hash)>] VoicemailsSearchResponse data, response status code and response headers
    def get_voicemail_search_with_http_info(q64, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_search ..."
      end
      
      
      # verify the required parameter 'q64' is set
      fail ArgumentError, "Missing the required parameter 'q64' when calling VoicemailApi.get_voicemail_search" if q64.nil?
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/search".sub('{format}','json')

      # query parameters
      query_params = {}
      query_params[:'q64'] = q64
      query_params[:'expand'] = @api_client.build_collection_param(opts[:'expand'], :multi) if opts[:'expand']

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailsSearchResponse')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_search\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get a user's voicemail policy
    # 
    # @param user_id User ID
    # @param [Hash] opts the optional parameters
    # @return [VoicemailUserPolicy]
    def get_voicemail_userpolicy(user_id, opts = {})
      data, _status_code, _headers = get_voicemail_userpolicy_with_http_info(user_id, opts)
      return data
    end

    # Get a user&#39;s voicemail policy
    # 
    # @param user_id User ID
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailUserPolicy, Fixnum, Hash)>] VoicemailUserPolicy data, response status code and response headers
    def get_voicemail_userpolicy_with_http_info(user_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.get_voicemail_userpolicy ..."
      end
      
      
      # verify the required parameter 'user_id' is set
      fail ArgumentError, "Missing the required parameter 'user_id' when calling VoicemailApi.get_voicemail_userpolicy" if user_id.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/userpolicies/{userId}".sub('{format}','json').sub('{' + 'userId' + '}', user_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailUserPolicy')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#get_voicemail_userpolicy\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Update a group's voicemail policy
    # 
    # @param group_id Group ID
    # @param body The group&#39;s voicemail policy
    # @param [Hash] opts the optional parameters
    # @return [VoicemailGroupPolicy]
    def patch_voicemail_group_policy(group_id, body, opts = {})
      data, _status_code, _headers = patch_voicemail_group_policy_with_http_info(group_id, body, opts)
      return data
    end

    # Update a group&#39;s voicemail policy
    # 
    # @param group_id Group ID
    # @param body The group&#39;s voicemail policy
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailGroupPolicy, Fixnum, Hash)>] VoicemailGroupPolicy data, response status code and response headers
    def patch_voicemail_group_policy_with_http_info(group_id, body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.patch_voicemail_group_policy ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling VoicemailApi.patch_voicemail_group_policy" if group_id.nil?
      
      
      
      
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling VoicemailApi.patch_voicemail_group_policy" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/groups/{groupId}/policy".sub('{format}','json').sub('{' + 'groupId' + '}', group_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(body)
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:PATCH, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailGroupPolicy')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#patch_voicemail_group_policy\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Update the current user's voicemail policy
    # 
    # @param body The user&#39;s voicemail policy
    # @param [Hash] opts the optional parameters
    # @return [VoicemailUserPolicy]
    def patch_voicemail_me_policy(body, opts = {})
      data, _status_code, _headers = patch_voicemail_me_policy_with_http_info(body, opts)
      return data
    end

    # Update the current user&#39;s voicemail policy
    # 
    # @param body The user&#39;s voicemail policy
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailUserPolicy, Fixnum, Hash)>] VoicemailUserPolicy data, response status code and response headers
    def patch_voicemail_me_policy_with_http_info(body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.patch_voicemail_me_policy ..."
      end
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling VoicemailApi.patch_voicemail_me_policy" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/me/policy".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(body)
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:PATCH, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailUserPolicy')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#patch_voicemail_me_policy\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Update a voicemail message
    # A user voicemail can only be modified by its associated user. A group voicemail can only be modified by a user that is a member of the group. A queue voicemail can only be modified by a participant of the conversation the voicemail is associated with.
    # @param message_id Message ID
    # @param body VoicemailMessage
    # @param [Hash] opts the optional parameters
    # @return [VoicemailMessage]
    def patch_voicemail_message(message_id, body, opts = {})
      data, _status_code, _headers = patch_voicemail_message_with_http_info(message_id, body, opts)
      return data
    end

    # Update a voicemail message
    # A user voicemail can only be modified by its associated user. A group voicemail can only be modified by a user that is a member of the group. A queue voicemail can only be modified by a participant of the conversation the voicemail is associated with.
    # @param message_id Message ID
    # @param body VoicemailMessage
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailMessage, Fixnum, Hash)>] VoicemailMessage data, response status code and response headers
    def patch_voicemail_message_with_http_info(message_id, body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.patch_voicemail_message ..."
      end
      
      
      # verify the required parameter 'message_id' is set
      fail ArgumentError, "Missing the required parameter 'message_id' when calling VoicemailApi.patch_voicemail_message" if message_id.nil?
      
      
      
      
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling VoicemailApi.patch_voicemail_message" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/messages/{messageId}".sub('{format}','json').sub('{' + 'messageId' + '}', message_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(body)
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:PATCH, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMessage')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#patch_voicemail_message\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Update a user's voicemail policy
    # 
    # @param user_id User ID
    # @param body The user&#39;s voicemail policy
    # @param [Hash] opts the optional parameters
    # @return [VoicemailUserPolicy]
    def patch_voicemail_userpolicy(user_id, body, opts = {})
      data, _status_code, _headers = patch_voicemail_userpolicy_with_http_info(user_id, body, opts)
      return data
    end

    # Update a user&#39;s voicemail policy
    # 
    # @param user_id User ID
    # @param body The user&#39;s voicemail policy
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailUserPolicy, Fixnum, Hash)>] VoicemailUserPolicy data, response status code and response headers
    def patch_voicemail_userpolicy_with_http_info(user_id, body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.patch_voicemail_userpolicy ..."
      end
      
      
      # verify the required parameter 'user_id' is set
      fail ArgumentError, "Missing the required parameter 'user_id' when calling VoicemailApi.patch_voicemail_userpolicy" if user_id.nil?
      
      
      
      
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling VoicemailApi.patch_voicemail_userpolicy" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/userpolicies/{userId}".sub('{format}','json').sub('{' + 'userId' + '}', user_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(body)
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:PATCH, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailUserPolicy')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#patch_voicemail_userpolicy\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Copy a voicemail message to a user or group
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [CopyVoicemailMessage] :body 
    # @return [VoicemailMessage]
    def post_voicemail_messages(opts = {})
      data, _status_code, _headers = post_voicemail_messages_with_http_info(opts)
      return data
    end

    # Copy a voicemail message to a user or group
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [CopyVoicemailMessage] :body 
    # @return [Array<(VoicemailMessage, Fixnum, Hash)>] VoicemailMessage data, response status code and response headers
    def post_voicemail_messages_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.post_voicemail_messages ..."
      end
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/messages".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(opts[:'body'])
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:POST, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMessage')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#post_voicemail_messages\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Search voicemails
    # 
    # @param body Search request options
    # @param [Hash] opts the optional parameters
    # @return [VoicemailsSearchResponse]
    def post_voicemail_search(body, opts = {})
      data, _status_code, _headers = post_voicemail_search_with_http_info(body, opts)
      return data
    end

    # Search voicemails
    # 
    # @param body Search request options
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailsSearchResponse, Fixnum, Hash)>] VoicemailsSearchResponse data, response status code and response headers
    def post_voicemail_search_with_http_info(body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.post_voicemail_search ..."
      end
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling VoicemailApi.post_voicemail_search" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/search".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(body)
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:POST, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailsSearchResponse')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#post_voicemail_search\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Update a voicemail message
    # A user voicemail can only be modified by its associated user. A group voicemail can only be modified by a user that is a member of the group. A queue voicemail can only be modified by a participant of the conversation the voicemail is associated with.
    # @param message_id Message ID
    # @param body VoicemailMessage
    # @param [Hash] opts the optional parameters
    # @return [VoicemailMessage]
    def put_voicemail_message(message_id, body, opts = {})
      data, _status_code, _headers = put_voicemail_message_with_http_info(message_id, body, opts)
      return data
    end

    # Update a voicemail message
    # A user voicemail can only be modified by its associated user. A group voicemail can only be modified by a user that is a member of the group. A queue voicemail can only be modified by a participant of the conversation the voicemail is associated with.
    # @param message_id Message ID
    # @param body VoicemailMessage
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailMessage, Fixnum, Hash)>] VoicemailMessage data, response status code and response headers
    def put_voicemail_message_with_http_info(message_id, body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.put_voicemail_message ..."
      end
      
      
      # verify the required parameter 'message_id' is set
      fail ArgumentError, "Missing the required parameter 'message_id' when calling VoicemailApi.put_voicemail_message" if message_id.nil?
      
      
      
      
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling VoicemailApi.put_voicemail_message" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/messages/{messageId}".sub('{format}','json').sub('{' + 'messageId' + '}', message_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(body)
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:PUT, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailMessage')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#put_voicemail_message\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Update a policy
    # 
    # @param body Policy
    # @param [Hash] opts the optional parameters
    # @return [VoicemailOrganizationPolicy]
    def put_voicemail_policy(body, opts = {})
      data, _status_code, _headers = put_voicemail_policy_with_http_info(body, opts)
      return data
    end

    # Update a policy
    # 
    # @param body Policy
    # @param [Hash] opts the optional parameters
    # @return [Array<(VoicemailOrganizationPolicy, Fixnum, Hash)>] VoicemailOrganizationPolicy data, response status code and response headers
    def put_voicemail_policy_with_http_info(body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: VoicemailApi.put_voicemail_policy ..."
      end
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling VoicemailApi.put_voicemail_policy" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/voicemail/policy".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(body)
      
      auth_names = ['PureCloud OAuth']
      data, status_code, headers = @api_client.call_api(:PUT, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'VoicemailOrganizationPolicy')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: VoicemailApi#put_voicemail_policy\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end