Git Product home page Git Product logo

ringcentral-api-docs's Introduction

RingCentral Developer Guide Documentation

Build Code Samples Links

This repository is the home of the RingCentral Developer Guide: a collection of materials, and documentation to help educate developers on how to build on top of the RingCentral platform.

This repository powers the production of two key resources:

  1. RingCentral Developer Guide
  2. RingCentral Tutorials Index

Inside this Repository

RingCentral's Developer Guide is powered by Read the Docs, and makes up the bulk of this repository. To contribute to this documentation effort, start by looking at mydocs.yml which powers the generation of the table of contents and points to the specific documents located within the docs directory.

RingCentral's Tutorials index aggregates content found here, as well as content across the web. It is powered by tutorials.json.

Contributing

If you would like to contribute to the RingCentral documentation effort, fork this repository, make your desired edits and contributions, and issue a pull request accordingly.

Running the Developer Guide locally

The Developer Guide is built on top of Mkdocs, a self-contained documentation server. Writers are encouraged to install Mkdocs locally so that you can edit files and preview your changes before they are pushed to production servers.

git clone https://github.com/ringcentral/ringcentral-api-docs.git
cd ringcentral-api-docs
pip install mkdocs
pip install -r requirements.txt
mkdocs serve

Then you should be able to load http://localhost:8000 to view the documentation.

Please be aware that the local version of the Developer Guide utilizes a Mkdocs theme that mimics our main documentation site, but it is not the same -- hence some of the visual differences you may observe. When the Developer Guide is published officially, mkdocs is used to generate HTML files, and those HTML files are then loaded into a different presentation framework.

How to test and verify code samples

First, let's setup our python virtual environment within which the code checking framework will be run. We will do this from the root directory of ringcentral-api-docs. Then we will install the code checking framework within that virtual environment.

cd $GITHUB/ringcentral-api-docs
python3 -m venv .
source ./bin/activate
python3 -m pip install --upgrade pip
pip3 install mkdocs-codecheck

The code checking framework can be installed via pip (mkdocs-codecheck), or the bleeding edge version can be downloaded and installed from github.

Next, you need to install all the various libraries and other prerequisites used within the code samples for all of the languages we support.

For python code samples

pip install ringcentral
pip install python-dotenv

For PHP code samples

php composer.phar require ringcentral/ringcentral-php

For Java code samples

To test java code samples, you will need to make sure you have Java installed, and your CLASSPATH has been setup properly to point to the following jar files.

  • RingCentral Java SDK
  • Jetty Util, Server and Servlet
  • J2EE
  • Gson
  • FastJSON

STEPS to compile and run Java Sample Code using Maven (make sure maven build tool)

git clone <this repository>
cd ringcentral-api-docs/code-samples/java-samples
mvn clean compile

TODO (internal):

  1. Adjust mkdocs script for Java so it no longer relies on CLASSPATH environment variable, instead uses maven to compile, run, test Java sample code.
  2. Add JUnit Tests

For DotNet and .cs code samples

Mac and Linux users can install the dotnet-sdk package via brew:

brew install --cask dotnet-sdk

Then you will need to install the RingCentral SDK, globally:

dotnet tool install --global RingCentral.Net

Create a .env file

Create a .env file in the code-samples directory by copying and editing the provided template. This file will make reference to an app for which all permissions have been enabled. Embed that app's credentials in your .env in the appropriate fields.

cp code-samples/env-template code-samples/.env

Run the testing framework

With all necessary software installed, you can now run the script. Run the script from the root directory of ringcentral-api-docs and be sure your python virtual environment is activated.

cd $GITHUB/ringcentral-api-docs
sh ./bin/activate
mkdocs-codecheck --verbose --recurse --dotenv ./code-samples/.env ./code-samples

Tips for Styling Documentation

View our styleguide

Our styleguide serves as a reference for the various documentation syntaxes to help writers format their documentation and utilize markdown to its fullest extent. The styleguide demonstrates the following styles:

  • Fenced Code Blocks
  • Admonitions, or call outs
  • Tables
  • Syntax highlighting and line highlighting

Customizing the underlying theme and HTML

For local development, mkdocs uses a RingCentral Mkdocs Theme. If you wish to affect the underlying structure of the site you have two choices:

  • Override locally
  • Fix globally

