// Code generated by smithy-go-codegen DO NOT EDIT.

package connect

import (
	"context"
	"fmt"
	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
	"github.com/aws/aws-sdk-go-v2/service/connect/types"
	"github.com/aws/smithy-go/middleware"
	smithyhttp "github.com/aws/smithy-go/transport/http"
	"time"
)

// Gets metric data from the specified Amazon Connect instance.
//
// GetMetricDataV2 offers more features than [GetMetricData], the previous version of this API.
// It has new metrics, offers filtering at a metric level, and offers the ability
// to filter and group data by channels, queues, routing profiles, agents, and
// agent hierarchy levels. It can retrieve historical data for the last 3 months,
// at varying intervals. It does not support agent queues.
//
// For a description of the historical metrics that are supported by
// GetMetricDataV2 and GetMetricData , see [Metrics definitions] in the Amazon Connect Administrator
// Guide.
//
// When you make a successful API request, you can expect the following metric
// values in the response:
//
//   - Metric value is null: The calculation cannot be performed due to divide by
//     zero or insufficient data
//
//   - Metric value is a number (including 0) of defined type: The number provided
//     is the calculation result
//
//   - MetricResult list is empty: The request cannot find any data in the system
//
// The following guidelines can help you work with the API:
//
//   - Each dimension in the metric response must contain a value
//
//   - Each item in MetricResult must include all requested metrics
//
//   - If the response is slow due to large result sets, try these approaches:
//
//   - Narrow the time range of your request
//
//   - Add filters to reduce the amount of data returned
//
// [GetMetricData]: https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricData.html
// [Metrics definitions]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html
func (c *Client) GetMetricDataV2(ctx context.Context, params *GetMetricDataV2Input, optFns ...func(*Options)) (*GetMetricDataV2Output, error) {
	if params == nil {
		params = &GetMetricDataV2Input{}
	}

	result, metadata, err := c.invokeOperation(ctx, "GetMetricDataV2", params, optFns, c.addOperationGetMetricDataV2Middlewares)
	if err != nil {
		return nil, err
	}

	out := result.(*GetMetricDataV2Output)
	out.ResultMetadata = metadata
	return out, nil
}

