# Room (SIP) Video SDK offers the ability to call out to conference room devices using the H.323/SIP [Conference Room Connector(CRC)](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0060661). _H.323 and Session Initiation Protocol (SIP) are protocols for sending media online._ ## Prerequisites - [Video SDK Account](https://zoom.us/pricing/developer). - [Conference Room Connector Plan](https://zoom.us/billing). - **The session must exist** - there must be at least one user in the session before you can use call in or call out. ## Check whether CRC is available Use `isCRCEnabled()` on `ZoomVideoSDKCRCHelper` to see if CRC is available for this user. ```kotlin ZoomVideoSDK.getInstance().crcHelper.isCRCEnabled() ``` ```java ZoomVideoSDK.getInstance().getCRCHelper().isCRCEnabled(); ``` ## Dial out Use `callCRCDevice` to call out to a CRC device to join a session. ```kotlin ZoomVideoSDK.getInstance().crcHelper.callCRCDevice("7357@test.plcm.vc", ZoomVideoSDKCRCProtocol.ZoomVideoSDKCRC_Protocol_SIP) ``` ```java ZoomVideoSDK.getInstance().getCRCHelper().callCRCDevice("7357@test.plcm.vc", ZoomVideoSDKCRCProtocol.ZoomVideoSDKCRC_Protocol_SIP); ``` ### Cancel room device call Cancel the CRC call with `cancelCallCRCDevice` if you need to cancel the call out request before it is complete. ```kotlin ZoomVideoSDK.getInstance().crcHelper.cancelCallCRCDevice() ``` ```java ZoomVideoSDK.getInstance().getCRCHelper().cancelCallCRCDevice(); ``` ### Callback for call status Listen for CRC device call state changes with the `onCallCRCDeviceStatusChanged` callback under `ZoomVideoSDKDelegate`. States include `Busy`, `Decline`, `Failed`, `Ring`, `Success`, and `Timeout`. ```kotlin override fun onCallCRCDeviceStatusChanged(status: ZoomVideoSDKCRCCallStatus) { Log.d(TAG, "CRC call status: $status") } ``` ```java @Override public void onCallCRCDeviceStatusChanged(ZoomVideoSDKCRCCallStatus status) { Log.d(TAG, "CRC call status: " + status); } ``` ### Webhooks Use the following webhooks to get notified of the call out status. - [`session.user_room_system_callout_accepted`](/docs/api/video-sdk/events/#tag/session/POSTsession.user_phone_callout_accepted) - [`session.user_room_system_callout_failed`](/docs/api/video-sdk/events/#tag/session/POSTsession.user_room_system_callout_failed) - [`session.user_room_system_callout_missed`](/docs/api/video-sdk/events/#tag/session/POSTsession.user_phone_callout_missed) - [`session.user_room_system_callout_rejected`](/docs/api/video-sdk/events/#tag/session/POSTsession.user_phone_callout_rejected) - [`session.user_room_system_callout_ringing`](/docs/api/video-sdk/events/#tag/session/POSTsession.user_room_system_callout_ringing) ## Dial-in To dial in to a Video SDK session, append the session number to `@zoomcrc.com`, for example `{SESSION_NUMBER}.{PASSCODE}@zoomcrc.com`, and provide the passcode when prompted. You can obtain these values using an SDK function or API endpoints. ### Reserve a session to set up dial-in access To enable dial-in, you must reserve a session ID in advance using the [Create a session API](/docs/api/video-sdk/#tag/sessions/post/videosdk/sessions). This reserves the session for up to 24 hours for your specified session name. When you start and join the session with that session name during the reservation period, dial-in users will be able to access it. ### Get dial-in information Get dial-in details using either the SDK function or API endpoints. #### Using an SDK function To retrieve dial-in information with the `getSessionSIPAddress` function, the returned value will be in this format: `{SESSION_NUMBER}.{PASSCODE}@global.zoomcrc.com` For example: ```kotlin val sipAddress = ZoomVideoSDK.getInstance().crcHelper.getSessionSIPAddress() ``` ```java String sipAddress = ZoomVideoSDK.getInstance().getCRCHelper().getSessionSIPAddress(); ``` #### Using API endpoints Get dial-in information using either the [Create a session](/docs/api/video-sdk/#tag/sessions/post/videosdk/sessions) or [Get session details](/docs/api/video-sdk/#tag/sessions/get/videosdk/sessions/{sessionId}) APIs. **Sample request** ```javascript var sipDialInAddress = responseBody.session_number + "@zoomcrc.com"; var sipDialInPasscode = responseBody.session_password; ``` **Sample response** ```json { "session_id": "sfk/aOFJSJSYhGwk1hnxgw==", "session_number": 97763643886, "session_name": "My session", "session_password": "123456", "passcode": "123456", "created_at": "2022-03-25T07:29:29Z", "settings": { "auto_recording": "cloud", "global_dial_in_countries": [ //... ], "global_dial_in_numbers": [ //... ] } } ``` ## Custom welcome message You can customize the welcome message that H.323/SIP participants hear when they join a session. See [H.323/SIP Conferencing](/docs/build/account/#h323sip-conferencing) in the account settings documentation for details. ## More SIP features For the full set of SIP features, see [ZoomVideoSDKCRCHelper in the Video SDK Reference](https://marketplacefront.zoom.us/sdk/custom/android/us/zoom/sdk/ZoomVideoSDKCRCHelper.html).