Unable to join meeting errorCode: 4003

I am unable to join the meeting, and I have no idea what I am doing wrong. The JWT token is correct, and the meeting is able to start on one website. However, on another website where everything is the same, I am still encountering this error when i join the meeting. Also this error was not there few days ago when i was testing in localhost. Do I need to publish my app maybe? or I should be able to join without publishing

{type: 'JOIN_MEETING_FAILED', reason: 'Invalid Parameter', errorCode: 4003}
errorCode
: 
4003
reason
: 
"Invalid Parameter"
type
: 
"JOIN_MEETING_FAILED"
[[Prototype]]
: 
Object

I am using my zoom app version is 2.17.0
here is jwt token

[REDACTED]

[REDACTED IMAGE]

and here is the implementation

 const client = ZoomMtgEmbedded.createClient();
    
    

    
     var authEndpoint = `${process.env.REACT_APP_BASE_URL}/api/v1/zoom/authEndpoint`
     var sdkKey = `${process.env.ZOOM_MEETING_SDK_KEY}`
    //  var meetingNumber = zoomData.id
    //  var passWord = zoomData.password
     var role = 0
     var userName = ''
     var userEmail = ''
     var registrantToken = ''  
     var zakToken = ''
    
     function getSignature(zoomData) {
      
    
      fetch(authEndpoint, {
       method: 'POST',
       headers: { 'Content-Type': 'application/json' },
       body: JSON.stringify({
        meetingNumber: zoomData.id,
        role: role
       })
      }).then(res => res.json())
      .then(response => {
       startMeeting(response.Data, zoomData)
       console.log(response,"aaaaaaaaaa")
      }).catch(error => {
       console.error(error,"AAAAAA")
      })
     }
    
     function startMeeting(signature, zoomData) {
    
      let meetingSDKElement = document.getElementById('meetingSDKElement');
    
      client.init({
       debug: true,
       zoomAppRoot: meetingSDKElement,
       language: 'en-US',
       customize: {
        meetingInfo: ['topic', 'host', 'mn', 'pwd', 'telPwd', 'invite', 'participant', 'dc', 'enctype'],
        toolbar: {
         buttons: [
          {
           text: 'Custom Button',
           className: 'CustomButton',
           onClick: () => {
            console.log('custom button');
           }
          }
         ]
        }
       }
      });
    
      client.join({
       signature: signature,
       sdkKey: sdkKey,
       meetingNumber: zoomData.id,
       password: zoomData.password,
       userName: userName,
       userEmail: userEmail,
       tk: registrantToken,
       zak: zakToken
      })

and here I am showing my video

 const client = ZoomMtgEmbedded.createClient();
    
    

    
     var authEndpoint = `${process.env.REACT_APP_BASE_URL}/api/v1/zoom/authEndpoint`
     var sdkKey = `${process.env.ZOOM_MEETING_SDK_KEY}`
    //  var meetingNumber = zoomData.id
    //  var passWord = zoomData.password
     var role = 0
     var userName = ''
     var userEmail = ''
     var registrantToken = ''  
     var zakToken = ''
    
     function getSignature(zoomData) {
      
    
      fetch(authEndpoint, {
       method: 'POST',
       headers: { 'Content-Type': 'application/json' },
       body: JSON.stringify({
        meetingNumber: zoomData.id,
        role: role
       })
      }).then(res => res.json())
      .then(response => {
       startMeeting(response.Data, zoomData)
       console.log(response,"aaaaaaaaaa")
      }).catch(error => {
       console.error(error,"AAAAAA")
      })
     }
    
     function startMeeting(signature, zoomData) {
    
      let meetingSDKElement = document.getElementById('meetingSDKElement');
    
      client.init({
       debug: true,
       zoomAppRoot: meetingSDKElement,
       language: 'en-US',
       customize: {
        meetingInfo: ['topic', 'host', 'mn', 'pwd', 'telPwd', 'invite', 'participant', 'dc', 'enctype'],
        toolbar: {
         buttons: [
          {
           text: 'Custom Button',
           className: 'CustomButton',
           onClick: () => {
            console.log('custom button');
           }
          }
         ]
        }
       }
      });
    
      client.join({
       signature: signature,
       sdkKey: sdkKey,
       meetingNumber: zoomData.id,
       password: zoomData.password,
       userName: userName,
       userEmail: userEmail,
       tk: registrantToken,
       zak: zakToken
      })

@ashishdwivediw,

You should be able to join without publishing. Are you joining the meeting via a meeting bot? Can you share what version of the SDK you using on both sites?

@zoomus/websdk”: “^2.17.0”, this is version

@donte.zoom Did you find the issue

@ashishdwivediw ,
I haven’t been able to reproduce the behavior on my end. As a test, have you tried manually including the JWT token? I recommend generating and testing the token on the working site first, then generate another token to test on the other site. This will help you isolate the issue. Here is a helpful guide on troubleshooting signature validation:

jwt token is correct

@ashishdwivediw ,

Thanks for the update! To help us better understand the situation and isolate the problem, could you please share in detail what steps you’ve taken during your testing process? Additionally, it would be extremely helpful if you could also provide information on what worked and what didn’t. This wil help isloate where the problem may be.

So, the host can initiate the meeting using the ZoomMtgEmbedded (version 2.17.0) on the live server. However, when attempting to join the meeting with the same web SDK version (2.17.0), it fails to connect on both the live server and localhost.

I am getting invalid parameter error 4003
{type: 'JOIN_MEETING_FAILED', reason: 'Invalid Parameter', errorCode: 4003}

One observation is that when I attempt to join without the meeting being started, the client-side web SDK correctly detects that the meeting has not begun. However, upon starting the meeting and attempting to join, an error is encountered.

here is the jwt for you
[REDACTED]

So the host can initiate the meeting, but the meeting never starts on the Live Server and on the local host. Is that correct ?

To clarify, are you stating that you started the meeting successfully, but participants can’t join on the Live Server or on the local host?

I see that the role is set to 0, are you trying to Join the meeting as a participant ?

@donte.zoom

Host is able to start the meeting but on the client side upon starting the meeting I am getting the error.

Yes.

Yes you are correct. Upon reading jwt token my “exp”: 1700122905, and “tokenExp”: 1700122905 are same, I think this is the problem. Do you agree? If yes. then can help fix this! Or I am missing something else.

@ashishdwivediw , Here is what my token looks like:

You can also check this guide for more troubleshooting steps:

Here is the Python Script I used to generate the JWT for reference as well :slight_smile:

key= "YOUR SDK KEY HERE"
secret= "YOUR SDK SECRET HERE"

iat = float(int(time.time()))
exp = float((datetime.datetime.today() + datetime.timedelta(days=2)).strftime("%s"))
tokenExp = float((datetime.datetime.today() + datetime.timedelta(hours=10)).strftime("%s"))

mn= "MEETING NUMBER"
role= "0"

# Payload with role and meeting number properties
payload = {
   'appKey': key,
    'iat': iat,
    'exp': exp,
    'tokenExp': tokenExp,
    'mn': mn,
    'role': role,
  }

encoded = jwt.encode(payload, secret, algorithm='HS256')
print(encoded)

You can also use this Zoom Meeting SDK Auth Endpoint sample:

@donte.zoom Based on your example I generated this token

Could you please verify if this is correct as I am following the troubleshooting guide that you provided. Still I am getting invalid parameter error.

here is how I am generating the exp and tokenExp

var iat = Math.floor(new Date().getTime() / 1000);
        var tokenExp = iat + 4800;
        var exp = iat + 7200 

Also, when I hover over tokenExp, I don’t get a date in the tooltip. Is it the same for you?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.