Code Monkey home page Code Monkey logo

example-customer-end-chat's Introduction

Example: Customer End Webchat

This example adds End Chat capability into the customer-facing Twilio Flex Webchat UI. It includes code for Twilio Functions (found in the serverless directory) as well as frontend UI code built atop Twilio's Flex Webchat UI Sample (found in the flex-webchat-ui directory).

customer-end-chat example

clicking the X closes the window, which ends the chat

How it Works

The goal here is to create a React Component in flex-webchat-ui that is capable of ending its own chat channel. In order to accomplish this, that component is going to hit a Twilio Function, endChat, with the Chat Channel SID.

However: The endChat Function must also complete the Flex/TaskRouter Task, so it will need its SID. Since there's no easy way to look that up, we start off by populating the taskSid into our Chat Channel's attributes via Studio and the populateChatChannelWithTaskSid Twilio Function. Here's how that looks in order of time:

  1. Customer types a message, which kicks off the Studio flow
  2. Studio enqueues a new Task into TaskRouter
  3. Once the Task is created, Studio runs the populateChatChannelWithTaskSid Function
  4. populateChatChannelWithTaskSid adds the taskSid into the chat channel's attributes
  5. When the customer closes their chat window, the new React Component calls the endChat Twilio Function
  6. endChat sets the Chat Channel to "INACTIVE" and completes the Task

Setup

Prerequisites

Before beginning with this Flex plugin, you'll want to make sure that:

  • You have a working Twilio Flex account
  • You have Node.js as well as npm installed
    • npm generally gets installed along with Node.js, but make sure you have it anyway
  • You have the latest Twilio CLI installed
  • Your Twilio CLI is running the latest Serverless Plugin

Configuration

Over the course of the configuration process, you'll need several values from your Twilio account. The first five can be found right now in the Twilio Console and Flex Admin pages, but the last one will require you to deploy your Twilio Functions to find (Don't worry, we'll cover that!)

  • Account SID
  • Auth Token
    • Found on the Twilio Console Homepage
    • Secure string of 32 characters that we'll call "blah..." for the sake of communication
  • Twilio Workspace SID
  • Flex Chat Service Sid
  • Flex Flow Sid
  • Serverless Runtime Domain
    • We'll grab this after we've deployed our Twilio Functions
    • A web domain that looks something like "foobar-xxx-dev.twilio.io"

We'll be entering these values into two files, neither of which exist yet:

  • serverless/.env
  • flex-webchat-ui/public/assets/webchat-appConfig.js

serverless/.env

To kick things off, rename the example serverless environment file to remove .example, then open it in your editor of choice:

mv serverless/.env.example serverless/.env

vim serverless/.env

You'll notice that this file has temporary string variables for your Account Sid, Auth Token, Twilio Workspace SID, and Flex Chat Service SID. Replace these strings with your actual value.

# Before
ACCOUNT_SID=accountSid
AUTH_TOKEN=authToken
TWILIO_WORKSPACE_SID=workspaceSid

# After
ACCOUNT_SID=AC...
AUTH_TOKEN=blah...
TWILIO_WORKSPACE_SID=WS...
FLEX_CHAT_SERVICE_SID=IS...

Deploying Functions

Before we can configure the next file, we'll need to deploy our Twilio Functions and grab the Runtime Domain. To do so, we'll be using the Twilio CLI and the Serverless Plugin that you installed as a prerequisiste.

First off, make sure that you have authenticated according to the Twilio CLI documentation.

Then cd into the Functions directory and deploy them:

cd serverless
twilio serverless:deploy

Once everything gets deployed, your response should look something like this:

Deployment Details
Domain: foobar-xxx-dev.twilio.io
Service:
   plugin-supervisor-capacity-functions (ZS...)
Environment:
   dev (ZE...)
Build SID:
   ZB...
View Live Logs:
   Open the Twilio Console
Functions:
   https://foobar-xxx-dev.twilio.io/endChat
   https://foobar-xxx-dev.twilio.io/populateChatChannelWithTaskSid
Assets:

The value we're looking for comes after Domain: – that's your Runtime Domain.

flex-webchat-ui/public/assets/webchat-appConfig.js

Now we'll populate the UI configuration variables. Start by renaming the example app configuration file to remove .example, then open it in your editor of choice

mv flex-webchat-ui/public/assets/webchat-appConfig.example.js flex-webchat-ui/public/assets/webchat-appConfig.js

vim flex-webchat-ui/public/assets/webchat-appConfig.js

Just like before, this new file contains temporary strings that you simply have to replace with the actual values:

var appConfig = {
    // change to your AccountSid
    accountSid: "AC...",
    // change to your Flex Flow SID
    flexFlowSid: "FO...",
    // change to your runtimeDomain
    runtimeDomain: "http...",
    colorTheme: {
        overrides: brandedColors
    }
}

And now the example is fully configured! Now we have one more step: Setting up Studio to use the populateChatChannelWithTaskSid Function we deployed earlier.

Studio Customization

This is the crucial step: After the chat has been enqueued into TaskRouter/Flex as a new Task, we have to populate our Chat Channel Attributes with the Task SID. To do this:

  1. Open Studio in your Twilio Console
  2. Edit the default Webchat Flow that was automatically created when you installed Flex
  3. Drag a new "Run Function" widget onto your flow, below the "SendMessageToFlex" widget
  4. Drag a line from the "SendMessageToFlex" widget's "Task Created" node to the input of your new Run Function widget
  5. Configure your Run Function widget:
    • Name it something recognizable like "populateChatChannel"
    • Select the Functions service, by default "customer-end-chat-functions"
    • Select your dev environment
    • Select the populateChatChannelWithTaskSid Function
    • Add two Function Parameters:
      • key: taskSid
        • value: {{widgets.SendMessageToAgent.sid}}
      • key: channelSid
        • value: {{trigger.message.ChannelSid}}
  6. Save the Run Function widget
  7. Publish your changes

The end result should look something like this: studio customization

With this studio customization in-place, the entire example should be set up! You can now run it locally to test and customize it.

Local Development/Deployment

In order to develop locally, you can use the Webpack Dev Server by running:

cd flex-webchat-ui
npm install
npm start

This will automatically start up the Webpack Dev Server and open the browser for you. Your app will run on http://localhost:8081. If you want to change that you can do this by setting the PORT environment variable:

PORT=3000 npm start

When you make changes to your code, the browser window will be automatically refreshed.

Disclaimer

This software is to be considered "sample code", a Type B Deliverable, and is delivered "as-is" to the user. Twilio bears no responsibility to support the use or implementation of this software.

example-customer-end-chat's People

Contributors

dorkusprime avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

example-customer-end-chat's Issues

NPM Run Build

I am able to use the application in a serverless environment, however, when I use a production build (npm run build) it does not work. Use inspect shows "failed to load resource" errors. How do I solve this?

Chat is not end

Hi Team,

I have created functions and studio workflow based on your code. However my chat is not getting ended.
It is always go to Flex agent queue. Also end wrap function is not executed.
Kindly advise me how to resolve this issue

I have create workflow for GCP dialogflow with flex webchat, based on github URL https://github.com/anthonywong555/Twilio-Flex-Google-Dialogflow. Now i have added this end flow in existing workflow however it is always for going to flex agent queue.
Once i have given thank you. The webchat is not closed session, it is always going to flex agent queue.
Kindly advise me on this.

Deva

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.