type GetMetricDataV2Input struct {

	// The timestamp, in UNIX Epoch time format, at which to end the reporting
	// interval for the retrieval of historical metrics data. The time must be later
	// than the start time timestamp. It cannot be later than the current timestamp.
	//
	// This member is required.
	EndTime *time.Time

	// The filters to apply to returned metrics. You can filter on the following
	// resources:
	//
	//   - Agents
	//
	//   - Campaigns
	//
	//   - Channels
	//
	//   - Feature
	//
	//   - Queues
	//
	//   - Routing profiles
	//
	//   - Routing step expression
	//
	//   - User hierarchy groups
	//
	// At least one filter must be passed from queues, routing profiles, agents, or
	// user hierarchy groups.
	//
	// For metrics for outbound campaigns analytics, you can also use campaigns to
	// satisfy at least one filter requirement.
	//
	// To filter by phone number, see [Create a historical metrics report] in the Amazon Connect Administrator Guide.
	//
	// Note the following limits:
	//
	//   - Filter keys: A maximum of 5 filter keys are supported in a single request.
	//   Valid filter keys: AGENT | AGENT_HIERARCHY_LEVEL_FIVE |
	//   AGENT_HIERARCHY_LEVEL_FOUR | AGENT_ HIERARCHY_LEVEL_ONE |
	//   AGENT_HIERARCHY_LEVEL_THREE | AGENT_HIERARCHY_LEVEL_TWO |
	//   ANSWERING_MACHINE_DETECTION_STATUS | BOT_ALIAS | BOT_ID | BOT_INTENT_NAME |
	//   BOT_LOCALE | BOT_VERSION | CAMPAIGN | CAMPAIGN_DELIVERY_EVENT_TYPE |
	//   CAMPAIGN_EXCLUDED_EVENT_TYPE | CASE_STATUS | CASE_TEMPLATE_ARN | CHANNEL |
	//   contact/segmentAttributes/connect:Subtype |
	//   contact/segmentAttributes/connect:ValidationTestType | DISCONNECT_REASON |
	//   EVALUATION_FORM | EVALUATION_QUESTION | EVALUATION_SECTION | EVALUATION_SOURCE
	//   | EVALUATOR_ID | FEATURE | FLOW_ACTION_ID | FLOW_TYPE |
	//   FLOWS_MODULE_RESOURCE_ID | FLOWS_NEXT_RESOURCE_ID |
	//   FLOWS_NEXT_RESOURCE_QUEUE_ID | FLOWS_OUTCOME_TYPE | FLOWS_RESOURCE_ID |
	//   FORM_VERSION | INITIATING_FLOW | INITIATION_METHOD |
	//   INVOKING_RESOURCE_PUBLISHED_TIMESTAMP | INVOKING_RESOURCE_TYPE |
	//   PARENT_FLOWS_RESOURCE_ID | Q_CONNECT_ENABLED | QUEUE | RESOURCE_PUBLISHED_
	//   TIMESTAMP | ROUTING_PROFILE | ROUTING_STEP_EXPRESSION | TEST_CASE | TEST_
	//   CASE_EXECUTION_FAILURE_REASON | TEST_CASE_EXECUTION_RESULT |
	//   TEST_CASE_EXECUTION_STATE
	//
	//   - Filter values: A maximum of 100 filter values are supported in a single
	//   request. VOICE, CHAT, and TASK are valid filterValue for the CHANNEL filter
	//   key. They do not count towards limitation of 100 filter values. For example, a
	//   GetMetricDataV2 request can filter by 50 queues, 35 agents, and 15 routing
	//   profiles for a total of 100 filter values, along with 3 channel filters.
	//
	// contact_lens_conversational_analytics is a valid filterValue for the FEATURE
	//   filter key. It is available only to contacts analyzed by Contact Lens
	//   conversational analytics.
	//
	// connect:Chat , connect:SMS , connect:Telephony , and connect:WebRTC are valid
	//   filterValue examples (not exhaustive) for the
	//   contact/segmentAttributes/connect:Subtype filter key.
	//
	// ROUTING_STEP_EXPRESSION is a valid filter key with a filter value up to 3000
	//   length. This filter is case and order sensitive. JSON string fields must be
	//   sorted in ascending order and JSON array order should be kept as is.
	//
	// Q_CONNECT_ENABLED . TRUE and FALSE are the only valid filterValues for the
	//   Q_CONNECT_ENABLED filter key.
	//
	//   - TRUE includes all contacts that had Connect AI Agents enabled as part of
	//   the flow.
	//
	//   - FALSE includes all contacts that did not have Connect AI Agents enabled as
	//   part of the flow
	//
	//   - EXPERIENCE_VALIDATION and FLOW_VALIDATION are the only valid filterValues
	//   for the contact/segmentAttributes/connect:ValidationTestType filter key
	//
	// This filter is available only for contact record-driven metrics.
	//
	// [Campaign]ARNs are valid filterValues for the CAMPAIGN filter key.
	//
	// [Create a historical metrics report]: https://docs.aws.amazon.com/connect/latest/adminguide/create-historical-metrics-report.html
	// [Campaign]: https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-outbound-campaigns_Campaign.html
	//
	// This member is required.
	Filters []types.FilterV2

	// The metrics to retrieve. Specify the name or metricId, groupings, and filters
	// for each metric. The following historical metrics are available. For a
	// description of each metric, see [Metrics definition]in the Amazon Connect Administrator Guide.
	//
	// MetricId should be used to reference custom metrics or out of the box metrics
	// as Arn. If using MetricId, the limit is 20 MetricId per request.
	//
	// ABANDONMENT_RATE Unit: Percent
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Abandonment rate]
	//
	// AGENT_ADHERENT_TIME This metric is available only in Amazon Web Services
	// Regions where [Forecasting, capacity planning, and scheduling]is available.
	//
	// Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy
	//
	// UI name: [Adherent time]
	//
	// AGENT_ANSWER_RATE Unit: Percent
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy
	//
	// UI name: [Agent answer rate]
	//
	// AGENT_NON_ADHERENT_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy
	//
	// UI name: [Non-adherent time]
	//
	// AGENT_NON_RESPONSE Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy
	//
	// UI name: [Agent non-response]
	//
	// AGENT_NON_RESPONSE_WITHOUT_CUSTOMER_ABANDONS Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy
	//
	// Data for this metric is available starting from October 1, 2023 0:00:00 GMT.
	//
	// UI name: [Agent non-response without customer abandons]
	//
	// AGENT_OCCUPANCY Unit: Percentage
	//
	// Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy
	//
	// UI name: [Occupancy]
	//
	// AGENT_SCHEDULE_ADHERENCE This metric is available only in Amazon Web Services
	// Regions where [Forecasting, capacity planning, and scheduling]is available.
	//
	// Unit: Percent
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy
	//
	// UI name: [Adherence]
	//
	// AGENT_SCHEDULED_TIME This metric is available only in Amazon Web Services
	// Regions where [Forecasting, capacity planning, and scheduling]is available.
	//
	// Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy
	//
	// UI name: [Scheduled time]
	//
	// AVG_ABANDON_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// Valid metric filter key: INITIATION_METHOD
	//
	// UI name: [Average queue abandon time]
	//
	// AVG_ACTIVE_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Average active time]
	//
	// AVG_AFTER_CONTACT_WORK_TIME Unit: Seconds
	//
	// Valid metric filter key: INITIATION_METHOD
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average after contact work time]
	//
	// Feature is a valid filter but not a valid grouping.
	//
	// AVG_AGENT_CONCURRENCY Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Average agent concurrency]
	//
	// AVG_AGENT_CONNECTING_TIME Unit: Seconds
	//
	// Valid metric filter key: INITIATION_METHOD . For now, this metric only supports
	// the following as INITIATION_METHOD : INBOUND | OUTBOUND | CALLBACK | API
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy
	//
	// UI name: [Average agent API connecting time]
	//
	// The Negate key in metric-level filters is not applicable for this metric.
	//
	// AVG_AGENT_PAUSE_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Average agent pause time]
	//
	// AVG_BOT_CONVERSATION_TIME Unit: Seconds
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot
	// locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID,
	// Invoking resource published timestamp, Initiation method, Invoking resource
	// type, Parent flows resource ID
	//
	// UI name: [Average bot conversation time]
	//
	// AVG_BOT_CONVERSATION_TURNS Unit: Count
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot
	// locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID,
	// Invoking resource published timestamp, Initiation method, Invoking resource
	// type, Parent flows resource ID
	//
	// UI name: [Average bot conversation turns]
	//
	// AVG_CASE_RELATED_CONTACTS Unit: Count
	//
	// Required filter key: CASE_TEMPLATE_ARN
	//
	// Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS
	//
	// UI name: [Average contacts per case]
	//
	// AVG_CASE_RESOLUTION_TIME Unit: Seconds
	//
	// Required filter key: CASE_TEMPLATE_ARN
	//
	// Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS
	//
	// UI name: [Average case resolution time]
	//
	// AVG_CONTACT_DURATION Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average contact duration]
	//
	// Feature is a valid filter but not a valid grouping.
	//
	// AVG_CONTACT_FIRST_RESPONSE_TIME_AGENT Unit: Seconds
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Agent average contact first response wait time]
	//
	// AVG_CONVERSATION_CLOSE_TIME Unit: Seconds
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Average conversation close time]
	//
	// AVG_CONVERSATION_DURATION Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average conversation duration]
	//
	// AVG_DIALS_PER_MINUTE This metric is available only for outbound campaigns that
	// use the agent assisted voice and automated voice delivery modes.
	//
	// Unit: Count
	//
	// Valid groupings and filters: Agent, Campaign, Queue, Routing Profile
	//
	// UI name: [Average dials per minute]
	//
	// AVG_EVALUATION_SCORE Unit: Percent
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel, Evaluation Form
	// ID, Evaluation Section ID, Evaluation Question ID, Evaluation Source, Form
	// Version, Queue, Routing Profile
	//
	// UI name: [Average evaluation score]
	//
	// AVG_FIRST_RESPONSE_TIME_AGENT Unit: Seconds
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Average agent first response time]
	//
	// AVG_FLOW_TIME Unit: Seconds
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID,
	// Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows
	// resource ID, Initiation method, Resource published timestamp
	//
	// UI name: [Average flow time]
	//
	// AVG_GREETING_TIME_AGENT This metric is available only for contacts analyzed by
	// Contact Lens conversational analytics.
	//
	// Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average agent greeting time]
	//
	// AVG_HANDLE_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Feature, contact/segmentAttributes/connect:Subtype,
	// RoutingStepExpression
	//
	// UI name: [Average handle time]
	//
	// Feature is a valid filter but not a valid grouping.
	//
	// ACTIVE_AI_AGENTS Unit: Count
	//
	// Valid groupings and filters: AI Agent, AI Agent Name, AI Agent Type, AI Use
	// Case, Channel, Queue, Routing Profile
	//
	// UI name: Active AI Agents
	//
	// AI_HANDOFF_RATE Unit: Percent
	//
	// Valid groupings and filters: AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: Handoff Rate
	//
	// AI_HANDOFFS Unit: Count
	//
	// Valid groupings and filters: AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: AI Handoff Count
	//
	// AI_AGENT_INVOCATION_SUCCESS Unit: Count
	//
	// Valid groupings and filters: AI Agent, AI Agent Name, AI Agent Name Version, AI
	// Agent Type, AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: AI Agent Invocation Success Count
	//
	// AI Agent Name Version is not a valid filter but a valid grouping.
	//
	// AI_AGENT_INVOCATION_SUCCESS_RATE Unit: Percent
	//
	// Valid groupings and filters: AI Agent, AI Agent Name, AI Agent Name Version, AI
	// Agent Type, AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: AI Agent Invocation Success Rate
	//
	// AI Agent Name Version is not a valid filter but a valid grouping.
	//
	// AI_AGENT_INVOCATIONS Unit: Count
	//
	// Valid groupings and filters: AI Agent, AI Agent Name, AI Agent Type, AI Agent
	// Name Version, AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: AI Agent Invocation Count
	//
	// AI Agent Name Version is not a valid filter but a valid grouping.
	//
	// AI_RESPONSE_COMPLETION_RATE Unit: Percent
	//
	// Valid groupings and filters: AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: AI Response Completion Rate
	//
	// AI_INVOLVED_CONTACTS Unit: Count
	//
	// Valid groupings and filters: AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: AI Contacts
	//
	// AI_PROMPT_INVOCATION_SUCCESS Unit: Count
	//
	// Valid groupings and filters: AI Agent, AI Agent Name, AI Agent Name Version, AI
	// Agent Type, AI Prompt, AI Prompt ID, AI Prompt Name, AI Prompt Type, AI Use
	// Case, Channel, Queue, Routing Profile
	//
	// UI name: AI Prompt Invocation Success Count
	//
	// AI Agent Name Version is not a valid filter but a valid grouping.
	//
	// AI_PROMPT_INVOCATION_SUCCESS_RATE Unit: Percent
	//
	// Valid groupings and filters: AI Agent, AI Agent Name, AI Agent Name Version, AI
	// Agent Type, AI Prompt, AI Prompt ID, AI Prompt Name, AI Prompt Type, AI Use
	// Case, Channel, Queue, Routing Profile
	//
	// UI name: AI Prompt Invocation Success Rate
	//
	// AI Agent Name Version is not a valid filter but a valid grouping.
	//
	// AI_TOOL_INVOCATIONS Unit: Count
	//
	// Valid groupings and filters: AI Agent, AI Agent Name, AI Agent Name Version, AI
	// Agent Type, AI Tool ID, AI Tool Name, AI Tool Type, AI Use Case, Channel, Queue,
	// Routing Profile
	//
	// UI name: AI Tool Invocation Count
	//
	// AI Agent Name Version is not a valid filter but a valid grouping.
	//
	// AVG_AI_AGENT_CONVERSATION_TURNS Unit: Count
	//
	// Valid groupings and filters: AI Agent, AI Agent Name, AI Agent Name Version, AI
	// Agent Type, AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: Average AI Agent Conversation Turns
	//
	// AI Agent Name Version is not a valid filter but a valid grouping.
	//
	// AVG_AI_CONVERSATION_TURNS Unit: Count
	//
	// Valid groupings and filters: AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: AI Conversation Turns
	//
	// AVG_AI_PROMPT_INVOCATION_LATENCY Unit: Milliseconds
	//
	// Valid groupings and filters: AI Agent, AI Agent Name, AI Agent Name Version, AI
	// Agent Type, AI Prompt, AI Prompt ID, AI Prompt Name, AI Prompt Type, AI Use
	// Case, Channel, Queue, Routing Profile
	//
	// UI name: Average AI Prompt Invocation Latency
	//
	// AI Agent Name Version is not a valid filter but a valid grouping.
	//
	// AVG_AI_TOOL_INVOCATION_LATENCY Unit: Milliseconds
	//
	// Valid groupings and filters: AI Agent, AI Agent Name, AI Agent Name Version, AI
	// Agent Type, AI Tool ID, AI Tool Name, AI Tool Type, AI Use Case, Channel, Queue,
	// Routing Profile
	//
	// UI name: Average AI Tool Invocation Latency
	//
	// AI Agent Name Version is not a valid filter but a valid grouping.
	//
	// KNOWLEDGE_CONTENT_REFERENCES Unit: Count
	//
	// Valid groupings and filters: AI Agent, AI Agent Name, AI Agent Type, AI Use
	// Case, Channel, Knowledge Base Name, Queue, Routing Profile
	//
	// UI name: KnowledgeBase Reference Count
	//
	// PROACTIVE_INTENT_ENGAGEMENT_RATE Unit: Percent
	//
	// Valid groupings and filters: AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: Proactive Intent Engagement Rate
	//
	// PROACTIVE_INTENT_RESPONSE_RATE Unit: Percent
	//
	// Valid groupings and filters: AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: Proactive Intent Response Rate
	//
	// PROACTIVE_INTENTS_ANSWERED Unit: Count
	//
	// Valid groupings and filters: AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: Proactive Intents Answered
	//
	// PROACTIVE_INTENTS_DETECTED Unit: Count
	//
	// Valid groupings and filters: AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: Proactive Intents Detected
	//
	// Unit:
	//
	// Valid groupings and filters:
	//
	// UI name:
	//
	// Unit:
	//
	// Valid groupings and filters:
	//
	// UI name:
	//
	// PROACTIVE_INTENTS_ENGAGED Unit: Count
	//
	// Valid groupings and filters: AI Use Case, Channel, Queue, Routing Profile
	//
	// UI name: UI name:
	//
	// AVG_HOLD_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average customer hold time]
	//
	// Feature is a valid filter but not a valid grouping.
	//
	// AVG_HOLD_TIME_ALL_CONTACTS Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average customer hold time all contacts]
	//
	// AVG_HOLDS Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average holds]
	//
	// Feature is a valid filter but not a valid grouping.
	//
	// AVG_INTERACTION_AND_HOLD_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average agent interaction and customer hold time]
	//
	// AVG_INTERACTION_TIME Unit: Seconds
	//
	// Valid metric filter key: INITIATION_METHOD
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Feature,
	// contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average agent interaction time]
	//
	// Feature is a valid filter but not a valid grouping.
	//
	// AVG_INTERRUPTIONS_AGENT This metric is available only for contacts analyzed by
	// Contact Lens conversational analytics.
	//
	// Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average agent interruptions]
	//
	// AVG_INTERRUPTION_TIME_AGENT This metric is available only for contacts analyzed
	// by Contact Lens conversational analytics.
	//
	// Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average agent interruption time]
	//
	// AVG_MESSAGE_LENGTH_AGENT Unit: Count
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Average agent message length]
	//
	// AVG_MESSAGE_LENGTH_CUSTOMER Unit: Count
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Average customer message length]
	//
	// AVG_MESSAGES Unit: Count
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Average messages]
	//
	// AVG_MESSAGES_AGENT Unit: Count
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Average agent messages]
	//
	// AVG_MESSAGES_BOT Unit: Count
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Average bot messages]
	//
	// AVG_MESSAGES_CUSTOMER Unit: Count
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Average customer messages]
	//
	// AVG_NON_TALK_TIME This metric is available only for contacts analyzed by
	// Contact Lens conversational analytics.
	//
	// Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average non-talk time]
	//
	// AVG_QUEUE_ANSWER_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Feature,
	// contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average queue answer time]
	//
	// Valid metric level filters: INITIATION_METHOD , FEATURE , DISCONNECT_REASON
	//
	// Feature is a valid filter but not a valid grouping.
	//
	// AVG_QUEUE_ANSWER_TIME_CUSTOMER_FIRST_CALLBACK Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Feature,
	// contact/segmentAttributes/connect:Subtype, Q in Connect, Agent Hierarchy
	//
	// UI name: [Avg. queue answer time - customer first callback]
	//
	// AVG_RESPONSE_TIME_AGENT Unit: Seconds
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Average agent response time]
	//
	// AVG_RESPONSE_TIME_CUSTOMER Unit: Seconds
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Average customer response time]
	//
	// AVG_RESOLUTION_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile,
	// contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average resolution time]
	//
	// AVG_TALK_TIME This metric is available only for contacts analyzed by Contact
	// Lens conversational analytics.
	//
	// Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average talk time]
	//
	// AVG_TALK_TIME_AGENT This metric is available only for contacts analyzed by
	// Contact Lens conversational analytics.
	//
	// Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average agent talk time]
	//
	// AVG_TALK_TIME_CUSTOMER This metric is available only for contacts analyzed by
	// Contact Lens conversational analytics.
	//
	// Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Average customer talk time]
	//
	// AVG_WAIT_TIME_AFTER_CUSTOMER_CONNECTION This metric is available only for
	// outbound campaigns that use the agent assisted voice and automated voice
	// delivery modes.
	//
	// Unit: Seconds
	//
	// Valid groupings and filters: Campaign
	//
	// UI name: [Average wait time after customer connection]
	//
	// AVG_WAIT_TIME_AFTER_CUSTOMER_FIRST_CALLBACK_CONNECTION Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Feature,
	// contact/segmentAttributes/connect:Subtype, Q in Connect, Agent Hierarchy
	//
	// UI name: [Avg. wait time after customer connection - customer first callback]
	//
	// AVG_WEIGHTED_EVALUATION_SCORE Unit: Percent
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel, Evaluation Form
	// Id, Evaluation Section ID, Evaluation Question ID, Evaluation Source, Form
	// Version, Queue, Routing Profile
	//
	// UI name: [Average weighted evaluation score]
	//
	// BOT_CONVERSATIONS_COMPLETED Unit: Count
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot
	// locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID,
	// Invoking resource published timestamp, Initiation method, Invoking resource
	// type, Parent flows resource ID
	//
	// UI name: [Bot conversations completed]
	//
	// BOT_INTENTS_COMPLETED Unit: Count
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot
	// locale, Bot intent name, Flows resource ID, Flows module resource ID, Flow type,
	// Flow action ID, Invoking resource published timestamp, Initiation method,
	// Invoking resource type, Parent flows resource ID
	//
	// UI name: [Bot intents completed]
	//
	// CAMPAIGN_CONTACTS_ABANDONED_AFTER_X This metric is available only for outbound
	// campaigns using the agent assisted voice and automated voice delivery modes.
	//
	// Unit: Count
	//
	// Valid groupings and filters: Agent, Campaign
	//
	// Threshold: For ThresholdValue , enter any whole number from 1 to 604800
	// (inclusive), in seconds. For Comparison , you must enter GT (for Greater than).
	//
	// UI name: [Campaign contacts abandoned after X]
	//
	// CAMPAIGN_CONTACTS_ABANDONED_AFTER_X_RATE This metric is available only for
	// outbound campaigns using the agent assisted voice and automated voice delivery
	// modes.
	//
	// Unit: Percent
	//
	// Valid groupings and filters: Agent, Campaign
	//
	// Threshold: For ThresholdValue , enter any whole number from 1 to 604800
	// (inclusive), in seconds. For Comparison , you must enter GT (for Greater than).
	//
	// UI name: [Campaign contacts abandoned after X rate]
	//
	// CAMPAIGN_INTERACTIONS This metric is available only for outbound campaigns
	// using the email delivery mode.
	//
	// Unit: Count
	//
	// Valid metric filter key: CAMPAIGN_INTERACTION_EVENT_TYPE
	//
	// Valid groupings and filters: Campaign
	//
	// UI name: [Campaign interactions]
	//
	// CAMPAIGN_PROGRESS_RATE This metric is only available for outbound campaigns
	// initiated using a customer segment. It is not available for event triggered
	// campaigns.
	//
	// Unit: Percent
	//
	// Valid groupings and filters: Campaign, Campaign Execution Timestamp
	//
	// UI name: [Campaign progress rate]
	//
	// CAMPAIGN_SEND_ATTEMPTS This metric is available only for outbound campaigns.
	//
	// Unit: Count
	//
	// Valid groupings and filters: Campaign, Channel,
	// contact/segmentAttributes/connect:Subtype
	//
	// UI name: [Campaign send attempts]
	//
	// CAMPAIGN_SEND_EXCLUSIONS This metric is available only for outbound campaigns.
	//
	// Valid metric filter key: CAMPAIGN_EXCLUDED_EVENT_TYPE
	//
	// Unit: Count
	//
	// Valid groupings and filters: Campaign, Campaign Excluded Event Type, Campaign
	// Execution Timestamp
	//
	// UI name: [Campaign send exclusions]
	//
	// CASES_CREATED Unit: Count
	//
	// Required filter key: CASE_TEMPLATE_ARN
	//
	// Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS
	//
	// UI name: [Cases created]
	//
	// CONTACTS_CREATED Unit: Count
	//
	// Valid metric filter key: INITIATION_METHOD
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Feature,
	// contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Contacts created]
	//
	// Feature is a valid filter but not a valid grouping.
	//
	// CONTACTS_HANDLED Unit: Count
	//
	// Valid metric filter key: INITIATION_METHOD , DISCONNECT_REASON
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Feature, contact/segmentAttributes/connect:Subtype,
	// RoutingStepExpression, Q in Connect
	//
	// UI name: [Contacts handled]
	//
	// Feature is a valid filter but not a valid grouping.
	//
	// CONTACTS_HANDLED_BY_CONNECTED_TO_AGENT Unit: Count
	//
	// Valid metric filter key: INITIATION_METHOD
	//
	// Valid groupings and filters: Queue, Channel, Agent, Agent Hierarchy,
	// contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Contacts handled (connected to agent timestamp)]
	//
	// CONTACTS_HOLD_ABANDONS Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Contacts hold disconnect]
	//
	// CONTACTS_ON_HOLD_AGENT_DISCONNECT Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Contacts hold agent disconnect]
	//
	// CONTACTS_ON_HOLD_CUSTOMER_DISCONNECT Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Contacts hold customer disconnect]
	//
	// CONTACTS_PUT_ON_HOLD Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Contacts put on hold]
	//
	// CONTACTS_TRANSFERRED_OUT_EXTERNAL Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Contacts transferred out external]
	//
	// CONTACTS_TRANSFERRED_OUT_INTERNAL Unit: Percent
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Contacts transferred out internal]
	//
	// CONTACTS_QUEUED Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Contacts queued]
	//
	// CONTACTS_QUEUED_BY_ENQUEUE Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Agent, Agent Hierarchy,
	// contact/segmentAttributes/connect:Subtype
	//
	// UI name: [Contacts queued (enqueue timestamp)]
	//
	// CONTACTS_REMOVED_FROM_QUEUE_IN_X Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Q in Connect
	//
	// Threshold: For ThresholdValue , enter any whole number from 1 to 604800
	// (inclusive), in seconds. For Comparison , you can use LT (for "Less than") or
	// LTE (for "Less than equal").
	//
	// UI name: [Contacts removed from queue in X seconds]
	//
	// CONTACTS_RESOLVED_IN_X Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile,
	// contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// Threshold: For ThresholdValue , enter any whole number from 1 to 604800
	// (inclusive), in seconds. For Comparison , you can use LT (for "Less than") or
	// LTE (for "Less than equal").
	//
	// UI name: [Contacts resolved in X]
	//
	// CONTACTS_TRANSFERRED_OUT Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Contacts transferred out]
	//
	// Feature is a valid filter but not a valid grouping.
	//
	// CONTACTS_TRANSFERRED_OUT_BY_AGENT Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Contacts transferred out by agent]
	//
	// CONTACTS_TRANSFERRED_OUT_FROM_QUEUE Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Contacts transferred out queue]
	//
	// CURRENT_CASES Unit: Count
	//
	// Required filter key: CASE_TEMPLATE_ARN
	//
	// Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS
	//
	// UI name: [Current cases]
	//
	// CONVERSATIONS_ABANDONED Unit: Count
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature,
	// RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect
	//
	// UI name: [Conversations abandoned]
	//
	// DELIVERY_ATTEMPTS This metric is available only for outbound campaigns.
	//
	// Unit: Count
	//
	// Valid metric filter key: ANSWERING_MACHINE_DETECTION_STATUS ,
	// CAMPAIGN_DELIVERY_EVENT_TYPE , DISCONNECT_REASON
	//
	// Valid groupings and filters: Agent, Answering Machine Detection Status,
	// Campaign, Campaign Delivery EventType, Channel,
	// contact/segmentAttributes/connect:Subtype, Disconnect Reason, Queue, Routing
	// Profile
	//
	// UI name: [Delivery attempts]
	//
	// Campaign Delivery EventType filter and grouping are only available for SMS and
	// Email campaign delivery modes. Agent, Queue, Routing Profile, Answering Machine
	// Detection Status and Disconnect Reason are only available for agent assisted
	// voice and automated voice delivery modes.
	//
	// DELIVERY_ATTEMPT_DISPOSITION_RATE This metric is available only for outbound
	// campaigns. Dispositions for the agent assisted voice and automated voice
	// delivery modes are only available with answering machine detection enabled.
	//
	// Unit: Percent
	//
	// Valid metric filter key: ANSWERING_MACHINE_DETECTION_STATUS ,
	// CAMPAIGN_DELIVERY_EVENT_TYPE , DISCONNECT_REASON
	//
	// Valid groupings and filters: Agent, Answering Machine Detection Status,
	// Campaign, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason,
	// Queue, Routing Profile
	//
	// UI name: [Delivery attempt disposition rate]
	//
	// Campaign Delivery Event Type filter and grouping are only available for SMS and
	// Email campaign delivery modes. Agent, Queue, Routing Profile, Answering Machine
	// Detection Status and Disconnect Reason are only available for agent assisted
	// voice and automated voice delivery modes.
	//
	// EVALUATIONS_PERFORMED Unit: Count
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel, Evaluation Form
	// ID, Evaluation Source, Form Version, Queue, Routing Profile
	//
	// UI name: [Evaluations performed]
	//
	// FLOWS_OUTCOME Unit: Count
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID,
	// Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows
	// resource ID, Initiation method, Resource published timestamp
	//
	// UI name: [Flows outcome]
	//
	// FLOWS_STARTED Unit: Count
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID,
	// Flows resource ID, Initiation method, Resource published timestamp
	//
	// UI name: [Flows started]
	//
	// HUMAN_ANSWERED_CALLS This metric is available only for outbound campaigns.
	// Dispositions for the agent assisted voice and automated voice delivery modes are
	// only available with answering machine detection enabled.
	//
	// Unit: Count
	//
	// Valid groupings and filters: Agent, Campaign
	//
	// UI name: [Human answered]
	//
	// MAX_FLOW_TIME Unit: Seconds
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID,
	// Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows
	// resource ID, Initiation method, Resource published timestamp
	//
	// UI name: [Maximum flow time]
	//
	// MAX_QUEUED_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Maximum queued time]
	//
	// MIN_FLOW_TIME Unit: Seconds
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID,
	// Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows
	// resource ID, Initiation method, Resource published timestamp
	//
	// UI name: [Minimum flow time]
	//
	// PERCENT_AUTOMATIC_FAILS Unit: Percent
	//
	// Valid groupings and filters: Agent, Agent Hierarchy, Channel, Evaluation Form
	// ID, Evaluation Source, Form Version, Queue, Routing Profile
	//
	// UI name: [Automatic fails percent]
	//
	// PERCENT_BOT_CONVERSATIONS_OUTCOME Unit: Percent
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot
	// locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID,
	// Invoking resource published timestamp, Initiation method, Invoking resource
	// type, Parent flows resource ID
	//
	// UI name: [Percent bot conversations outcome]
	//
	// PERCENT_BOT_INTENTS_OUTCOME Unit: Percent
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot
	// locale, Bot intent name, Flows resource ID, Flows module resource ID, Flow type,
	// Flow action ID, Invoking resource published timestamp, Initiation method,
	// Invoking resource type, Parent flows resource ID
	//
	// UI name: [Percent bot intents outcome]
	//
	// PERCENT_CASES_FIRST_CONTACT_RESOLVED Unit: Percent
	//
	// Required filter key: CASE_TEMPLATE_ARN
	//
	// Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS
	//
	// UI name: [Cases resolved on first contact]
	//
	// PERCENT_CONTACTS_STEP_EXPIRED Unit: Percent
	//
	// Valid groupings and filters: Queue, RoutingStepExpression
	//
	// UI name: This metric is available in Real-time Metrics UI but not on the
	// Historical Metrics UI.
	//
	// PERCENT_CONTACTS_STEP_JOINED Unit: Percent
	//
	// Valid groupings and filters: Queue, RoutingStepExpression
	//
	// UI name: This metric is available in Real-time Metrics UI but not on the
	// Historical Metrics UI.
	//
	// PERCENT_FLOWS_OUTCOME Unit: Percent
	//
	// Valid metric filter key: FLOWS_OUTCOME_TYPE
	//
	// Valid groupings and filters: Channel,
	// contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID,
	// Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows
	// resource ID, Initiation method, Resource published timestamp
	//
	// UI name: [Flows outcome percentage].
	//
	// The FLOWS_OUTCOME_TYPE is not a valid grouping.
	//
	// PERCENT_NON_TALK_TIME This metric is available only for contacts analyzed by
	// Contact Lens conversational analytics.
	//
	// Unit: Percentage
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Non-talk time percent]
	//
	// PERCENT_TALK_TIME This metric is available only for contacts analyzed by
	// Contact Lens conversational analytics.
	//
	// Unit: Percentage
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Talk time percent]
	//
	// PERCENT_TALK_TIME_AGENT This metric is available only for contacts analyzed by
	// Contact Lens conversational analytics.
	//
	// Unit: Percentage
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Agent talk time percent]
	//
	// PERCENT_TALK_TIME_CUSTOMER This metric is available only for contacts analyzed
	// by Contact Lens conversational analytics.
	//
	// Unit: Percentage
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Customer talk time percent]
	//
	// RECIPIENTS_ATTEMPTED This metric is only available for outbound campaigns
	// initiated using a customer segment. It is not available for event triggered
	// campaigns.
	//
	// Unit: Count
	//
	// Valid groupings and filters: Campaign, Campaign Execution Timestamp
	//
	// UI name: [Recipients attempted]
	//
	// RECIPIENTS_INTERACTED This metric is only available for outbound campaigns
	// initiated using a customer segment. It is not available for event triggered
	// campaigns.
	//
	// Valid metric filter key: CAMPAIGN_INTERACTION_EVENT_TYPE
	//
	// Unit: Count
	//
	// Valid groupings and filters: Campaign, Channel,
	// contact/segmentAttributes/connect:Subtype, Campaign Execution Timestamp
	//
	// UI name: [Recipients interacted]
	//
	// RECIPIENTS_TARGETED This metric is only available for outbound campaigns
	// initiated using a customer segment. It is not available for event triggered
	// campaigns.
	//
	// Unit: Count
	//
	// Valid groupings and filters: Campaign, Campaign Execution Timestamp
	//
	// UI name: [Recipients targeted]
	//
	// REOPENED_CASE_ACTIONS Unit: Count
	//
	// Required filter key: CASE_TEMPLATE_ARN
	//
	// Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS
	//
	// UI name: [Cases reopened]
	//
	// RESOLVED_CASE_ACTIONS Unit: Count
	//
	// Required filter key: CASE_TEMPLATE_ARN
	//
	// Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS
	//
	// UI name: [Cases resolved]
	//
	// SERVICE_LEVEL You can include up to 20 SERVICE_LEVEL metrics in a request.
	//
	// Unit: Percent
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Q in Connect
	//
	// Threshold: For ThresholdValue , enter any whole number from 1 to 604800
	// (inclusive), in seconds. For Comparison , you can use LT (for "Less than") or
	// LTE (for "Less than equal").
	//
	// UI name: [Service level X]
	//
	// STEP_CONTACTS_QUEUED Unit: Count
	//
	// Valid groupings and filters: Queue, RoutingStepExpression
	//
	// UI name: This metric is available in Real-time Metrics UI but not on the
	// Historical Metrics UI.
	//
	// SUM_AFTER_CONTACT_WORK_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [After contact work time]
	//
	// SUM_CONNECTING_TIME_AGENT Unit: Seconds
	//
	// Valid metric filter key: INITIATION_METHOD . This metric only supports the
	// following filter keys as INITIATION_METHOD : INBOUND | OUTBOUND | CALLBACK | API
	// | CALLBACK_CUSTOMER_FIRST_DIALED
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy
	//
	// UI name: [Agent API connecting time]
	//
	// The Negate key in metric-level filters is not applicable for this metric.
	//
	// CONTACTS_ABANDONED Unit: Count
	//
	// Metric filter:
	//
	//   - Valid values: API | INCOMING | OUTBOUND | TRANSFER | CALLBACK |
	//   QUEUE_TRANSFER | Disconnect | CALLBACK_CUSTOMER_FIRST_DIALED
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, RoutingStepExpression, Q
	// in Connect
	//
	// UI name: [Contact abandoned]
	//
	// SUM_CONTACTS_ABANDONED_IN_X Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile,
	// contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// Threshold: For ThresholdValue , enter any whole number from 1 to 604800
	// (inclusive), in seconds. For Comparison , you can use LT (for "Less than") or
	// LTE (for "Less than equal").
	//
	// UI name: [Contacts abandoned in X seconds]
	//
	// SUM_CONTACTS_ANSWERED_IN_X Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile,
	// contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// Threshold: For ThresholdValue , enter any whole number from 1 to 604800
	// (inclusive), in seconds. For Comparison , you can use LT (for "Less than") or
	// LTE (for "Less than equal").
	//
	// UI name: [Contacts answered in X seconds]
	//
	// SUM_CONTACT_FLOW_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Contact flow time]
	//
	// SUM_CONTACT_TIME_AGENT Unit: Seconds
	//
	// Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy
	//
	// UI name: [Agent on contact time]
	//
	// SUM_CONTACTS_DISCONNECTED Valid metric filter key: DISCONNECT_REASON
	//
	// Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Contact disconnected]
	//
	// SUM_ERROR_STATUS_TIME_AGENT Unit: Seconds
	//
	// Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy
	//
	// UI name: [Error status time]
	//
	// SUM_HANDLE_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Contact handle time]
	//
	// SUM_HOLD_TIME Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Customer hold time]
	//
	// SUM_IDLE_TIME_AGENT Unit: Seconds
	//
	// Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy
	//
	// UI name: [Agent idle time]
	//
	// SUM_INTERACTION_AND_HOLD_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy, Q in Connect
	//
	// UI name: [Agent interaction and hold time]
	//
	// SUM_INTERACTION_TIME Unit: Seconds
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent
	// Hierarchy
	//
	// UI name: [Agent interaction time]
	//
	// SUM_NON_PRODUCTIVE_TIME_AGENT Unit: Seconds
	//
	// Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy
	//
	// UI name: [Agent non-productive time]
	//
	// SUM_ONLINE_TIME_AGENT Unit: Seconds
	//
	// Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy
	//
	// UI name: [Online time]
	//
	// SUM_RETRY_CALLBACK_ATTEMPTS Unit: Count
	//
	// Valid groupings and filters: Queue, Channel, Routing Profile,
	// contact/segmentAttributes/connect:Subtype, Q in Connect
	//
	// UI name: [Callback attempts]
	//
	// [Contacts transferred out external]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-external
	// [Average agent greeting time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-greeting-time
	// [Non-talk time percent]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#non-talk-time-percent
	// [Agent non-productive time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-non-productive-time
	// [Contacts created]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-created
	// [Adherence]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#adherence
	// [Customer talk time percent]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#customer-talk-time-percent
	// [Average conversation duration]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-conversation-duration
	// [Flows outcome]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#flows-outcome
	// [Contacts queued]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-queued
	// [Occupancy]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#occupancy
	// [Percent bot conversations outcome]: https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#percent-bot-conversations-outcome
	// [Minimum flow time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#minimum-flow-time
	// [Percent bot intents outcome]: https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#percent-bot-intents-outcome
	// [Contacts answered in X seconds]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-answered-in-x-seconds
	// [Average case resolution time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-case-resolution-time
	// [Average agent message length]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-message-length
	// [Agent API connecting time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-api-connecting-time
	// [Talk time percent]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#talk-time-percent
	// [Campaign progress rate]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-progress-rate
	// [Average agent talk time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-talk-time
	// [Recipients attempted]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#recipients-attempted
	// [Average agent interruption time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-interruption-time
	// [Contacts transferred out]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out
	// [Campaign send attempts]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-send-attempts
	// [Average conversation close time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-conversation-close-time
	// [Average bot conversation time]: https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#average-bot-conversation-time
	// [Average flow time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-flow-time
	// [Contacts hold disconnect]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-hold-disconnect
	// [Average holds]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-holds
	// [Bot conversations completed]: https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#bot-conversations-completed
	// [Agent non-response without customer abandons]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-non-response-without-customer-abandons
	// [Service level X]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#service-level
	// [Recipients interacted]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#recipients-interacted
	// [Contact handle time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contact-handle-time
	// [Average messages]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-messages
	// [Agent idle time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-idle-time
	// [Average customer message length]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-message-length
	// [Adherent time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#adherent-time
	// [Average talk time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-talk-time
	// [Average after contact work time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#after-contact-work-time
	// [Average customer response time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-time-agent
	// [Cases created]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#cases-created
	// [Average handle time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-handle-time
	// [Average customer hold time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-hold-time
	// [Average weighted evaluation score]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-weighted-evaluation-score
	// [Average bot conversation turns]: https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#average-bot-conversation-turns
	// [Contacts hold customer disconnect]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-hold-customer-disconnect
	// [Human answered]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#human-answered
	// [Contacts removed from queue in X seconds]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-removed-from-queue
	// [Contacts hold agent disconnect]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-hold-agent-disconnect
	// [Contacts transferred out internal]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-internal
	// [Agent non-response]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-non-response
	// [Average bot messages]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-bot-messages
	// [Agent answer rate]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-answer-rate
	// [Evaluations performed]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#evaluations-performed
	// [Average agent pause time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-pause-time
	// [Campaign contacts abandoned after X rate]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-contacts-abandoned-after-x-rate
	// [Average queue abandon time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-queue-abandon-time
	// [Contacts transferred out by agent]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-by-agent
	// [Average agent API connecting time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-api-connecting-time
	// [Maximum flow time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#maximum-flow-time
	// [Average agent concurrency]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-concurrency
	// [Average contact duration]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-contact-duration
	// [Non-adherent time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#non-adherent-time
	// [Average agent interaction and customer hold time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-interaction-and-customer-hold-time
	// [Average agent response time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-response-time-agent
	// [Avg. queue answer time - customer first callback]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-queue-answer-time-customer-first-callback
	// [After contact work time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#after-contact-work-time
	// [Average customer talk time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-talk-time
	// [Campaign contacts abandoned after X]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-contacts-abandoned-after-x
	// [Error status time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#error-status-time
	// [Maximum queued time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#maximum-queued-time
	// [Average agent first response time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-first-response-time
	// [Average active time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-active-time
	// [Average customer messages]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-messages
	// [Contacts transferred out queue]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-queue
	// [Cases reopened]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#cases-reopened
	// [Contact flow time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contact-flow-time
	// [Average customer hold time all contacts]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-hold-time-all-contacts
	// [Average agent interaction time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-interaction-time
	// [Agent on contact time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-on-contact-time
	// [Average non-talk time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-non-talk-time
	// [Conversations abandoned]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#conversations-abandoned
	// [Average agent messages]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-messages
	// [Flows started]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#flows-started
	// [Average contacts per case]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-contacts-per-case
	// [Agent talk time percent]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-talk-time-percent
	// [Metrics definition]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html
	// [Average resolution time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-resolution-time
	// [Avg. wait time after customer connection - customer first callback]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-wait-time-after-customer-connection-customer-first-callback
	// [Flows outcome percentage]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#flows-outcome-percentage
	// [Cases resolved]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#cases-resolved
	// [Contacts handled]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-handled
	// [Contacts queued (enqueue timestamp)]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-queued-by-enqueue
	// [Agent average contact first response wait time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-average-contact-first-response-wait-time
	// [Online time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#online-time
	// [Agent interaction time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-interaction-time
	// [Recipients targeted]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#recipients-targeted
	// [Average agent interruptions]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-interruptions
	// [Average dials per minute]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-dials-per-minute
	// [Delivery attempt disposition rate]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#delivery-attempt-disposition-rate
	// [Contact disconnected]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contact-disconnected
	// [Contacts handled (connected to agent timestamp)]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-handled-by-connected-to-agent-timestamp
	// [Average evaluation score]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-evaluation-score
	// [Contacts resolved in X]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-resolved
	// [Cases resolved on first contact]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#cases-resolved-on-first-contact
	// [Contact abandoned]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-abandoned
	// [Campaign interactions]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-interactions
	// [Bot intents completed]: https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#bot-intents-completed
	// [Abandonment rate]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#abandonment-rate
	// [Scheduled time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#scheduled-time
	// [Contacts abandoned in X seconds]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-abandoned-in-x-seconds
	// [Average wait time after customer connection]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-wait-time-after-customer-connection
	// [Current cases]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#current-cases
	// [Average queue answer time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-queue-answer-time
	// [Customer hold time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#customer-hold-time
	// [Agent interaction and hold time]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-interaction-and-hold-time
	// [Delivery attempts]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#delivery-attempts
	// [Contacts put on hold]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-put-on-hold
	// [Automatic fails percent]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#automatic-fails-percent
	// [Campaign send exclusions]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-send-exclusions
	// [Callback attempts]: https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#callback-attempts
	// [Forecasting, capacity planning, and scheduling]: https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region
	//
	// This member is required.
	Metrics []types.MetricV2

	// The Amazon Resource Name (ARN) of the resource. This includes the instanceId an
	// Amazon Connect instance.
	//
	// This member is required.
	ResourceArn *string

	// The timestamp, in UNIX Epoch time format, at which to start the reporting
	// interval for the retrieval of historical metrics data. The time must be before
	// the end time timestamp. The start and end time depends on the IntervalPeriod
	// selected. By default the time range between start and end time is 35 days.
	// Historical metrics are available for 3 months.
	//
	// This member is required.
	StartTime *time.Time

	// The grouping applied to the metrics that are returned. For example, when
	// results are grouped by queue, the metrics returned are grouped by queue. The
	// values that are returned apply to the metrics for each queue. They are not
	// aggregated for all queues.
	//
	// If no grouping is specified, a summary of all metrics is returned.
	//
	// Valid grouping keys: AGENT | AGENT_HIERARCHY_LEVEL_ONE |
	// AGENT_HIERARCHY_LEVEL_TWO | AGENT_HIERARCHY_LEVEL_THREE |
	// AGENT_HIERARCHY_LEVEL_FOUR | AGENT_HIERARCHY_LEVEL_FIVE |
	// ANSWERING_MACHINE_DETECTION_STATUS | BOT_ID | BOT_ALIAS | BOT_VERSION |
	// BOT_LOCALE | BOT_INTENT_NAME | CAMPAIGN | CAMPAIGN_DELIVERY_EVENT_TYPE |
	// CAMPAIGN_EXCLUDED_EVENT_TYPE | CAMPAIGN_EXECUTION_TIMESTAMP | CASE_TEMPLATE_ARN
	// | CASE_STATUS | CHANNEL | contact/segmentAttributes/connect:Subtype |
	// DISCONNECT_REASON | EVALUATION_FORM | EVALUATION_SECTION | EVALUATION_QUESTION
	// | EVALUATION_SOURCE | EVALUATOR_ID | FLOWS_RESOURCE_ID |
	// FLOWS_MODULE_RESOURCE_ID | FLOW_ACTION_ID | FLOW_TYPE | FLOWS_OUTCOME_TYPE |
	// FORM_VERSION | INITIATION_METHOD | INVOKING_RESOURCE_PUBLISHED_TIMESTAMP |
	// INVOKING_RESOURCE_TYPE | PARENT_FLOWS_RESOURCE_ID | Q_CONNECT_ENABLED | QUEUE |
	// RESOURCE_PUBLISHED_TIMESTAMP | ROUTING_PROFILE | ROUTING_STEP_EXPRESSION |
	// TEST_CASE | TEST_CASE_EXECUTION_FAILURE_REASON | TEST_CASE_INVOCATION_METHOD
	//
	// API, SCHEDULE, and EVENT are the only valid filterValues for
	// TEST_CASE_INVOCATION_METHOD.
	//
	// OBSERVE_EVENT, SEND_INSTRUCTION, ASSERT_DATA, and OVERRIDE_SYSTEM_BEHAVIOR are
	// the only valid filterValues for TEST_CASE_EXECUTION_FAILURE_REASON
	//
	// Type: Array of strings
	//
	// Array Members: Maximum number of 4 items
	//
	// Required: No
	Groupings []string

	// The interval period and timezone to apply to returned metrics.
	//
	//   - IntervalPeriod : An aggregated grouping applied to request metrics. Valid
	//   IntervalPeriod values are: FIFTEEN_MIN | THIRTY_MIN | HOUR | DAY | WEEK |
	//   TOTAL .
	//
	// For example, if IntervalPeriod is selected THIRTY_MIN , StartTime and EndTime
	//   differs by 1 day, then Amazon Connect returns 48 results in the response. Each
	//   result is aggregated by the THIRTY_MIN period. By default Amazon Connect
	//   aggregates results based on the TOTAL interval period.
	//
	// The following list describes restrictions on StartTime and EndTime based on
	//   which IntervalPeriod is requested.
	//
	//   - FIFTEEN_MIN : The difference between StartTime and EndTime must be less than
	//   3 days.
	//
	//   - THIRTY_MIN : The difference between StartTime and EndTime must be less than
	//   3 days.
	//
	//   - HOUR : The difference between StartTime and EndTime must be less than 3 days.
	//
	//   - DAY : The difference between StartTime and EndTime must be less than 35 days.
	//
	//   - WEEK : The difference between StartTime and EndTime must be less than 35
	//   days.
	//
	//   - TOTAL : The difference between StartTime and EndTime must be less than 35
	//   days.
	//
	//   - TimeZone : The timezone applied to requested metrics.
	Interval *types.IntervalDetails

	// The maximum number of results to return per page.
	MaxResults *int32

	// The token for the next set of results. Use the value returned in the previous
	// response in the next request to retrieve the next set of results.
	NextToken *string

	noSmithyDocumentSerde
}