To override locally, consult the mkdocs documentation on creating a custom theme. The process involves overriding theme files with your own custom files. This requires you understand the underlying theme structure, so consult the structure of mkdocs-ringcentral.

To make a change globally, you can also submit a pull request to mkdocs-ringcentral and the change can be propagated across all documentation projects that utilize it.

Utilizing components from Bootstrap

Our documentation is all based on the open-source CSS framework called Bootstrap. It makes available a number of commonly used UI components that can be cut and paste into our docs and be rendered faithfully.

Using the Material component library

Our documentation also makes use of the Mkdocs Material Plugin. This plugin is what renders admonitions for example.

!!! note "Phasellus posuere in sem ut cursus"
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod.

This plugin extends the markdown language new ways of encoding text in markdown, including:

There are a number of other Markdown extensions available through Material as well.

Embedding Code Samples in documentation

Inside of this repository is a code-samples directory, into which is placed all the code samples that can be found in our documentation. Each code sample stored here is a fully functional, stand-alone script that can be run directly by a developer.

Writers can then include content from a code sample using the following syntax:

{! code-samples/path/to/code-sample.js [ln:35-48] !}

The above example includes the file referenced, but only lines 35 through 48. This makes it possible to only include fragments of a code sample, while maintaining the integrity of the code sample's ability to be run as a stand-alone script.

This include functionality is provided by the mdx_include extension. Consult its documentation to learn how to use it more effectively.

ringcentral-api-docs's People

Contributors

anikitin avatar bdeanindy avatar byrnereese avatar cocraig avatar dakingkong avatar dependabot[bot] avatar dheereshagrwal avatar dibyenduroy avatar drewligman avatar eliekozah avatar embbnux avatar grokify avatar igorfry avatar kerireki avatar lautarojayat avatar leodewang avatar mikestowe avatar nerdchacha avatar pacovu avatar pbmacintyre avatar pkvenu avatar singhgupi avatar sushilmallrc avatar suyashcjoshi avatar suyashjoshi avatar swethapotluri avatar testrccti avatar tylerlong avatar vincent-cai avatar vshisterov avatar

Stargazers

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

Watchers

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

ringcentral-api-docs's Issues

Add rate limit handling best practices documentation

The best way to handle rate limiting is along the lines of the following:

Simple single-threaded use case, e.g. downloading files serially:

  • If you encounter a HTTP Response Header X-Rate-Limit-Remaining reaches 0 then wait the number of seconds defined in X-Rate-Limit-Window HTTP Response Header.
  • If you encounter a HTTP Response Status code of 429 wait the number of seconds defined in the Retry-After HTTP Response header.

If X-Rate-Limit-Remaining is working properly, your app should never encounter a 429 error, which is desirable.

Server is overloaded.

  • If you encounter a HTTP Response Header 503 wait a default amount of time and retry once. Alternately retry with exponential fallback like AWS SDK.

Allow configuration of:

  • Default retry time
  • Max number of retries

The X-Rate-Limit-* headers are discussed here:

Here is information on how SDKs handle exponential backoff:

https://docs.aws.amazon.com/general/latest/gr/api-retries.html

In addition to simple retries, each AWS SDK implements exponential backoff algorithm for better flow control. The idea behind exponential backoff is to use progressively longer waits between retries for consecutive error responses. You should implement a maximum delay interval, as well as a maximum number of retries. The maximum delay interval and maximum number of retries are not necessarily fixed values, and should be set based on the operation being performed, as well as other local factors, such as network latency.

Most exponential backoff algorithms use jitter (randomized delay) to prevent successive collisions. Because you aren't trying to avoid such collisions in these cases, you don't need to use this random number. However, if you use concurrent clients, jitter can help your requests succeed faster. For more information, see the blog post for Exponential Backoff and Jitter.

Update Call Log JavaScript example code

Regarding the JavaScript example on this page:

Please review this finding which indicates the URL for JavaScript should be updated from /account/~/extension/~/call-log to /restapi/v1.0/account/~/extension/~/call-log:

Questions on Custom Fields

Some questions regarding Custom Fields:

  1. Once created, where do these fields present themselves in the the user resources for reading, updating and deleting?
  2. What characters can be used for the displayName? Is UTF-8 supported?
  3. What is the maximum length of a custom field displayName?
  4. What are the available data types of a custom field value?
  5. What is the max length of a custom field value?
  6. How do these fields interact with Account Federation? Do all fields need to bee the same across federated accounts or not?

