Menu

Flex UI Release Notes for v2.x.x

This page includes the release notes related directly to Flex UI for versions 2.x.x. For updates on other components of the Flex Platform, visit the Twilio Changelog and select the Flex product. If you're running Flex UI 1.x.x, see the release notes for v 1.x.x.

For detailed descriptions of the Flex UI 2.x.x public interfaces with code samples, visit our Flex UI API docs.

v 2.0.0-beta.3

@twilio/flex-ui@2.0.0-beta.3

release date Nov 10, 2022

Fixed

  • Fixed an issue with type definitions that prevented some customers from creating new plugins.

v 2.0.0-beta.2

@twilio/flex-ui@2.0.0-beta.2

Release date: October 24th, 2022

Changed

  • Improved reliability of core contact center functionality in degraded mode
  • Moved Debugger UI to Status Report and released to GA
  • Consume the latest Paste libraries @twilio-paste/core 15.3.0 and @twilio-paste/icons 9.2.0
  • Native Supervisor “Analyze” and “Dashboards” views are now picked by default over the legacy ones

Fixed

  • Performance improvements to the Queue Stats view
  • Users can no longer interact with Status Report (formerly Debugger UI) when the token has expired
  • TaskInfoPanel in Supervisor view can now be customized
  • Fixed issue with individual user access to Insights Dashboards
  • Fixed a bug in Historical Reporting where segment links were not clickable in created KPI dashboards
  • Message input no longer remains editable if the conversation is closed via API
  • Fixed an issue preventing audio constraints from being applied to the audio device
  • Fixed an issue where remote config loglevel was not being applied correctly to SDK logs
  • Tasks in TeamsView now stack horizontally with a scrollbar rather than vertically
  • Chat now fetches older messages if all the newer messages are displayed, even without scroll interaction. This fixes an issue where older messages were hidden when the Chat Canvas is zoomed out
  • Task-specific notifications now only shown if they are related to the selected task
  • Fix chat messages sort order for screen-readers
  • Various accessibility improvements

Added

  • The downloadable report provided by Status Report now includes a summary of the user’s degraded mode state and information about Twilio service status
  • Scroll positions are now preserved between conversations
  • selectionStart and selectionEnd now added as part of conversationInput state
  • Chat messages are now keyboard navigable using the up/down arrow keys
  • Flex UI will now wait for plugins to complete initialisation after login before moving on

v 2.0.0-beta.1

@twilio/flex-ui@2.0.0-beta.1

Release date: March 30th, 2022

Flex UI 2.0 is released to Public Beta.

This is a major version upgrade of the Flex UI library and contains breaking changes that require you to update your plugins for compatibility. Check out our migration guide for more detail.

Beta products are not covered by a Twilio SLA. Learn more about beta product support.

Flex Conversations

1.a - Main channel as SMS and having another tasks.png

Flex UI 2.0 supports both Flex Conversations and Legacy messaging.

Flex UI 2.0 support Flex Conversations and its new messaging features:

WhatsApp channel and attachments support - WhatsApp is now available as a native channel and agents can have conversations with customers using plan text or attachments. Note, currently only one attachment per message is supported.

MMS support - Agents can now send and receive MMS messages when having a conversation with the customer over SMS channel. Note, only MMS to +1 numbers is supported.

Supervisor attachment monitoring - Supervisors can now access attachments when monitoring live conversations and viewing chat transcripts

Attachment configuration - Admins can now configure attachment settings in Console per each messaging address.

Messaging UX improvements - we have improved messaging experience for agents, this includes

  • New message separator and scroll to newest message button - identify which messages in the list are new and quickly scroll down to the bottom to see new messages in the conversation.
  • Text and attachment in a single message - compose and send a single message that contains both text and one attachment
  • Delivery failed receipts - get notified when a message has not been delivered
  • Message loading indicator - now when scroll up for more messages, if loading messages takes a bit longer, we will show you a loading spinner

For more info on Flex Conversations and the new capabilitiew, visit Flex Conversations documentation

Conversations SDK support

Flex UI now supports Conversations SDK and Programmable Chat SDK support has been removed. If you have an existing Flex project and plugins that you wish to migrate to v2.0, follow our migration guide

New messaging input field

2. Image - New messaging input field.png

For developers, we are now providing a more customizable messaging component MessageInputV2. Its a new Programmable component with 2 children

<MessageInputV2>
    <MessageInputArea key="textarea"/>
    <MessageInputActions key="actions"/>
</MessageInputV2>

MessageInputActions component is also a Programmable component and contains the message send button and the file attachment button (if file attachments are enabled). Easily add custom actions to this component with component add methods.

We have also introduced new default props

  • use rows prop to set input field height
  • use hideSendButton prop to hide Send button to free more space for your custom actions. Use it together with returnKeySendsMessage to enable sending message on Enter.

Learn more about new components in our Flex UI API docs

Web Accessibility improvements

