Git Product home page Git Product logo

gitmahadev / omnichannel-chat-widget Goto Github PK

View Code? Open in Web Editor NEW

This project forked from microsoft/omnichannel-chat-widget

0.0 0.0 1.0 17.36 MB

Omnichannel Live Chat Widget UI Components offers a re-usable component-based library to help create a custom chat widget that can be connected to the Dynamics 365 Customer Service experience.

License: MIT License

JavaScript 1.79% TypeScript 97.81% HTML 0.40%

omnichannel-chat-widget's Introduction

Omnichannel Live Chat Widget UI Components

Release CI npm version npm
Release CI npm version npm

@microsoft/omnichannel-chat-widget is a React-based UI component library which allows you to build your own live chat widget experience using @microsoft/omnichannel-chat-sdk.

Table of Contents

  1. Introduction
  2. Installation
  3. Example Usage
  4. Components
  5. See Also

Introduction

Omnichannel Live Chat Widget UI Components offers a re-usable component-based library to help create a custom chat widget that can be connected to the Dynamics 365 Customer Service experience.

For more information about Live Chat Widget, see here.

Installation

npm i @microsoft/omnichannel-chat-sdk
npm i @microsoft/omnichannel-chat-widget

or

yarn add @microsoft/omnichannel-chat-sdk
yarn add @microsoft/omnichannel-chat-widget

The repo also contains the @microsoft/omnichannel-chat-components package, which is a collection of UI components. The @microsoft/omnichannel-chat-widget package is an integration of the Chat SDK and the UI components. To install the UI components separately, do

npm i @microsoft/omnichannel-chat-components

or

yarn add @microsoft/omnichannel-chat-components

Example Usage

The basic example below takes in the <LiveChatWidget/> component along with the Chat SDK to create a customized Omnichannel chat widget.

⚠️ The Chat SDK has to be initialized before being passed in.

import * as React from "react";

import { LiveChatWidget } from "@microsoft/omnichannel-chat-widget";
import { OmnichannelChatSDK } from "@microsoft/omnichannel-chat-sdk";
import ReactDOM from "react-dom";
//Below version numbers will help us to troubleshoot issues with specific package
import { version as chatSdkVersion } from "@microsoft/omnichannel-chat-sdk/package.json";
import { version as chatWidgetVersion } from "@microsoft/omnichannel-chat-widget/package.json";
import { version as chatComponentVersion } from "@microsoft/omnichannel-chat-components/package.json";

const render = async () => {
    const omnichannelConfig = {
        orgId: "00000000-0000-0000-0000-000000000000", // dummy config
        orgUrl: "https://www.org-url.com", // dummy config
        widgetId: "00000000-0000-0000-0000-000000000000" // dummy config
    };
    const chatSDK = new OmnichannelChatSDK(omnichannelConfig);
    await chatSDK.initialize(); // mandatory
    const chatConfig = await chatSDK.getLiveChatConfig();
    const liveChatWidgetProps = {
        styleProps: {
            generalStyles: {
                width: "700px",
                height: "800px"
            }
        },
        headerProps: {
            controlProps: {
                hideMinimizeButton: true
            }
        },
        chatSDK: chatSDK, // mandatory
        chatConfig: chatConfig, // mandatory
         telemetryConfig: { //mandatory for telemetry
            chatWidgetVersion: chatWidgetVersion,
            chatComponentVersion: chatComponentVersion,
            OCChatSDKVersion: chatSdkVersion
        }
    };

    ReactDOM.render(
        <LiveChatWidget {...liveChatWidgetProps}/>,
        document.getElementById("my-container")
    );
};

render();

A sample widget can be found in this repo here. To build it, do yarn build-sample or yarn build-sample:dev from project root.

Components

Stateless UI Components

These are components that are included in the @microsoft/omnichannel-chat-components package.

Component Usage Interface
CallingContainerPane The container for voice and video feature in the chat widget ICallingContainerProps
ChatButton The button that appears on the user's portal that is designed to be the entry point for the user to initate chat IChatButtonProps
CommandButton A customizable button component that can be injected to the header and/or footer ICommandButtonProps
ConfirmationPane The default pane used when the Header close button is launched IConfirmationPaneProps
Footer The bottom container of the chat containing the download transcript, notification sound and email transcript buttons by default. IFooterProps
Header The top container of the chat containing the default minimize, close and title of the chat widget IHeaderProps
InputValidationPane A pop-up input pane with validation. In the default widget this is used as part of EmailTranscriptPane IInputValidationPaneProps
LoadingPane The default pane used after the chat button is clicked and before the chat loads completely ILoadingPaneProps
OutOfOfficeHoursPane The pane that is displayed when the chat is outside of operating hours set on admin side IOOOHPaneProps
PostChatSurveyPane The pane that holds the Customer Voice survey which would be used by the customer to input their chat experience, provide user ratings etc. It uses an IFrame to render the survey URL fetched from getPostChatSurveyContext call from OmniChannel ChatSDK. IPostChatSurveyPaneProps
PreChatSurveyPane The pane that holds the form which would be used by the customer to input helpful information for using the Support Chat before starting up the Chat Process. Makes use of AdaptiveCards IPreChatSurveyPaneProps
ProactiveChatSurveyPane A pane that holds more information than a normal chat button and can be configured to proactively pop up IProactiveChatPaneProps
ReconnectChatPane The pane that shows up when the customer is re-connecting to the chat to add additional conversation IReconnectChatPaneProps