type GetMetricDataV2Output struct {

	// Information about the metrics requested in the API request If no grouping is
	// specified, a summary of metric data is returned.
	MetricResults []types.MetricResultV2

	// If there are additional results, this is the token for the next set of results.
	NextToken *string

	// Metadata pertaining to the operation's result.
	ResultMetadata middleware.Metadata

	noSmithyDocumentSerde
}

func (c *Client) addOperationGetMetricDataV2Middlewares(stack *middleware.Stack, options Options) (err error) {
	if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil {
		return err
	}
	err = stack.Serialize.Add(&awsRestjson1_serializeOpGetMetricDataV2{}, middleware.After)
	if err != nil {
		return err
	}
	err = stack.Deserialize.Add(&awsRestjson1_deserializeOpGetMetricDataV2{}, middleware.After)
	if err != nil {
		return err
	}
	if err := addProtocolFinalizerMiddlewares(stack, options, "GetMetricDataV2"); err != nil {
		return fmt.Errorf("add protocol finalizers: %v", err)
	}

	if err = addlegacyEndpointContextSetter(stack, options); err != nil {
		return err
	}
	if err = addSetLoggerMiddleware(stack, options); err != nil {
		return err
	}
	if err = addClientRequestID(stack); err != nil {
		return err
	}
	if err = addComputeContentLength(stack); err != nil {
		return err
	}
	if err = addResolveEndpointMiddleware(stack, options); err != nil {
		return err
	}
	if err = addComputePayloadSHA256(stack); err != nil {
		return err
	}
	if err = addRetry(stack, options); err != nil {
		return err
	}
	if err = addRawResponseToMetadata(stack); err != nil {
		return err
	}
	if err = addRecordResponseTiming(stack); err != nil {
		return err
	}
	if err = addSpanRetryLoop(stack, options); err != nil {
		return err
	}
	if err = addClientUserAgent(stack, options); err != nil {
		return err
	}
	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
		return err
	}
	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
		return err
	}
	if err = addSetLegacyContextSigningOptionsMiddleware(stack); err != nil {
		return err
	}
	if err = addTimeOffsetBuild(stack, c); err != nil {
		return err
	}
	if err = addUserAgentRetryMode(stack, options); err != nil {
		return err
	}
	if err = addCredentialSource(stack, options); err != nil {
		return err
	}
	if err = addOpGetMetricDataV2ValidationMiddleware(stack); err != nil {
		return err
	}
	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opGetMetricDataV2(options.Region), middleware.Before); err != nil {
		return err
	}
	if err = addRecursionDetection(stack); err != nil {
		return err
	}
	if err = addRequestIDRetrieverMiddleware(stack); err != nil {
		return err
	}
	if err = addResponseErrorMiddleware(stack); err != nil {
		return err
	}
	if err = addRequestResponseLogging(stack, options); err != nil {
		return err
	}
	if err = addDisableHTTPSMiddleware(stack, options); err != nil {
		return err
	}
	if err = addInterceptBeforeRetryLoop(stack, options); err != nil {
		return err
	}
	if err = addInterceptAttempt(stack, options); err != nil {
		return err
	}
	if err = addInterceptors(stack, options); err != nil {
		return err
	}
	return nil
}

