I am trying to use the API to update a zoom phone user’s extension.
In this API Zoom Phone API | Zoom Developer Docs
Under Users → Update user’s profile → extension_number
When I try to update the extension it gives an error code back of 200. The response message is blank and the value does not get updated.
I also tried updating other fields in the user profile and they will not update either. I can not get it to return any other response code other then 200.
Can anyone see if you can duplicate this issue on your side?
I am using Python 3 and pyjwt request.
This is my code:
def changeExtension(email, extension):
id = getUserID(email)
if id:
settings = {‘extension_number’: extension}
url = ‘https://api.zoom.us/v2/phones/users/’ + id
r = requests.patch(url, headers=API_HEADERS, data=json.dumps(settings))
Thanks!
Hi @dupination
I just tried out the API endpoint and was able to make the change.
Here is my question to you:
-
Does it work when you try making the operation from Postman?
-
If No, then What token are you using to make the API call (JWT / OAuth), sometimes JWT token dosen’t work right with Zoom Phone APIs?
Here is a sample request that worked for me:
import requests
import json
url = "https://api.zoom.us/v2/phone/users/userID"
payload = json.dumps({
"extension_number": "981"
})
headers = {
'Authorization': 'Bearer Token',
'Content-Type': 'application/json'
}
response = requests.request("PATCH", url, headers=headers, data=payload)
print(response.text)
Hey @ojus.zoom
Thanks for taking a look and the code snip.
To answer your questions:
- No
- I am using JWT.
Our use case for using the API is to maintain and provision our users for Zoom Phone migration. After reading the OAuth documentation, I don’t believe it fits our needs since we just need system access.
Are you able to try using a JWT token to modify the extension of a user?
Here is my code:
#!/usr/bin/env python3
# provision_zoom_phone_users.py
# API
# Zoom: https://marketplace.zoom.us/docs/api-reference/phone/methods
import math
from textwrap import indent
from unittest.mock import patch
from wsgiref.util import setup_testing_defaults
from requests import get
import jwt
import requests
import json
import urllib3
from time import time
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# TEST API key and API secret
API_KEY = 'YOUR_KEY'
API_SEC = 'YOUR_SEC'
# GLOBALS
LIMIT = 300
NEXT_TOKEN = ''
#############################################
def main_request(baseurl, parm_name1, parm_value1, parm_name2, parm_value2):
parameters = {
parm_name1: parm_value1,
parm_name2: parm_value2
}
data = requests.get(baseurl, headers=API_HEADERS, params=parameters, verify=False).json()
global NEXT_TOKEN
NEXT_TOKEN = data['next_page_token']
return data
def parse_json(response, field_name, dict_name):
datalist = []
for item in response[dict_name]:
if field_name in item:
item_list = {
'id': item['id'],
field_name: item[field_name]
}
datalist.append(item_list)
return datalist
def get_pages(response):
return math.ceil(response['total_records']/LIMIT)
def getZoomToken():
# Generate a token
# using the pyjwt library
token = jwt.encode({'iss': API_KEY, 'exp': time() + 5000},API_SEC,algorithm='HS256')
headers = {'authorization': 'Bearer %s' % token,'content-type': 'application/json'}
return headers
def getAllIDs(url, field, dict_name):
parsed_data = []
global NEXT_TOKEN
# First call to get page numbers then reset page token
NEXT_TOKEN = ''
data = main_request(url, '', '', 'next_page_token', NEXT_TOKEN)
NEXT_TOKEN = ''
for x in range(1,get_pages(data)+1):
parsed_data.extend(
parse_json(
main_request(url, '', '', 'next_page_token', NEXT_TOKEN),
field,
dict_name
))
return parsed_data
#############################################
def getAllUserIDs():
return getAllIDs("https://api.zoom.us/v2/users?page_size="+str(LIMIT), 'email', 'users')
def getUserID(email):
for i in USER_IDS:
if i['email'] == email:
return i['id']
def changeExtension(email, extension):
id = getUserID(email)
if id:
settings = {'extension_number': extension}
API_PATCH_URL = 'https://api.zoom.us/v2/phones/users/' + id
r = requests.post(API_PATCH_URL, headers=API_HEADERS, data=json.dumps(settings))
print(r.status_code)
print(r.text)
API_HEADERS = getZoomToken()
USER_IDS = getAllUserIDs()
changeExtension("YOUR_EMAIL", '96666')
Thanks in advance!
Ryan