{"id":13565602,"url":"https://github.com/opentok/opentok-rtc","last_synced_at":"2025-04-04T18:07:10.076Z","repository":{"id":40296133,"uuid":"43755784","full_name":"opentok/opentok-rtc","owner":"opentok","description":"OpenTok demo application","archived":false,"fork":false,"pushed_at":"2025-04-01T09:55:49.000Z","size":51396,"stargazers_count":106,"open_issues_count":94,"forks_count":108,"subscribers_count":35,"default_branch":"master","last_synced_at":"2025-04-01T10:33:43.653Z","etag":null,"topics":["javascript","nodejs","opentok","screensharing","sip","tokbox","webrtc"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opentok.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-10-06T14:25:38.000Z","updated_at":"2024-07-18T04:48:26.000Z","dependencies_parsed_at":"2024-04-30T05:31:23.792Z","dependency_job_id":"3fef09ab-9d1a-4dba-8b0e-61c4a54e45c3","html_url":"https://github.com/opentok/opentok-rtc","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opentok%2Fopentok-rtc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opentok%2Fopentok-rtc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opentok%2Fopentok-rtc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opentok%2Fopentok-rtc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opentok","download_url":"https://codeload.github.com/opentok/opentok-rtc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247226213,"owners_count":20904465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","nodejs","opentok","screensharing","sip","tokbox","webrtc"],"created_at":"2024-08-01T13:01:50.978Z","updated_at":"2025-04-04T18:07:10.045Z","avatar_url":"https://github.com/opentok.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# OpenTokRTC\n\n\u003cimg src=\"https://assets.tokbox.com/img/vonage/Vonage_VideoAPI_black.svg\" height=\"48px\" alt=\"Tokbox is now known as Vonage\" /\u003e\n\n[![Build Status](https://travis-ci.com/opentok/opentok-rtc.svg?token=qPpN1jG8Wftsn1cafKif\u0026branch=master)](https://travis-ci.com/opentok/opentok-rtc)\n[![codecov](https://codecov.io/gh/opentok/opentok-rtc/branch/master/graph/badge.svg)](https://codecov.io/gh/opentok/opentok-rtc/branch/master)\n\nOpenTokRTC is your private web-based video conferencing solution. It is based on the\n[OpenTok platform](https://tokbox.com/developer/) (now the Vonage Video API) and uses\nthe OpenTok SDKs and API. You can deploy the app on your servers to get your own\nvideo conferencing app running on WebRTC.\n\nThis repository contains a Node.js server and a web client application.\n\n## Table of Contents\n\n* [Installation](#installation)\n  - [Requirements](#requirements)\n  - [Installing dependencies](#installing-dependencies)\n  - [Basic configuration](#basic-configuration)\n* [Runningthe app](#running-the-app)\n* [Configuration options](#configuration-options)\n  - [OpenTok configuration](#opentok-configuration)\n  - [Screen sharing](#screen-sharing)\n  - [Phone dial-out](#phone-dial-out)\n  - [Google Authentication for Phone dial-out](#google-authentication-for-phone-dial-out)\n  - [Archiving](#archiving)\n  - [Screen sharing](#screen-sharing)\n  - [Feedback](#feedback)\n  - [Pre-call test](#pre-call-test)\n  - [Adobe Analytics](#adobe-analytics)\n  - [ICID tracking](#icid-tracking)\n  - [Additional configuration options](#additional-configuration-options)\n* [Customizing the UI](#customizing-the-ui)\n* [Troubleshooting](#troubleshooting)\n* [Health status check](#health-status-check)\n\n---\n\n## Installation\n\nIf you want to install OpenTokRTC on your own server, read on. If you want to deploy OpenTokRTC to Heroku, see [`INSTALL-heroku.md`](INSTALL-heroku.md).\n\n### Requirements\n\nYou will need to install these dependencies on your machine:\n\n- [NodeJS v12](https://nodejs.org): This version of OpenTokRTC is tested with NodeJS v12 LTS.\n- [Redis](https://redis.io): A `redis` server running on `localhost`.\n\nYou will also need these an OpenTok API key and secret. You can obtain these by signing up with\n[OpenTok/Vonage Video API](https://tokbox.com/account/user/signup).\n\n### Installing dependencies\n\nFirst, install the dependencies for the server.\n\nIf you use [nvm](https://github.com/nvm-sh/nvm), have it use the correct\nversion of Node (v8):\n\n```sh\n$ nvm use\n```\n\nThen install the Node module dependencies:\n\n```sh\n$ npm install\n```\n\nNote: You will need to run these commands as a non-root user, else `bower` will refuse to execute.\n\n### Basic configuration\n\nOnce all the dependencies are in place, you will need to set some configuration options\nand install the application's dependencies. At a minimum, you need to set options for\nthe OpenTok API key and secret to be used by the app. You can obtain these from\nyour [OpenTok account](https://tokbox.com/account).\n\nOther features of the app are enabled and configured using more configuration options,\ndescribed in this README.\n\nThere are two ways to set configuration options for the application:\n\n* Using a config.json file\n* Setting environment variables\n\n#### Using a config.json file\n\nFirst create create a `config.json` file in the `config` folder.\n\n```sh\n$ cd \u003cpath-to-opentok-rtc\u003e\n$ cp config/example.json config/config.json\n```\n\nEdit the config.json file with the following, and replace `\u003ckey\u003e` and `\u003csecret\u003e` with\nyour OpenTok API key and the corresponding API secret:\n\n```js\n{\n    \"OpenTok\": {\n        \"apiKey\": \"\u003ckey\u003e\"\n        \"apiSecret\": \"\u003csecret\u003e\"\n    }\n}\n```\n\nThe [config/example.json](config/example.json) file includes settings for other options,\nwhich are described in the [Configuration options](#configuration-options) section below.\n\n#### Setting environment variables\n\nYou can set the `TB_API_KEY` and `TB_API_SECRET` to your OpenTok API key and secret.\nFor example, the following shell commands export these values for use by the app\n(replace `\u003ckey\u003e` and `\u003csecret\u003e` with your OpenTok API key and the corresponding API secret):\n\n```sh\nexport TB_API_KEY=\u003ckey\u003e\nexport TB_API_SECRET=\u003csecret\u003e\n```\n\nYou can set other environment variables to enable and configure other options,\nwhich are described in the [Configuration options](#configuration-options) section.\n\n## Running the app\n\nEnsure that Redis server is running on `localhost`. In a terminal, run:\n\n```sh\nredis-server\n```\n\nThen start the application in foreground by running:\n\n```sh\n$ node server\n```\n\nThis will start the application on port `8123` by default.\n\nTo specify a custom port number, use the `-p` flag when calling `node server`.\nFor example, to run the application on port 8080, run:\n\n```sh\n$ node server -p 8080\n```\n\nAdditionally, you can start the application as a daemon by passing `-d` flag,\nwhich starts the application and keeps it running in the background so that your terminal\nis not blocked:\n\n```sh\n$ node server -d\n```\n\nTo start the server with HTTPS enabled, pass `-S` flag to launch a secure server\nalong with `-C \u003cdir\u003e` flag to specify a directory that holds SSL certificate files.\nTo quickly start a secure server, run:\n\n```sh\n$ node server -S -C sampleCerts\n```\n\nThe server expects SSL certificate file to be named `serverCert.pem` and\nan SSL private key file to be named `serverKey.pem`. There is a pre-generated,\nself-signed SSL certificate pair in the `./sampleCerts` directory.\n\nFor detailed information on available options, run `$ node server -h`.\n\n## Configuration options\n\nYou can enable and configure UI settings and other options using a config JSON file\nor by setting environment variables.\n\nEnvironment variable settings overwrite any value set with the config JSON file.\n\nThe default config JSON file location is config/config.json. This path can be\noverwritten by setting the `DEFAULT_JSON_CONFIG_PATH` environment variable.\n\n### OpenTok configuration\n\nThe required configuration settings for the OpenTok API key and secret are\ndescribed in the [basic configuration](#basic-configuration) section,\nearlier in this README.\n\nThere are other OpenTok configuration settings (each of which are optional):\n\n* **Publisher resolution** -- You can set the desired resolution of published video.\n  The config.json setting is `OpenTok.publisherResolution`. The environment variable\n  name is `PUBLISHER_RESOLUTION`.\n\n  The format of the string is \"widthxheight\", where the width and height are represented\n  in pixels. Valid values are \"1280x720\", \"640x480\", and \"320x240\". The published video\n  will only use the desired resolution if the client configuration supports it.\n  Some browsers and clients do not support each of these resolution settings.\n\n  The default resolution for a stream (if you do not specify a resolution) is 640x480 pixels.\n  If the client system cannot support the resolution you requested, the stream will use\n  the next largest setting supported.\n\n* **OpenTok.js URL** -- By default, the app uses the latest standard line version\n  of OpenTok.js. You can change the OpenTok.js source URL. For example you may\n  want to change this to the enterprise line version of OpenTok.js\n  (https://static.opentok.com/v2/js/opentok.min.js).\n\n  The config.json setting is `OpenTok.jsUrl`. The environment variable name is `TB_JS_URL`.\n\n* **Session expiration length** -- To conserve Redis memory, the app limits how long\n  how long room names are associated with OpenTok session IDs. The app stores the last time\n  a session is used and if when we fetch it from Redis we determine it's older than\n  this max age (in days). This is the key where that value (in days) should be stored.\n  By default, sessions live two days.\n  \n  The config.json setting is `OpenTok.maxSessionAge`. The environment variable name is `TB_MAX_SESSION_AGE`.\n\n* **OpenTok media mode** -- You can specify whether the OpenTok sessions will use\nthe OpenTok Media Router ('routed') or not ('relayed'). For more information, see\n[The OpenTok Media Router and media modes](https://tokbox.com/developer/guides/create-session/#media-mode).\nThe default value is 'routed'.\n\nThe config.json setting is `mediaMode`. The environment variable name is `MEDIA_MODE`.\n\n\n**Config.json example:**\n\n```json\n{\n    \"OpenTok\": {\n      \"apiKey\": \"\u003ckey\u003e\",\n      \"apiSecret\": \"\u003csecret\u003e\",\n      \"publisherResolution\": \"1280x720\",\n      \"jsUrl\": \"https://static.opentok.com/v2/js/opentok.min.js\",\n      \"maxSessionAge\": 7\n    },\n    \"mediaMode\": \"routed\"\n}\n```\n\n**Environment variable example:**\n\n```sh\nexport PUBLISHER_RESOLUTION=\"1280x720\";\nexport TB_JS_URL=\"https://static.opentok.com/v2/js/opentok.min.js\";\nexport TB_MAX_SESSION_AGE=\"7\";\n```\n\n### Phone dial-out\n\nThe app can dial out and add a phone-based end user to the OpenTok session, using the OpenTok\n[SIP API](https://tokbox.com/developer/rest/#sip_call). This app uses\n[Nexmo](https://www.nexmo.com/) as the SIP application that connects\nto OpenTok. (You can also use the OpenTok SIP API to connect to other SIP endpoints.)\n\nTo enable this feature:\n\n1. Sign up for a [Nexmo/Vonage](https://dashboard.nexmo.com/sign-up) account.\n\n2. Edit options in the config/config.json file or set environment variables:\n\n   * `SIP.enabled` (config.json) / `SIP_ENABLED` (environment variable) -- Set this to `true`.\n\n   * `SIP.username` (config.json) / `SIP_USERNAME` (environment variable) -- Set this to\n     the apiKey for the Nexmo account you created.\n\n   * `SIP.password` (config.json) / `SIP_PASSWORD` (environment variable) -- Set this to\n     the apiSecret for the Nexmo account you created.\n\n   * `SIP.requireGoogleAuth` (config.json) / `SIP_REQUIRE_GOOGLE_AUTH` (environment variable) -- See\n     [Google Authentication for Phone dial-out](#google-authentication-for-phone-dial-out)\n     for instructions on how to limit this functionality to users authenticated by their Google account.\n\n**Config.json example:**\n\n```json\n{\n    \"SIP\": {\n        \"enabled\" : true,\n        \"sipUsername\" : \"nexmoApiKey\",\n        \"sipPassword\" : \"nexmoApiSecret\",\n        \"requireGoogleAuth\": false\n    }\n}\n```\n\n**Environment variable example:**\n\n```sh\nexport SIP_ENABLED=true;\nexport SIP_USERNAME=\"nexmoApiKey\";\nexport SIP_PASSWORD=\"nexmoApiSecret\";\nexport SIP_REQUIRE_GOOGLE_AUTH=false;\n```\n\n#### Google Authentication for Phone dial-out\n\nYou can limit the ability to place outgoing calls to those authenticated by Google.\nTo enable this feature:\n\n1. Create a Google API Console Project and client ID following the steps detailed here:\n   https://developers.google.com/identity/sign-in/web/devconsole-project.\n\n2. Edit options in the config/config.json file or set environment variables:\n\n  * `Google.clientId` (config.json) / `GOOGLE_CLIENT_ID` (environment variable)  -- Set this to your client ID.\n\n  * `Google.hostedDomain` (config.json) / `GOOGLE_HOSTED_DOMAIN` (environment variable)  -- If you wish to\n    limit sign in to accounts associated with a hosted domain, set the domain here.\n\n  * `Sip.requireGoogleAuth` (config.json) / `SIP_REQUIRE_GOOGLE_AUTH` (environment variable) -- Set this to`true`\n    to require Google authentication for SIP dial-out as detailed in [Phone dial-out](#phone-dial-out).\n\n**Config.json example:**\n\n```json\n{\n    \"Google\": {\n        \"clientId\": \"yourClientId.apps.googleusercontent.com\",\n        \"hostedDomain\": \"yourhosteddomain.com\"\n    },\n    \"SIP\" : {\n        \"sipUri\" : \"sip:phoneumber@sip.nexmo.com\",\n      \"sipUsername\" : \"nexmoApiKey\",\n      \"sipPassword\" : \"nexmoApiSecret\",\n      \"requireGoogleAuth\": true\n    }\n}\n```\n\n**Environment variable example:**\n\n```sh\nexport GOOGLE_CLIENT_ID=yourClientId.apps.googleusercontent.com;\nexport GOOGLE_HOSTED_DOMAIN=yourhosteddomain.com;\nexport SIP_REQUIRE_GOOGLE_AUTH=true;\n```\n\n### Archiving\n\nTo enable and configure archiving (recording), edit options in the config/config.json file\nor set environment variables:\n\n* `Archiving.enabled` (config.json) / `ENABLE_ARCHIVING` (environment variable) -- Set this\n   to `true` to include the *Record* button in the UI, allowing the end user to record\n   a session. If you also set the `Archiving.archiveAlways` / `ARCHIVE_ALWAYS` to `true`,\n   each session is recorded automatically and the UI does not include the *Record* button.\n   The default value is `false`.\n\n* `Archiving.archiveAlways` (config.json) / `ARCHIVE_ALWAYS` (environment variable) -- Whether\n  to record all sessions automatically (without the end user having to click the *Record* button\n  (which is not displayed if this option is set to `true`). The default value is `false`.\n\n * `Archiving.pollingInitialTimeout` (config.json) / `ARCHIVE_TIMEOUT` (environment variable -- The initial\n   polling timeout (in milliseconds) for archive status change updates. Set this to 0 to disable polling.\n   The default value is 5000.\n\n* `Archiving.pollingTimeoutMultiplier` (config.json) / `TIMEOUT_MULTIPLIER`\n  (environment variable -- The timeout multiplier for archive status updates. If the first\n  archive status update polling fails, subsequent polling intervals will apply this multiplier\n  successively. Set to a lower number to poll more often. The default value is 1.5.\n\n* `Archiving.archivingManager.enabled` (config.json) / `ENABLE_ARCHIVE_MANAGER`\n  (environment variable) -- Whether the UI will include a list of archive recordings for the session.\n  The end user can click an archive to view the recording. This setting is only meaningful\n  if `Archiving.enabled` / `ENABLE_ARCHIVING` is set to `true`. The default value is `false`.\n  \n  *Note:* The OpenTokRTC app retrieves the archive recordings from the OpenTok cloud storage. However,\n  you may choose to have archives uploaded to an Amazon S3 bucket or an Azure container. If you do, you\n  will need to modify the OpenTokRTC code to obtain archive recordings from the chosen storage location.\n  For more information, see [Archive storage](https://tokbox.com/developer/guides/archiving/#storage)\n  in the OpenTok developer guides.\n\n**Config.json example:**\n\n```json\n{\n    \"Archiving\": {\n        \"enabled\": true,\n        \"archiveAlways\": true,\n        \"pollingInitialTimeout\": 10000,\n        \"pollingTimeoutMultiplier\": 1,\n        \"archiveManager\": {\n            \"enabled\": true,\n        }\n    }\n}\n```\n\n**Environment variable example:**\n\n```sh\nexport ENABLE_ARCHIVING=true;\nexport ARCHIVE_ALWAYS=true;\nexport ARCHIVE_TIMEOUT=10000;\nexport TIMEOUT_MULTIPLIER=1;\nexport ENABLE_ARCHIVE_MANAGER=true;\n```\n\n### Screen sharing\n\nTo enable and configure screen sharing, edit options in the config/config.json file\nor set environment variables:\n\n* `Screensharing.enabled` (config.json) / `ENABLE_SCREENSHARING` (environment variable) -- Whether\n  to enable screen sharing. The default value is `false`.\n\n* `Screensharing.chromeExtensionId` (config.json) / `CHROME_EXTENSION_ID`\n  (environment variable) -- The Chrome add-on extension ID for screen sharing.\n  Note: an extension is no longer required for screen sharing in Chrome 72+ and Opera 59+.\n  The browser prompts the end user for access to the screen as it would for access to the camera.\n  Use a screen-sharing extension only if you need to support older versions of Chrome and Opera.\n  The default value is `null`.\n\n* `Screensharing.annotations` (config.json) / `ENABLE_ANNOTATIONS` (environment variable) -- Whether\n  to enable annotations in screen sharing. With annotations enabled, the room toolbar includes\n  an *Annotate* button is This is only meaningful if screen sharing is enabled.  The default value\n  is `true`.\n\nTo learn more about how screen sharing works in OpenTok, see the [guide on screen\nsharing](tokbox.com/developer/guides/screen-sharing/).\n\n**Config.json example:**\n\n```json\n{\n    \"Screensharing\": {\n        \"enabled\": true,\n        \"chromeExtensionId\": \"cfhdojbkjhnklbpkdaibdccddilifddb\",\n        \"annotations\": {\n            \"enabled\": true\n        }\n    } \n}\n```\n**Environment variable example:**\n\n```sh\nexport ENABLE_SCREENSHARING=true;\nexport CHROME_EXTENSION_ID=cfhdojbkjhnklbpkdaibdccddilifddb;\nexport ENABLE_ANNOTATIONS=true;\n```\n\n### Feedback\n\nThe app lets the developer POST feedback data to an endpoint on your HTTP server. To enable\nand configure this, edit options in the config/config.json file or set environment variables:\n\n* `Feedback.url` (config.json) / `FEEDBACK_URL` (environment variable) -- The URL to send a POST\n  request with feedback data. Leave this as an empty string or undefined to disable issue reporting.\n  The default value is ''.\n\n* `Feedback.reportIssueLevel` (config.json) / `REPORT_ISSUE_LEVEL` (environment variable) -- The audio\n  and video scores in the feedback form are between 1 (awful) and 5 (excellent). When the feedback form\n  is submitted, if an audio or video score is less than or equal to the report issue level, the app calls\n  `OT.reportIssue()`. This reports an issue, which you can view in OpenTok Inspector. For more information,\n  see [Reporting an issue](https://tokbox.com/developer/guides/debugging/js/#report-issue) in the OpenTok\n  developer guides. Set this to 0 to disable issue reporting. The default value is 3.\n\n**Config.json example:**\n\n```json\n{\n    \"Feedback\": {\n        \"url\": \"https://my-app.com/feedback-endpoint/\",\n        \"reportIssueLevel\": 3\n    }\n}\n```\n\n**Environment variable example:**\n\n```sh\nexport FEEDBACK_URL=\"https://my-app.com/feedback-endpoint/\";\nexport REPORT_ISSUE_LEVEL=3;\n```\n\nInstead of posting feedback to an endpoint on your HTTP server, you can use\n[Hotjar](https://www.hotjar.com/) to collect feedback. Edit the following options\nin the config/config.json file or set environment variables:\n\n* `Feedback.hotjarId` (config.json) / `HOTJAR_ID`: (Optional, default value: null) The unique site ID\n  for the application. This helps Hotjar tracking code to collect feedback data.\n\n* `Feedback.hotjarVersion` (config.json) / `HOTJAR_VERSION`: (Optional, default value: null) Version of\n  the Tracking Code using with hjsv.\n\n* `Feedback.enableFeedback` (config.json) / `ENABLE_FEEDBACK` (environment variable) -- Set this\n  to `true` when using Hotjar for feedback.\n\n* `Feedback.reportIssueLevel` (config.json) / `REPORT_ISSUE_LEVEL` (environment variable) -- This setting\n  is ignored when using Hotjar for feedback.\n\n* `Feedback.url` (config.json) / `FEEDBACK_URL` (environment variable) -- This setting\n  is ignored when using Hotjar for feedback.\n\n**Config.json example:**\n\n ```json\n{\n      \"Feedback\": {\n          \"hotjarId\": \"your-hotjar-id\",\n          \"hotjarVersion\": \"your-hotjar-version\",\n          \"enableFeedback\": true,\n      }\n}\n```\n\n**Environment variable example:**\n\n```sh\nexport HOTJAR_ID=your-hotjar-id;\nexport HOTJAR_VERSION=your-hotjar-version;\nexport ENABLE_FEEDBACK=true;\n```\n\n### Pre-call test\n\nSet the the `TB_PRECALL_API_KEY` and `TB_PRECALL_API_SECRET` environment variables\nto the the OpenTok API key and secret to use for the test session used by\nthe precall-test. Or set these in the config.json file:\n\n**Config.json example:**\n\n```json\n{\n    \"precallTest\": {\n        \"apiKey\": \"46049502\",\n        \"apiSecret\": \"0f4a63f629cec64ebdc5552974fe2566d2eb2835\"\n    }\n}\n```\n\nThese are optional. If you do not set these, the pre-call test will use the same\nAPI key and secret that is used for the main OpenTok session used in the room.\n\nYou can disable the pre-call test by setting the `ENABLE_PRECALL_TEST`\nenvironment variable to `false`. Or you can disable it using the config file:\n\n**Config.json example:**\n\n```json\n{\n    \"precallTest\": {\n        \"enabled\": false\n    }\n}\n```\n\n### Adobe Analytics\n\nThe app lets the developer configure Adobe Analytics to track user information.\nTo configure this, edit options in the config/config.json file or set environment variables:\n\n* `adobeTracking.url` (config.json) / `ADOBE_TRACKING_URL` (environment variable) -- The URL\n  to download the custom embed code. The default value is ''.\n\n* `adobeTracking.primaryCategory` (config.json) / `ADOBE_TRACKING_PRIMARY_CATEGORY`\n  (environment variable) -- The value that will be included in Adobe Analytics\n  object field: `digitalData.page.pageInfo.primaryCategory`. The default value is ''.\n\n* `adobeTracking.siteIdentifier` (config.json) / `ADOBE_TRACKING_SITE_IDENTIFIER`\n  (environment variable) -- The value that will be included in Adobe Analytics\n  object field: `digitalData.page.pageInfo.siteIdentifier`. The default value is ''.\n\n* `adobeTracking.functionDept` (config.json) / `ADOBE_TRACKING_FUNCTION_DEPT`\n  (environment variable) -- The value that will be included in Adobe Analytics\n  object field: `digitalData.page.pageInfo.functionDept`. The default value is ''.\n\n### ICID tracking\n\nYou can set ICID query string values for the end (/thanks) page URLs with these settings:\n\n* `icid.startBuiliding` (config.json) / `START_BUILDING_ICID` (environment variable) -- The ICID\n  for the \"How to make this app better\" and \"Start building for free\" links. The default value is ''.\n\n* `icid.contactUs` (config.json) / `CONTACT_US_ICID` (environment variable) -- The ICID for\n  the \"Contact us\" link. The default value is ''.\n\n### Additional configuration options\n\n* `appName` (config.json) / `APP_NAME` (environment variable) -- The name of the application\n  displayed in the precall widget, in the top of the room page, and in the end (/thanks) page.\n  The default value is 'Vonage Video Conferencing'.\n\n* `introText` (config.json) / `INTRO_TEXT` (environment variable) -- The text displayed under\n  the application name in the precall widget. The default value is 'Welcome to Video Conferencing'.\n\n* `introFooterLinkText` (config.json) / `INTRO_FOOTER_LINK_TEXT` (environment variable) -- The text\n  for the optional link displayed under the intro text in the precall widget. If no value is\n  specified (or if it is set the an empty string), no link is displayed. The default value is ''.\n\n* `introFooterLinkUrl` (config.json) / `INTRO_FOOTER_LINK_URL` (environment variable) -- The URL\n  for the optional link displayed under the intro text in the precall widget. The default value is ''.\n\n* `helpLinkText1` (config.json) / `HELP_LINK_TEXT_1` (environment variable) -- The text\n  for the first help link displayed after \"Need help?\" at the top of the precall widget.\n  If you do not set this option, the \"Need help\" section is omitted.\n\n* `helpLinkUrl1` (config.json) / `HELP_LINK_URL_1` (environment variable) -- The URL for\n  the first help link the precall widget.\n\n* `helpLinkText2` (config.json) / `HELP_LINK_TEXT_2` (environment variable) -- The text\n  for the second help link displayed after \"Need help?\" at the top of the precall widget.\n  If you do not set this option, second help link is omitted.\n\n* `helpLinkUrl2` (config.json) / `HELP_LINK_URL_2` (environment variable) -- The URL for\n  the second help link the precall widget.\n\n* `showTos` (config.json) / `SHOW_TOS` (environment variable) -- Whether the app will display the terms of service\n  dialog box and require the user to agree to the terms before joining a room. The default value is `false`.\n\n* `meetingsRatePerMinute` (config.json) / `MEETINGS_RATE_PER_MINUTE` (environment variable) -- Determines the maximum amount of new meetings that\n  can be created in a minute. Users will be allowed to join a meeting that already exists. Otherwise a message\n  will appear telling them that the service is not available at the moment. If the value is set to any negative\n  number, rate limiting will be turned off and all meetings will be allowed. If this value is set to 0, all new\n  meetings will be rejected. The default value is -1.\n\n* `minMeetingNameLength` (config.json) / `MIN_MEETING_NAME_LENGTH` (environment variable) -- The minimum length of\n  meeting names created. The default value, 0, indicates that there is no minimum\n  length. (You can set this in the config file using the `minMeetingNameLength` setting.)\n  The default value is 0.\n\n* `allowIframing` (config.json) / `ALLOW_IFRAMING` (environment variable) -- Controls the server-side restriction on\n  allowing content to load inside an iframe. The allowed values are:\n\n  - 'always' -- Allow iframing unconditionally (note that rtcApp.js should also be changed\n     to reflect this, this option only changes what the server allows)\n\n  - 'never'  Set X-Frame-Options to 'DENY' (Deny loading content in any iframe)\n\n  - 'sameorigin': Set X-Frame-Options to 'SAMEORIGIN' (Only allow iframe content to be loaded\n    from pages in the same origin)\n\n  We don't allow restricting iframe loading to specific URIs because it doesn't work on Chrome.\n  The default value is 'never'.\n\n* `useGoogleFonts` (config.json) / `USE_GOOGLE_FONTS` (environment variable) -- Whether the client app will load\n   the Open Sans font (the main font used in the user interface) from the Google font library\n   (fonts.googleapis.com) or not. The default value is `true`.\n\n* `jqueryUrl` (config.json) / `JQUERY_URL` (environment variable) --\n  Route of the CDN that will be used to load JQuery scripts. The default value is\n  'https://ajax.googleapis.com/ajax/libs/jquery/'.\n\n* `oneTrustCookieConsentUrl` (config.json) / `ONE_TRUST_COOKIE_CONSENT_URL` (environment variable) -- Route of the OneTrust cookie consent URL.\n   Leave blank or unset to turn the feature off. This setting is unset by default.\n\n* `enableMuteAll` (config.json) / `ENABLE_MUTE_ALL` (environment variable) -- Whether to show the Mute All\n  control in the top menu of the room. (You can set this in the config file\n  using the `enableMuteAll` setting.) The default value is `true`.\n\n* `enableStopReceivingVideo` (config.json) / `ENABLE_STOP_RECEIVING_VIDEO` (environment variable) -- Whether to show\n  the Stop Receiving Video control in the top menu of the room. The default value is `true`.\n \n* `maxUsersPerRoom` (config.json) / `MAX_USERS_PER_ROOM` (environment variable) -- The maximum number\n  of users allowed in a room at the same time. Set this to 0, the default, to allow\n  any number of users. The default value is 0.\n\n* `enableRoomLocking` (config.json) / `ENABLE_ROOM_LOCKING` (environment variable) -- Whether or not\n  to include the Lock Meeting command to users in the options menu. This command allows users\n  to prevent new participants from joining a meeting. The default value is `true`.\n\n* `autoGenerateRoomName` (config.json) / `AUTO_GENERATE_ROOM_NAME` (environment variable) -- Whether or not to\n  auto-generate the room name on behalf of the user. If this setting is turned on, we will use haikunator to generate\n  room names for new rooms. If turned off, users will be prompted to enter a room/meeting name when they visit\n  the landing page and won't be allowed to move forward until they do so. The default value is `true`.\n\n* `enableEmoji` (config.json) / `ENABLE_EMOJI` (environment variable) -- Whether or not to\n  enable emoji support in the text chat widget.\n\n## Customizing the UI\n\nFor information on how to customize the OpenTokRTC UI, see [CUSTOMIZING-UI.md](CUSTOMIZING-UI.md).\n\n## Troubleshooting\n\n**\"ServerPersistence: Timeout while connecting to the Persistence Provider! Is Redis running?**\n\nEnsure Redis server is running on localhost (run `redis-server` in the command line)\nand restart OpenTokRTC.\n\n**OpenTokRTC does not work when served over HTTP.**\n\nBrowser security policies require HTTPS for WebRTC video communications. You will need to set up\nthe app to be served over HTTPS. You can set up a\n[secure reverse-proxy](https://www.nginx.com/resources/admin-guide/nginx-https-upstreams/)\nto your OpenTokRTC port using Nginx. For details, read\n[this post](https://tokbox.com/blog/the-impact-of-googles-new-chrome-security-policy-on-webrtc/).\n\n**UI looks broken**\n\nUI assets are compiled as part of the build process when installing application dependencies using `npm install`. If the web application UI still looks broken, run the following commands in the root directory of the application:\n\n```\n$ bower install\n$ npm run clientBuild\n```\n\nWe recommend that you run the application as a non-root user. However, if you are running the application as the `root` user, you will additionally need to tell `bower` to allow the root user to install dependencies, else bower will refuse to work:\n\n```\n$ bower install --allow-root\n```\n\n### Health status check\n\nThere is a health status check endpoint at /server/health. You can load this URL to check whether\nthe app is able to connect to all required external services. On success, this health check\nendpoint sends a response with the HTTP status code set to 200 and the JSON like the following:\n\n```json\n{\n  \"name\": \"opentok-rtc\",\n  \"version\": \"4.1.1\",\n  \"gitHash\": \"312903cd043d5267bc11639718c47a9b313c1663\",\n  \"opentok\": true,\n  \"googleAuth\": true,\n  \"status\": \"pass\"\n}\n```\n\nThe JSON includes the following properties:\n\n- `name` -- `\"ot-embed\"`\n\n- `version` -- The version number deployed (from package.json)\n\n- `git_hash` -- The git commit deployed\n\n- `opentok` -- Whether the OpenTok API check passed. The app uses the OpenTok Node.js SDK,\n  which connects to the OpenTok API server to create OpenTok sessions.\n\n- `googleAuth` -- Whether the Google Authentication check passed. This check is only run if the app\n  uses Google Authentication for making outbound SIP calls. (See [Google Authentication for\n  Phone dial-out](#google-authentication-for-phone-dial-out).)\n\n- `status` -- \"pass\" (if all checks pass) or \"fail\" (if any check fails)\n\nOn failure, the health status check endpoint returns a response with\nthe HTTP status code set 400 and JSON like the following:\n\n```json\n{\n  \"name\": \"opentok-rtc\",\n  \"version\": \"4.1.1\",\n  \"git_hash\": \"312903cd043d5267bc11639718c47a9b313c1663\",\n  \"opentok\": false,\n  \"error\": \"OpenTok API server timeout exceeded.\",\n  \"status\": \"fail\"\n}\n```\n\nNote that upon failure, the `status` property is set to `\"fail\"` and the `error` property\nis set to an error message. Also, the property for the failing test, such as `opentok`,\nwill be set to `false`. If a test fails, the health check will not run subsequent tests.\n\n## Development and Contributing\n\nInterested in contributing? We :heart: pull requests! See the\n[Contribution](CONTRIBUTING.md) guidelines.\n\n## Getting Help\n\nWe love to hear from you. If you have questions, comments or find a bug, let us know:\n\n* Open an issue on this repository \u003chttps://github.com/opentok/opentok-rtc/issues\u003e.\n\n* See \u003chttps://support.tokbox.com/\u003e for support options.\n\n* Tweet at us! We're [@VonageDev](https://twitter.com/VonageDev) on Twitter.\n\n* Or [join the Vonage Developer Community Slack](https://developer.nexmo.com/community/slack).\n\n## Further Reading\n\nCheck out the OpenTok documentation at \u003chttps://tokbox.com/developer/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopentok%2Fopentok-rtc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopentok%2Fopentok-rtc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopentok%2Fopentok-rtc/lists"}