This project is a demo backend service that supports various sample front end plugins to twilio flex
To support outbound dialing with conference
It exposes a secure websocket with authentication that can be used to:
- trigger a call from a client
- push updates of the call status back to that client
- hang up a call for a given client
It also exposes two end points that are called by twilio when:
- providing updates to the status of calls generated by this server
- twilio retrieves a twiml document to describe how to handle a call when it is answered
To support realtime statistics dashboard for queues
It exposes a secure websocket with authentication that can be used to:
- recieve updates of stat changes
- current queue stats updated every 5 seconds
- todays overall stats updated every 30 seconds
- turn stats on/off per channel
- define your own SLA thresholds (max 3)
Before setting up this server you must first created a dedicated TaskRouter workflow for outbound calls. You can do this here. Make sure it is part of your Flex Task Assignment workspace.
- ensure there is the following matching workers expression for the only filter on the workspace
- task.targetWorker==worker.contact_uri
- ensure the priorty of the filter is set to 1000 (or at least the highest in the system)
- make sure the filter matches to a queue with Everyone on it. The default Everyone queue will work but if you want to seperate real time reporting for outbound calls, you should make a dedicated queue for it with a queue expression
- 1==1
You can now setup the server, you can either deploy to heroku (which is free, you just need a login) or you can setup locally and expose via ngrok
-
Populate the given variables when prompted
TWILIO_OUTBOUND_WORKFLOW_SID
- the SID of the workflow you just created - used for creating tasksTWILIO_ACCOUNT_SID
- the account sid of your twilio account - used for calling Twilio APIsTWILIO_AUTH_TOKEN
- the auth token of your twilio account - used for calling Twilio APIsTWILIO_FLEX_WORKSPACE_SID
- TaskRouter Flex Assignment Workspace Sid, generated when creating a twilio flex projectEXTERNAL_HOST
- the host that exposes this service - used for telling Twilio where to make callbacks when calling the Twilio APIs. Should be of the form <HEROKU_APP_NAME>.herokuapp.com
-
You're all set, the backend is ready. You can access it on https://<HEROKU_APP_NAME>.herokuapp.com
- Clone repository using
git clone
- run
npm install
- clone the .env.sample to .env
- update .env as approproate, descriptions above
- run
ngrok http 3000
- start server using
npm start
v1.4 - added service that polls for real time stats ever 5 seconds and cumulative stats every 30 seconds, exposted via websocket
v1.3 - added authentication provider for websocket using api token provided by twilio via flex
v1.2 - migrated repository over to "twilio-flex-sample-backend" to be used with other plugins other than outbound dial, inroduced dotenv
v1.1 - updated websocket endpoint to reflect its dedicated to outbound calling
v1.0 - initial release
Please be aware that this project has a Code of Conduct. The tldr; is to just be excellent to each other ❤️