⚠️ Because the components extend Microsoft's Fluent UI components, the base interface for all the styleProps in the above table is IStyle, which extends the IRawStyleBase interface, which is the most useful reference.

Stateful Components

Component Default Usage Interface
WebChatContainer The default wrapper around BotFramework's WebChat, which is the message container we are using IWebChatContainerStatefulProps
LiveChatWidget The default widget that stitches the UI components with Chat SDK ILiveChatWidgetProps

Some of the interfaces listed in the Stateless table have Stateful counterparts defined in the @microsoft/omnichannel-chat-widget package. For example, IConfirmationPaneStatefulProps extends IConfirmationPaneProps with additional attributes that only makes sense in the stateful context.

Default Props

For a list of all default props used in the default stateful widget, please see here. If you want to change a default prop, you need to explicitly set it and parse the object as the argument to <LiveChatWidget/>

Custom Components

There are two ways to custom the components provided in the library - 1) Replacing components using ComponentOverrides, and 2) Adding custom components in header and footer.

ComponentOverrides

Most sub-components and the default panes provided can be overriden. Components have "componentOverrides" as part of props interface, which consists of ReactNodes or strings for each part of the component. For example, the "ProactiveChatPane" component has a close button, and the close button can be overriden by creating a custom react node and setting it to the "closeButton" attribute of "componentOverrides" interface that is part of the props.

const customButton = (
    <button style={{
        background: "green",
        height: "80px",
        margin: "30px 15px 0 0",
        padding: "10px",
        width: "160px"
    }}>
        This is a custom button
    </button>
);

const liveChatWidgetProps = {
    proactiveChatPaneProps: {
        componentOverrides: {
            closeButton: customButton
        };
    };
}

Custom Components in Header and Footer

Header's and Footer's child components consist of three parts:

  1. "leftGroup" - adding child components at the left of the Header/Footer
  2. "middleGroup" - adding child components in the middle of the Header/Footer
  3. "rightGroup" - adding child components at the right of the Header/Footer

By default Header has the header icon and title on the left and minimize and close buttons on the right, and Footer has Download Transcript and Email Transcript buttons on the left and audio notification button on the right. These components can be overriden with ComponentOverrides. In addition, other custom child components can be added to both Header and Footer by creating custom react nodes and adding them to attributes "leftGroup", "middleGroup" or "rightGroup" of "controlProps".

const buttonStyleProps: IButtonStyles = {
    root: {
        color: "blue",
        height: 25,
        width: 25,
    }
};

const calendarIcon: IIconProps = { iconName: "Calendar" };
const calendarIconButton = <IconButton
    key="calendarIconButton"
    iconProps={calendarIcon}
    styles={buttonStyleProps}
    title="Calendar">
</IconButton>;

const emojiIcon: IIconProps = { iconName: "Emoji2" };
const emojiIconButton = <IconButton
    key="emojiIconButton"
    iconProps={emojiIcon}
    styles={buttonStyleProps}
    title="Sentiment">
</IconButton>;

const uploadIcon: IIconProps = { iconName: "Upload" };
const uploadIconButton = <IconButton
    key="uploadIconButton"
    iconProps={uploadIcon}
    styles={buttonStyleProps}
    title="Upload">
</IconButton>;

const customizedFooterProp: IFooterProps = {
    controlProps: {
        leftGroup: { children: [uploadIconButton] },
        middleGroup: { children: [calendarIconButton] },
        rightGroup: { children: [emojiIconButton] }
    }
};

📌 Note that WebChat hooks can also be used in any custom components.

See Also

Telemetry
Create LCW widget with Webpack5 and TypeScript
Omnichannel Features
How to Add Visual Regression Tests
Security
Third Party Cookie Support

omnichannel-chat-widget's People

Contributors

charliewang95 avatar marghayk avatar elopezanaya avatar dishakh avatar sarojkpr avatar xteddie avatar dishakhattri avatar charlwan avatar gitmahadev avatar abhinab22mohanty avatar microsoftopensource avatar girinadan avatar dependabot[bot] avatar kevinlin98z avatar sudhcha avatar divyanshugupta9121997 avatar microsoft-github-operations[bot] avatar

Forkers

gitanjuvs

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.