// GetMetricDataV2PaginatorOptions is the paginator options for GetMetricDataV2
type GetMetricDataV2PaginatorOptions struct {
	// The maximum number of results to return per page.
	Limit int32

	// Set to true if pagination should stop if the service returns a pagination token
	// that matches the most recent token provided to the service.
	StopOnDuplicateToken bool
}

// GetMetricDataV2Paginator is a paginator for GetMetricDataV2
type GetMetricDataV2Paginator struct {
	options   GetMetricDataV2PaginatorOptions
	client    GetMetricDataV2APIClient
	params    *GetMetricDataV2Input
	nextToken *string
	firstPage bool
}

// NewGetMetricDataV2Paginator returns a new GetMetricDataV2Paginator
func NewGetMetricDataV2Paginator(client GetMetricDataV2APIClient, params *GetMetricDataV2Input, optFns ...func(*GetMetricDataV2PaginatorOptions)) *GetMetricDataV2Paginator {
	if params == nil {
		params = &GetMetricDataV2Input{}
	}

	options := GetMetricDataV2PaginatorOptions{}
	if params.MaxResults != nil {
		options.Limit = *params.MaxResults
	}

	for _, fn := range optFns {
		fn(&options)
	}

	return &GetMetricDataV2Paginator{
		options:   options,
		client:    client,
		params:    params,
		firstPage: true,
		nextToken: params.NextToken,
	}
}

