Zoom Meeting SDK - Auto user joining issue

I’m using Zoom Meeting SDK and when trying to add a user to the meeting using this code :

{
JoinParam param = new JoinParam();
param.userType = SDKUserType.SDK_UT_WITHOUT_LOGIN;
JoinParam4WithoutLogin join_api_param = new JoinParam4WithoutLogin();
join_api_param.meetingNumber = (ulong)meetingId;
join_api_param.userName = “AGI”;
if (psw != “NoPSW”)
join_api_param.psw = psw;
param.withoutloginJoin = join_api_param;

 SDKError err = CZoomSDKeDotNetWrap.Instance.GetMeetingServiceWrap().Join(param);
 m_logger.Debug(err);
 if (SDKError.SDKERR_SUCCESS == err)
 {
     m_logger.Debug($"{prefix}  , Successfully AGI joined");

 }
 else//error handle
 {
     m_logger.Debug($"{prefix}  , Wasn't able joining to the meeting");
 }

In one Zoom org it’s working fine.

In another Zoom org, I do see the log “Successfully AGI joined” (By the way the meetings are with no password in this org if it is somehow related)

But a second later the IMeetingServiceEvent callback onMeetingStatusChanged is being triggered with case of Meeting ended and it’s not really ended , And my user is not joining to the meeting.

Is there any Zoom meeting setting that needs to be enable for this to happen (Joining a user into the meeting using the above code)?

Thank you in advanced .

@eladw ,

One of the possibilities I can think of would be due to external account meeting join.
Is your Meeting SDK App published?

Hi @chunsiong.zoom ,

Thanks for the quick response.

No it is not published and I also thought about that possibility .

But I don’t understand what’s the point of this kind of app to be listed in the marketplace ? Because as I understand it the end user doesn’t install it , He installs the other Zoom app which eventually uses this Meeting SDK app.

Should I change my current Zoom app which uses the Meeting SDK app to just Meeting SDK app ? Or should I just publish the Meeting SDK app as you suggested ?

@eladw ,

If your application is not published, the Meeting SDK can only start / join meeting which are within your own account.

The publishing process is for zoom to verify/approve third party use of your Meeting SDK App.

@chunsiong.zoom ,

Ok so I need to publish both of my apps.

Thank you !

@chunsiong.zoom

Hi ,

It is happening again to me but this time I try to insert the bot user into a meeting within my own account.

I mean the meeting owner is my user and also the MeetingSDK app owner is my user.

My MeetingSDK app is not published yet, Could it be the reason ?

However until not long ago it used to work with unpublished MeetingSDK app.

@eladw

If you are the owner of the meeting, and the Meeting SDK is associated with this account, you should not have an issue.

Do you have the log captured?

@chunsiong.zoom

Hi , I’ll add a code snippet from the authorization until the join meeting and the logs :

Authenticte();

    [HandleProcessCorruptedStateExceptions]
    private void Authenticte()
    {
        string prefix = "[Authenticte]";
        m_logger.Debug($"{prefix} , Try to authenticte");
        try
        {
           
            InitParam param = new InitParam();
            param.web_domain = "https://zoom.us";
            param.brand_name = "SDK";
            param.enable_log = true;
           

            SDKError err = CZoomSDKeDotNetWrap.Instance.Initialize(param);

      

            if (SDKError.SDKERR_SUCCESS == err)
            {
                m_logger.Debug($"{prefix}  , Success in initializing...");
                AuthorizeZoom();


            }
            else
            {
                m_logger.Debug(err);
                m_logger.Debug($"{prefix} , Failed to initialize");
                CZoomSDKeDotNetWrap.Instance.CleanUp();//clean up sdk
            }




        }
        catch (Exception ex)
        {
            m_logger.Error($"{prefix}  , Failed to authenticate " + ex);

        }
    }
	
	
	
	
[HandleProcessCorruptedStateExceptions]

private void AuthorizeZoom()
{
string prefix = “[AuthorizeZoom]”;
try
{
m_logger.Debug($“{prefix} , Adding onAuthenticationReturn callback”);
CZoomSDKeDotNetWrap.Instance.GetAuthServiceWrap().Add_CB_onAuthenticationReturn(onAuthenticationReturn);

       AuthContext authParam = new AuthContext();

      authParam.jwt_token = GetSignature(_sdkKey, _sdkSecret, 0); // Pass in your Meeting SDK JWT
      

       CZoomSDKeDotNetWrap.Instance.GetAuthServiceWrap().SDKAuth(authParam);

   }
   catch (Exception e)
   {
       m_logger.Error($"{prefix}  , Failed to authorize " + e);
   }

}

   public static string GetSignature(string sdkKey, string sdkSecret, int roleId)
   {
       DateTime now = DateTime.UtcNow;
       int iat = (int)(now.Subtract(new DateTime(1970, 1, 1))).TotalSeconds - 30;
       int exp = iat + 60 * 60 * 2;



       var payload = new Dictionary<string, object>()
     {
         { "appKey", sdkKey },
         { "sdkKey", sdkKey },
         { "role", roleId },
         { "iat", iat },
         { "exp", exp },
         { "tokenExp", exp },
     };
       return JWT.Encode(payload, Encoding.UTF8.GetBytes(sdkSecret), JwsAlgorithm.HS256);
   }
   
   
   
   
       public void onAuthenticationReturn(AuthResult ret)
{
    string prefix = "[onAuthenticationReturn]";
    m_logger.Debug($"{prefix} , OnAuthentication callback function " + ret.ToString());

    try
    {
        if (AuthResult.AUTHRET_SUCCESS == ret)
        {
            m_logger.Debug($"{prefix} , Joining meeting");

            RegisterCallBack();

            JoinMeeting(_meetingId, _psw);

        }
        else
        {
            m_logger.Debug($"{prefix} , Failed to authenticate...");
            // Notify the server side for removing the meeting from the static meetings list
            m_logger.Debug($"{prefix} , Notify the server to remove the meeitng from the list");
            NotifyServer();
            m_logger.Debug($"{prefix} , Finished deleting , closing process");
            if (_cancellationTokenSource != null)
            {
                _cancellationTokenSource.Cancel();
                _cancellationTokenSource.Dispose();
            }

            Environment.Exit(0);
        }

    }

    catch (Exception e)
    {
        m_logger.Error($"{prefix} , Failed on authentication callback " + e);
    }
}



   
   private void RegisterCallBack()

{
ZOOM_SDK_DOTNET_WRAP.CZoomSDKeDotNetWrap.Instance.GetMeetingServiceWrap().Add_CB_onMeetingStatusChanged(onMeetingStatusChanged);
CZoomSDKeDotNetWrap.Instance.GetMeetingServiceWrap().
GetMeetingParticipantsController().Add_CB_onUserJoin(onUserJoin);
CZoomSDKeDotNetWrap.Instance.GetMeetingServiceWrap().
GetMeetingParticipantsController().Add_CB_onUserLeft(onUserLeft);
CZoomSDKeDotNetWrap.Instance.GetMeetingServiceWrap().
GetMeetingRecordingController().Add_CB_onCloudRecordingStatus(onRecordingStatusChanged);

}

    private void JoinMeeting(long meetingId, string psw)
    {
        string prefix = "[JoinMeeting]";

        m_logger.Debug($"{prefix} , Trying to join meeitng");

        try
        {
            JoinParam param = new JoinParam();
            param.userType = SDKUserType.SDK_UT_WITHOUT_LOGIN;
            JoinParam4WithoutLogin join_api_param = new JoinParam4WithoutLogin();
            join_api_param.meetingNumber = (ulong)meetingId;
            join_api_param.userName = "PG Notetaker";
            if (psw != "NoPSW")
            {
                join_api_param.psw = psw;
            }

            else
            {
                m_logger.Debug($"{prefix} Meeting password is empty");
                join_api_param.psw = "";
            }

            m_logger.Debug($"{prefix} Param: UserType={param.userType}, MeetingNumber={join_api_param.meetingNumber}, UserName={join_api_param.userName}, Password={join_api_param.psw}");

            param.withoutloginJoin = join_api_param;


            SDKError err = CZoomSDKeDotNetWrap.Instance.GetMeetingServiceWrap().Join(param);
            m_logger.Debug(err);
            if (SDKError.SDKERR_SUCCESS == err)
            {
                m_logger.Debug($"{prefix}  , Successfully PG Notetaker joined");

            }
            else//error handle
            {
                m_logger.Debug($"{prefix}  , Wasn't able joining to the meeting");
            }
        }
        catch (Exception e)
        {
            m_logger.Error($"{prefix}  , Failed on PG Notetaker joining to meeting " + e);
        }



    }
	
	
	You can see in the log file immediately after the joining meeting log , the onMeetingStatusChanged is triggered somehow and nothing happens.

The user started the meeting is eladw@agatsoftware.com with user id : vNc3pu7WRAiAsFpPtpV8EA

The account id is : C__I_sqMQ5-Zbp36cJpkIw

Meeting SDK client id : dftSoQp6T4i77r5CTNgD_w

seems you have already enabled the log, can you check if there are log files here?

  • The SDK log files are encrypted files that end with the extension “.log”
  • Location: %appdata%/zoomsdk/logs/

@chunsiong.zoom

That’s all I can see there:

By the way, I tought it may be related to the 4 of November SDK minimum version enforcement, So I’m using now the latest version - 5.16.6

@eladw , if you were previously using 5.12, it will definitely prevent you from joining the meeting.

Are you still having the same issue on 5.16?

@chunsiong.zoom Yes the issue is still happening in the latest version as well.

It used to work until the enforcement of the minimum SDK version, So I upgraded to 5.16 and it still happening.

@eladw other than the files in the zoomcrash_150315_8040 folder, are there txt files in the logs folder?

@chunsiong.zoom

I can see no other files than the zoomcrash folder

@chunsiong.zoom Hi,

Any insights so far?

If it is possible we can schedule a meeting to try and better understand things.

@eladw , I need the log to be sure.

Nevertheless could you share

  1. if this is a bot such as a recording / note taking bot?
  2. Current version of SDK which you are using
  3. Is this application published?
  4. Is this application trying to join meetings hosted by external accounts?
  5. Is the live transcription turn on for the meeting which the SDK failed to join?

If this is bot type of SDK application, there is a possibility the prompt is preventing the SDK from joining the meeting.

Hi @chunsiong.zoom ,
Question 1 - I’m not sure I understood the question, But this bot is essentially for providing the live transcript while the host records the meeting.
Question 2 - The version is 5.16.6
Question 3 - The app is not published yet
Question 4 - No, The meeting owner is eladw@agatsoftware.com which is a member of this org id: C__I_sqMQ5-Zbp36cJpkIw, and eladw is also the Meeting SDK owner at the marketplace.
Question 5 - Where can I validate whether the live transcription is turned on?

@chunsiong.zoom
I know that the automated captions should be enabled like this :

But it still doesn’t work… And again it used to work not long ago… Don’t understand what went wrong.

@eladw there is a high chance that a prompt is blocking your bot from joining the meeting. You will need to use the meetingreminder event to accept/deny these prompts, since there is no user to click on “accept / deny”

Here’s the reference for Windows
https://marketplacefront.zoom.us/sdk/meeting/windows/class_i_meeting_reminder_event.html

@chunsiong.zoom
Thank you,
I’ll implement it for the C# wrapper and let you know whether it was the issue.