In Flex UI 2.0 we are aligning to WCAG 2.1 level AA standards to support our customers in building accessible user experiences. We are gradually improving Web accessibility of our out-of-the-box Flex UI experience and tools used to customize it.

In this version we have introduced accessible color theme built with Twilio Paste including a Dark mode theme and improved accessibility support with clearer focus state, improved keyboard navigation and screen reader support for Agent experience.

To learn more in Flex UI web accessibility.

Degraded mode

We have introduced a Degraded mode for Flex UI - now Flex UI will initialize with limited capabilities, even if some of the components like SDK’s (TaskRouter, Conversations, Voice or Sync) are down. In case of disruptions in Twilio services, Flex User will be able to login to Flex and perform certain tasks that are still available. For example, in the case of Twilio Voice experiencing an incident, your agent will still be able to handle messaging tasks.

Users will see a notification informing them of a possible disruption in the normal work of Flex UI and they will be able to download a thorough report with error details and logs.

3. Image - Degraded mode_Global notification.png

For more on error handling and reporting, check out our Troubleshooting Flex UI guide.

User activity controls improvements

We have updated activity controls and user profile for easier access and improved programmability.

4. Image - Status and Profile.png

We have introduced a new programmable component Activity is added to MainHeader. This allows developers to replace this component with more custom activity controls that suite their business workflows.

We also made changes to the UserCard component. We have removed activity controls and changed the layout.

Note, this is a potential breaking change if you have customized UserCard and its child components using CSS. Check out our migration guide, if you are upgrading an existing Flex project to Flex UI 2.0

Teams view, Queue stats and Quality management improvements

We have introduced several updates to the supervisor capabilities:

  • In Queue Stats, channels with no data or only 0's are no longer displayed
  • In Quality Management:
    • We have allowed question sorting for questionnaire
    • Added notifications for successful and unsuccessful operations
    • Added form validation
    • Added questionnaire visibility toggle
  • In Conversations Player
    • we have added a permission check for player.view.player before displaying conversation content so Player does not show with an error when user does not have permission to access recordings
    • Generate a backup waveform in the browser will now be showing when agents and customers are talking in the call recording Player. This enables Player to generate waveforms for recordings that are not accessible by Twilio backend services - encrypted by public key, copied to custom storage etc
    • Overlay Player will now support new address format of drill down links in Flex Insights Historical Reporting

Upgrade developer tools

In this version, we have upgrade developer tools to like twilio SDK's and major dependencies, which required a major version upgrade of a Flex UI library.

Upgraded dependencies

  • Node -> >= 14
  • React & React DOM -> ^17.0.0
  • Redux -> ^4.0.5
  • React-redux -> ^7.2.2
  • React-router-redux -> removed
  • Emotion -> ^11.1.3
  • Material UI -> ^4.12.3

Upgraded SDK's

  • Conversations SDK -> 2.1.0
  • Voice SDK -> 2.0.1
  • TaskRouter SDK -> ^0.5.9

For more details on all the upgraded tools, check out our migration guide

Twilio Paste support

We’ve have integrated Twilio Paste support into the Flex UI. Twilio Paste is the design system that Twilio created to support its own efforts to create consistent, inclusive, and delightful experiences. Now, Flex UI developers and partners can use the same component library for plugin development as Twilio’s developers. This means that partners can more easily ensure consistent styling and branding for their customers, without having to bring in extensive UI development expertise.

Theming improvements

Flex UI 2.0 now uses a new theming structure that more closely maps to the Twilio Paste design system. This new structure is based on the concept of design tokens, a set of variables that you can modify. This structure promotes both consistency, customization and web accessibility.

New theme config - We have introduced a new configuration key called config.theme with the following structure

interface ThemeConfigProps {
   isLight?: boolean; // Represents if light or dark theme
   tokens?: Tokens; // Paste tokens
   componentThemeOverrides?: Object; // Object containing styles of the component which is to be overridden.
}

Component theming - For components which receive the theme as props, props.theme.tokens is introduced. For more on each token information, please refer to Twilio Paste

Custom tokens - we have added support for customer tokens so you can pass your own custom tokens to theme using the example below

  appconfig = {
    theme: {
      tokens: {
        custom: {
          myCustomToken: "#ccc"
        }
      }
    }
  }

ThemeProvider - Introducing a new API Flex.setProviders() which can be used to load providers on the root level once and don’t have to worry about wrapping again as the context will correctly set. Now to use Paste in Flex plugins, developers will not need to wrap Paste ThemeProvider over all its components. Check out our Theming docs for examples of how this can be used or explore the API in our Flex UI API docs.

New Actions and Flex Events for TaskRouter SDK

We have added new Flex actions wrapping TaskRouter

import { Actions } from "@twilio/flex-ui";

// Set worker attributes
Actions.invokeAction("SetWorkerAttributes", { attributes: {}, mergeExisting: true });