// HasMorePages returns a boolean indicating whether more pages are available
func (p *GetMetricDataV2Paginator) HasMorePages() bool {
	return p.firstPage || (p.nextToken != nil && len(*p.nextToken) != 0)
}

// NextPage retrieves the next GetMetricDataV2 page.
func (p *GetMetricDataV2Paginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*GetMetricDataV2Output, error) {
	if !p.HasMorePages() {
		return nil, fmt.Errorf("no more pages available")
	}

	params := *p.params
	params.NextToken = p.nextToken

	var limit *int32
	if p.options.Limit > 0 {
		limit = &p.options.Limit
	}
	params.MaxResults = limit

	optFns = append([]func(*Options){
		addIsPaginatorUserAgent,
	}, optFns...)
	result, err := p.client.GetMetricDataV2(ctx, &params, optFns...)
	if err != nil {
		return nil, err
	}
	p.firstPage = false

	prevToken := p.nextToken
	p.nextToken = result.NextToken

	if p.options.StopOnDuplicateToken &&
		prevToken != nil &&
		p.nextToken != nil &&
		*prevToken == *p.nextToken {
		p.nextToken = nil
	}

	return result, nil
}

// GetMetricDataV2APIClient is a client that implements the GetMetricDataV2
// operation.
type GetMetricDataV2APIClient interface {
	GetMetricDataV2(context.Context, *GetMetricDataV2Input, ...func(*Options)) (*GetMetricDataV2Output, error)
}

var _ GetMetricDataV2APIClient = (*Client)(nil)

func newServiceMetadataMiddleware_opGetMetricDataV2(region string) *awsmiddleware.RegisterServiceMetadata {
	return &awsmiddleware.RegisterServiceMetadata{
		Region:        region,
		ServiceID:     ServiceID,
		OperationName: "GetMetricDataV2",
	}
}