Please include info in the docs.

Custom fields info:

Fenced Code Blocks are rendered incorrectly on the `bootstrap-vertical-nav` branch

Problem

All fenced code blocks are not recognized by the markdown-fenced-code-tabs extension. They are displayed incorrectly as below screenshot:

image

Solution

The root cause for this issue is that the label customization was used incorrectly (tab="Request):

```http tab="Request"
POST /restapi/v1.0/account/~/extension/~/company-pager HTTP/1.1
Content-Type: application/json
Content-Length: ACTUAL_CONTENT_LENGTH_HERE

{
  "to": [{"extensionNumber": "102"}, 
         {"extensionNumber": "103"}],

  "from": {"extensionNumber": "101"},
  "text": "Hello!"
}

...

According to the documentation of markdown-fenced-code-tabs extension, to customize the tab label by passing the label to the fct_label argument. So the above code snippet should be:

```http fct_label ="Request"
POST /restapi/v1.0/account/~/extension/~/company-pager HTTP/1.1
Content-Type: application/json
Content-Length: ACTUAL_CONTENT_LENGTH_HERE

{
  "to": [{"extensionNumber": "102"}, 
         {"extensionNumber": "103"}],

  "from": {"extensionNumber": "101"},
  "text": "Hello!"
}

...

After updated the label customization:

image

Response of interactivity in Adaptive Cards not working

I followed this doc to handle interactivity in Adaptive Cards. I tried to response a message to tell the Ringcentral client need to notify user something, but nothing happened.

My code here:

res.status(200).json({
     type: 'message',
     text: 'Token not valid',
});

What I expect is this should show a toast of the text.

I want to know if this should work, or how should I do to make this feature work.

Parameter [expiresIn] value is invalid

{
  "errorCode": "InvalidParameter",
  "message": "Parameter [expiresIn] value is invalid",
  "errors": [
    {
      "errorCode": "CMN-101",
      "message": "Parameter [expiresIn] value is invalid",
      "parameterName": "expiresIn"
    }
  ],
  "parameterName": "expiresIn"
}

What about telephony/sessions event

when creating an event /account/account_id/telephony/sessions?sipData=true' shouldn't the event work for all account users? Because it turns out that the event works only for the admin, but not for other users. Is that what it's meant to be, or is it a bug?
for example:

POST /subscription
headers: content-type application/json
event-filters:
{
"/account/some_id/telephony/sessions?sipData=true"
}
deliveryMode:
{
some info...
}
from the parameters, I see that only rc_account_id plays a role, so why doesn't the event propagate to other account users?

Unknown URI scheme for new app

Previously (according to specs here ringcentral-api-docs/docs/voice/uri-scheme.md, and also in the app I wrote), you could launch a call to RC Phone app, using the uri-scheme rcmobile://call?

However, I now have the updated version of Ring Central app, that I use daily, (yes, RC Phone is still installed on my phone)

When my app tries to make a call, obviously the uri-scheme rcmobile:// launches RC Phone.

What is the uri-scheme for Ring Central the app?

Thanks

Create quick start landing page per product for all languages

Please add a landing page for all the quick starts for a product. This way we can direct people to say the SMS Quick Starts without knowing what language they prefer ahead of time.

The use case would be to respond to a question like this where we don't know the user's language preference:

https://forums.developers.ringcentral.com/questions/2/how-do-i-send-an-sms.html

For example, we have the following today:

https://developers.ringcentral.com/guide/sms/quick-start/node

But it would be nice to have the following which provides an overview and a list of languages:

https://developers.ringcentral.com/guide/sms/quick-start

[voice/supervision-api.md] Update to use JSON pretty formatting

For voice/supervision-api.md update the JSON examples to be pretty formatted using triple backticks instead of single backtick lines.

Various tools can do the formatting including the following webpage:

https://jsonformatter.curiousconcept.com/

Here's an example:

Current

{ "direction": "Outbound", "from": { "deviceId": "60727004", "extensionId": "809646016", "name": "Supervisor ABC", "phoneNumber": "101" }, "id": "party-4", "muted": false, "owner": { "accountId": "809646016", "extensionId": "809646016" }, "standAlone": false, "status": { "code": "Answered", "reason": "Supervising" }, "to": { "extensionId": "62226587016", "name": "Dibyendu Roy", "phoneNumber": "108" } }

Desired:

{
  "direction":"Outbound",
  "from":{
    "deviceId":"60727004",
    "extensionId":"809646016",
    "name":"Supervisor ABC",
    "phoneNumber":"101"
  },
  "id":"party-4",
  "muted":false,
  "owner":{
    "accountId":"809646016",
    "extensionId":"809646016"
  },
  "standAlone":false,
  "status":{
    "code":"Answered",
    "reason":"Supervising"
  },
  "to":{
    "extensionId":"62226587016",
    "name":"Dibyendu Roy",
    "phoneNumber":"108"
  }
}

Error: Failed loading extension "mdx_include".

Building the docs locally results in the following error.

$ mkdocs serve
INFO    -  Building documentation... 
WARNING -  Config value: 'site_favicon'. Warning: Unrecognised configuration name: site_favicon 
ERROR   -  Config value: 'markdown_extensions'. Error: Failed loading extension "mdx_include". 

Updating mkdocs-ringcentral did not resolve the issue:

$ pip install --upgrade mkdocs-ringcentral

mkdocs.yml Relative path issue

When running mkdocs serve, the following error is encountered:

WARNING - A relative path to 'basics/profile-update.md' is included in the 'nav' configuration, which is not found in the documentation files

Python version is unclear

The code snippet seems to use Python 2.x, is that our supported version? I ran into bug when trying to use the Python HV SMS Code snippet on python 3.x but it's not clear even in the SDK Docs which version of Python do we officially support.

Additional pre-reqs for `bootstrap-vertical-nav` branch

The instructions for the master branch need to be augmented for the bootstrap-vertical-nav branch to avoid the following errors:

$ mkdocs serve
INFO    -  Building documentation... 
WARNING -  Config value: 'site_favicon'. Warning: Unrecognised configuration name: site_favicon 
ERROR   -  Config value: 'theme'. Error: Unrecognised theme name: 'bootstrap4'. The available installed themes are: readthedocs, mkdocs 
ERROR   -  Config value: 'markdown_extensions'. Error: Failed loading extension "pymdownx.details". 
ERROR   -  Config value: 'plugins'. Error: The "git-committers" plugin is not installed 

Resolve with:

$ pip install mkdocs-bootstrap4
$ pip install mkdocs-bootstrap-tables-plugin
$ pip install mkdocs-git-committers-plugin
$ pip install pymdown-extensions

Error: Can't resolve 'crypto' in Angular 13 with Webpack 5

My type of application is Client-side web app, SPA, Javascript.

The following description, what is the problem I encountered using @ringcentral/sdk? and how I solved the problem?

Problem

I installed @ringcentral\sdk in application based on Angular 13 and Webpack 5. While building app throwing below error message and looking for help:

./node_modules/@ringcentral/sdk/lib/http/Client.js:73:22-44 - Error: Module not found: Error: Can't resolve 'querystring' in 'D:\2022-Projects\rc-sms-app\node_modules\@ringcentral\sdk\lib\http'

BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
        - add a fallback 'resolve.fallback: { "querystring": require.resolve("querystring-es3") }'
        - install 'querystring-es3'
If you don't want to include a polyfill, you can use an empty module like this:
        resolve.fallback: { "querystring": false }

./node_modules/@ringcentral/sdk/lib/platform/Platform.js:82:15-32 - Error: Module not found: Error: Can't resolve 'crypto' in 'D:\2022-Projects\rc-sms-app\node_modules\@ringcentral\sdk\lib\platform'

BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
        - add a fallback 'resolve.fallback: { "crypto": require.resolve("crypto-browserify") }'
        - install 'crypto-browserify'
If you don't want to include a polyfill, you can use an empty module like this:
        resolve.fallback: { "crypto": false }

./node_modules/@ringcentral/sdk/lib/platform/Platform.js:83:22-44 - Error: Module not found: Error: Can't resolve 'querystring' in 'D:\2022-Projects\rc-sms-app\node_modules\@ringcentral\sdk\lib\platform'

BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
        - add a fallback 'resolve.fallback: { "querystring": require.resolve("querystring-es3") }'
        - install 'querystring-es3'
If you don't want to include a polyfill, you can use an empty module like this:
        resolve.fallback: { "querystring": false }

Solution

  1. Install @angular-builders/custom-webpack as a dev dependency
npm install @angular-builders/custom-webpack -D
  1. Install necessary dependencies
npm install crypto-browserify querystring-es3 stream-browserify
  1. Create a file "custom-webpack.config.js" in the project root and add the following
module.exports = {
  resolve: {
    fallback: {
      crypto: require.resolve('crypto-browserify'),
      querystring: require.resolve('querystring-es3'),
      stream: require.resolve('stream-browserify')
    }
  }
};
  1. Update angular.json to incorporate this custom webpack config into the build process
"server": {
     "builder": "@angular-builders/custom-webpack:server",
     "options": {
          "customWebpackConfig": {
               "path": "./custom-webpack.config.js",
               "replaceDuplicatePlugins": true
          },
          ...
     },
},
  1. Update polyfill.ts for fix global is undefined
(window as any).global = { crypto: window.crypto };
  1. Done (will add stackblitz link later)

Expect

Hope this helps developers who encounter similar problems. ๐Ÿ˜ƒ

Number format for rcmobile://call

Hello,

What is the format required by rcmobile://call? Specifically, we are using the
E.164 format, is that correct? If so, I recommend adding it to the docs.

Docs can't be built / served

Try running this command mkdocs serve it's failing, thus docs can't be built locally which is a blocker for making and testing doc changes. Please resolve this bug asap.

INFO    -  Generating API index for spec: https://netstorage.ringcentral.com/dpw/api-reference/specs/rc-platform.yml
ERROR   -  Error reading page 'basics/api-index.md': can only concatenate str (not "URLError") to str 
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 1319, in do_open
    h.request(req.get_method(), req.selector, req.data, headers,
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1230, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1276, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1225, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1004, in _send_output
    self.send(msg)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 944, in send
    self.connect()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1399, in connect
    self.sock = self._context.wrap_socket(self.sock,
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 1040, in _create
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 1309, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mkdocs_ringcentral_api_index_plugin/plugin.py", line 111, in generate_page_contents
    url = urlopen( spec_url )
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 525, in open
    response = self._open(req, data)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 542, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 502, in _call_chain
    result = func(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 1362, in https_open
    return self.do_open(http.client.HTTPSConnection, req,
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 1322, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/bin/mkdocs", line 10, in <module>
    sys.exit(cli())
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1668, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mkdocs/__main__.py", line 133, in serve_command
    serve.serve(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mkdocs/commands/serve.py", line 141, in serve
    config = builder()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mkdocs/commands/serve.py", line 136, in builder
    build(config, live_server=live_server, dirty=dirty)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mkdocs/commands/build.py", line 271, in build
    _populate_page(file.page, config, files, dirty)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mkdocs/commands/build.py", line 164, in _populate_page
    page.read_source(config)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mkdocs/structure/pages.py", line 115, in read_source
    source = config['plugins'].run_event(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mkdocs/plugins.py", line 96, in run_event
    result = method(**kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mkdocs_ringcentral_api_index_plugin/plugin.py", line 141, in on_page_read_source
    contents = self.generate_page_contents()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mkdocs_ringcentral_api_index_plugin/plugin.py", line 114, in generate_page_contents
    print("ERROR   -  " + e)
TypeError: can only concatenate str (not "URLError") to str
suyash.joshi@Suyashs-MBP ringcentral-api-docs % 

Don't hard code port number 4390

4390 is for botkit only I guess.

In the doc, we should make it a variable. And tell user it should be the port number of local http service.

[voice/supervision-api.md] Ensure JSON examples parse and validate

The following example is missing an close } and does not validate. Please correct.

{ "uri": "https://platform.ringcentral.com/restapi/v1.0/account/809646016/device/60727004", "id": "60727004", "type": "SoftPhone", "sku": "DV-1", "name": "Softphone - Digital Line", "serial": "LMRC8531", "computerName": "LMRC8531", "status": "Online", "extension": { "uri": "https://platform.ringcentral.com/restapi/v1.0/account/809646016/extension/809646016", "id": 809646016, "extensionNumber": "101" }

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.