// Update worker token
Actions.invokeAction("UpdateWorkerToken", { token: "newToken" });

// Update task attributes
Actions.invokeAction("SetTaskAttributes", { attributes: {}, mergeExisting: true });

// Issue a Call to a Worker
Actions.invokeAction("IssueCallToWorker", { callerId: "callerId", twiMLUrl: "twiMLUrl", options: {} });

// Dequeue the Reservation to the Worker.
// This will perform telephony to dequeue a Task that was enqueued using the Enqueue TwiML verb.
// A contact_uri must exist in the Worker's attributes for this call to go through.
Actions.invokeAction("DequeueTask", { options: {} })

// Redirect the active Call tied to this Reservation
Actions.invokeAction("RedirectCallTask", { callSid: "callSid", twiMLUrl: "twiMLUrl", options: {} });

// Update the Worker's leg in the Conference associated to this Reservation
Actions.invokeAction("UpdateWorkerParticipant", { options: {} });

// Update the Customer leg in the Conference associated to this Task
Actions.invokeAction("UpdateCustomerParticipant", { options: {} });

and introducing new Flex Events wrapping TaskRouter event

import { Manager } from "@twilio/flex-ui";
const manager = Manager.getInstance();

// Emitted when a worker receives a new task
manager.events.addListener("taskReceived", (task: ITask) => {});

// Emitted when the worker's activity changes
manager.events.addListener("workerActivityUpdated", (activity: Activity, allActivities: Map<string, Activity>) => {});

// Emitted when the worker's attributes changes
manager.events.addListener("workerAttributesUpdated", (newAttributes: Record<string, any>) => {});

// Emitted when the worker's task status gets updated
manager.events.addListener("taskUpdated", (task:ITask) => {});

// Emitted when the worker's task gets set to 'accepted'
manager.events.addListener("taskAccepted", (task:ITask) => {});

// Emitted when the worker's task gets set to 'canceled'
manager.events.addListener("taskCanceled", (task:ITask) => {});

// Emitted when the worker's task gets set to 'completed'
manager.events.addListener("taskCompleted", (task:ITask) => {});

// Emitted when the worker's task gets set to 'rejected'
manager.events.addListener("taskRejected", (task:ITask) => {});

// Emitted when the worker's task gets set to 'rescinded'
manager.events.addListener("taskRescinded", (task:ITask) => {});

// Emitted when the worker's task gets set to 'timeout'
manager.events.addListener("taskTimeout", (task:ITask) => {});

// Emitted when the worker's task gets set to 'wrapup'
manager.events.addListener("taskWrapup", (task:ITask) => {});

Now you can use exlusively Flex UI Actions Framework when working with TaskRouter SDK, without needing to access its methods directly.

Visit our Flex UI API docs for more details on Actions and Events

State management improvements

As part of the upgrades to our core APIs, Flex UI 2.0 includes the Redux Toolkit and some new APIs for managing your internal state. These tools provide some guardrails for your state management, helping you set up boilerplate code more easily and with better defaults.

useFlexSelector - A wrapper around Redux's useSelector method. It exposes the same API but adds some Flex validations to ensure Flex's internal state is usable

useFlexDispatch - A wrapper around Redux's useDispatch method. It prevents dispatches from causing side effects to Flex's state, ensuring your changes work as expected

Go to our docs to learn more about how to manage state with Flex UI, use Redux and explore the details of the new state management API's

Deprecated and unsupported features

  • Legacy dialpad - we are no longer supporting Legacy dialpad implementations. We advice migrating to the natively supported dialpad. Checkout the migration guide for more info on how to switch.
  • Debugger Integration - this integration is not yet supported in Flex UI 2.0. More updates for debugger integration options coming soon.
  • Flex UI Diagnostics tool - this pilot feature is not yet supported in Flex UI 2.0.
  • Flex Solutions and community plugins - Plugins and Solutions provided by Twilio community engineers, are not yet migrated on to Flex UI 2.0 version.

Other changes

  • We have added a mute button to LiveCommsBar to access mute action easily when the Agent is on a live call and remove Mute button from the MainHeader
  • React & ReactDOM are now peer dependencies
  • MessageState & ITask interfaces now accept a TaskAttributes argument
  • Added support for exact prop for React Router
  • Check input device before outbound call
  • Added alert dialog if an inbound call comes in during an outbound call
  • Add support for React router params to custom components, you can now get params from url through react router
  • Fixed privilege escalation security vulnerability
  • Support .credit domain - link in chat with this domain will now be clickable
Rate this page:

Need some help?

We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd by visiting Twilio's Stack Overflow Collective or browsing the Twilio tag on Stack Overflow.

Thank you for your feedback!

Please select the reason(s) for your feedback. The additional information you provide helps us improve our documentation:

Sending your feedback...
🎉 Thank you for your feedback!
Something went wrong. Please try again.

Thanks for your feedback!

thanks-feedback-gif