Room link not started showing 404

https://apnaorganicstore.in/jitsi/jitsi-meet/

When posting here please provide a bit more context.

  • How did you install Jitsi Meet ?
  • What is your operating system and version ?

This seems to be related to web server configuration, perhaps you customized something leading to this error ?

I have used this doc https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-iframe

I have downloaded https://download.jitsi.org/jitsi-meet/src/

I just decompressed and then i have configured in config.js

see below code

config.js
/* eslint-disable no-unused-vars, no-var */

var config = {
// Connection
//

hosts: {
    // XMPP domain.
    domain: 'apnaorganicstore.in/jitsi/jitsi-meet',

    // When using authentication, domain for guest users.
    // anonymousdomain: 'guest.example.com',

    // Domain for authenticated users. Defaults to <domain>.
    // authdomain: 'jitsi-meet.example.com',

    // Jirecon recording component domain.
    // jirecon: 'jirecon.jitsi-meet.example.com',

    // Call control component (Jigasi).
    // call_control: 'callcontrol.jitsi-meet.example.com',

    // Focus component domain. Defaults to focus.<domain>.
    // focus: 'focus.jitsi-meet.example.com',

    // XMPP MUC domain. FIXME: use XEP-0030 to discover it.
    muc: 'conference.apnaorganicstore.in/jitsi/jitsi-meet/'
},

// BOSH URL. FIXME: use XEP-0156 to discover it.
bosh: '//apnaorganicstore.in/jitsi/jitsi-meet/http-bind',

// Websocket URL
// websocket: 'wss://jitsi-meet.example.com/xmpp-websocket',

// The name of client node advertised in XEP-0115 'c' stanza
clientNode: 'http://jitsi.org/jitsimeet',

// The real JID of focus participant - can be overridden here
// focusUserJid: 'focus@auth.jitsi-meet.example.com',


// Testing / experimental features.
//

testing: {
    // P2P test mode disables automatic switching to P2P when there are 2
    // participants in the conference.
    p2pTestMode: false

    // Enables the test specific features consumed by jitsi-meet-torture
    // testMode: false

    // Disables the auto-play behavior of *all* newly created video element.
    // This is useful when the client runs on a host with limited resources.
    // noAutoPlayVideo: false
},

// Disables ICE/UDP by filtering out local and remote UDP candidates in
// signalling.
// webrtcIceUdpDisable: false,

// Disables ICE/TCP by filtering out local and remote TCP candidates in
// signalling.
// webrtcIceTcpDisable: false,


// Media
//

// Audio

// Disable measuring of audio levels.
// disableAudioLevels: false,
// audioLevelsInterval: 200,

// Enabling this will run the lib-jitsi-meet no audio detection module which
// will notify the user if the current selected microphone has no audio
// input and will suggest another valid device if one is present.
enableNoAudioDetection: true,

// Enabling this will run the lib-jitsi-meet noise detection module which will
// notify the user if there is noise, other than voice, coming from the current
// selected microphone. The purpose it to let the user know that the input could
// be potentially unpleasant for other meeting participants.
enableNoisyMicDetection: true,

// Start the conference in audio only mode (no video is being received nor
// sent).
// startAudioOnly: false,

// Every participant after the Nth will start audio muted.
// startAudioMuted: 10,

// Start calls with audio muted. Unlike the option above, this one is only
// applied locally. FIXME: having these 2 options is confusing.
// startWithAudioMuted: false,

// Enabling it (with #params) will disable local audio output of remote
// participants and to enable it back a reload is needed.
// startSilent: false

// Video

// Sets the preferred resolution (height) for local video. Defaults to 720.
// resolution: 720,

// w3c spec-compliant video constraints to use for video capture. Currently
// used by browsers that return true from lib-jitsi-meet's
// util#browser#usesNewGumFlow. The constraints are independent from
// this config's resolution value. Defaults to requesting an ideal
// resolution of 720p.
// constraints: {
//     video: {
//         height: {
//             ideal: 720,
//             max: 720,
//             min: 240
//         }
//     }
// },

// Enable / disable simulcast support.
// disableSimulcast: false,

// Enable / disable layer suspension.  If enabled, endpoints whose HD
// layers are not in use will be suspended (no longer sent) until they
// are requested again.
// enableLayerSuspension: false,

// Every participant after the Nth will start video muted.
// startVideoMuted: 10,

// Start calls with video muted. Unlike the option above, this one is only
// applied locally. FIXME: having these 2 options is confusing.
// startWithVideoMuted: false,

// If set to true, prefer to use the H.264 video codec (if supported).
// Note that it's not recommended to do this because simulcast is not
// supported when  using H.264. For 1-to-1 calls this setting is enabled by
// default and can be toggled in the p2p section.
// preferH264: true,

// If set to true, disable H.264 video codec by stripping it out of the
// SDP.
// disableH264: false,

// Desktop sharing

// The ID of the jidesha extension for Chrome.
desktopSharingChromeExtId: null,

// Whether desktop sharing should be disabled on Chrome.
// desktopSharingChromeDisabled: false,

// The media sources to use when using screen sharing with the Chrome
// extension.
desktopSharingChromeSources: [ 'screen', 'window', 'tab' ],

// Required version of Chrome extension
desktopSharingChromeMinExtVersion: '0.1',

// Whether desktop sharing should be disabled on Firefox.
// desktopSharingFirefoxDisabled: false,

// Optional desktop sharing frame rate options. Default value: min:5, max:5.
// desktopSharingFrameRate: {
//     min: 5,
//     max: 5
// },

// Try to start calls with screen-sharing instead of camera video.
// startScreenSharing: false,

// Recording

// Whether to enable file recording or not.
// fileRecordingsEnabled: false,
// Enable the dropbox integration.
// dropbox: {
//     appKey: '<APP_KEY>' // Specify your app key here.
//     // A URL to redirect the user to, after authenticating
//     // by default uses:
//     // 'https://jitsi-meet.example.com/static/oauth.html'
//     redirectURI:
//          'https://jitsi-meet.example.com/subfolder/static/oauth.html'
// },
// When integrations like dropbox are enabled only that will be shown,
// by enabling fileRecordingsServiceEnabled, we show both the integrations
// and the generic recording service (its configuration and storage type
// depends on jibri configuration)
// fileRecordingsServiceEnabled: false,
// Whether to show the possibility to share file recording with other people
// (e.g. meeting participants), based on the actual implementation
// on the backend.
// fileRecordingsServiceSharingEnabled: false,

// Whether to enable live streaming or not.
// liveStreamingEnabled: false,

// Transcription (in interface_config,
// subtitles and buttons can be configured)
// transcribingEnabled: false,

// Enables automatic turning on captions when recording is started
// autoCaptionOnRecord: false,

// Misc

// Default value for the channel "last N" attribute. -1 for unlimited.
channelLastN: -1,

// Disables or enables RTX (RFC 4588) (defaults to false).
// disableRtx: false,

// Disables or enables TCC (the default is in Jicofo and set to true)
// (draft-holmer-rmcat-transport-wide-cc-extensions-01). This setting
// affects congestion control, it practically enables send-side bandwidth
// estimations.
// enableTcc: true,

// Disables or enables REMB (the default is in Jicofo and set to false)
// (draft-alvestrand-rmcat-remb-03). This setting affects congestion
// control, it practically enables recv-side bandwidth estimations. When
// both TCC and REMB are enabled, TCC takes precedence. When both are
// disabled, then bandwidth estimations are disabled.
// enableRemb: false,

// Enables ICE restart logic in LJM and displays the page reload overlay on
// ICE failure. Current disabled by default because it's causing issues with
// signaling when Octo is enabled. Also when we do an "ICE restart"(which is
// not a real ICE restart), the client maintains the TCC sequence number
// counter, but the bridge resets it. The bridge sends media packets with
// TCC sequence numbers starting from 0.
// enableIceRestart: false,

// Defines the minimum number of participants to start a call (the default
// is set in Jicofo and set to 2).
// minParticipants: 2,

// Use XEP-0215 to fetch STUN and TURN servers.
// useStunTurn: true,

// Enable IPv6 support.
// useIPv6: true,

// Enables / disables a data communication channel with the Videobridge.
// Values can be 'datachannel', 'websocket', true (treat it as
// 'datachannel'), undefined (treat it as 'datachannel') and false (don't
// open any channel).
// openBridgeChannel: true,


// UI
//

// Use display name as XMPP nickname.
// useNicks: false,

// Require users to always specify a display name.
// requireDisplayName: true,

// Whether to use a welcome page or not. In case it's false a random room
// will be joined when no room is specified.
enableWelcomePage: true,

// Enabling the close page will ignore the welcome page redirection when
// a call is hangup.
// enableClosePage: false,

// Disable hiding of remote thumbnails when in a 1-on-1 conference call.
// disable1On1Mode: false,

// Default language for the user interface.
// defaultLanguage: 'en',

// If true all users without a token will be considered guests and all users
// with token will be considered non-guests. Only guests will be allowed to
// edit their profile.
enableUserRolesBasedOnToken: false,

// Whether or not some features are checked based on token.
// enableFeaturesBasedOnToken: false,

// Enable lock room for all moderators, even when userRolesBasedOnToken is enabled and participants are guests.
// lockRoomGuestEnabled: false,

// When enabled the password used for locking a room is restricted to up to the number of digits specified
// roomPasswordNumberOfDigits: 10,
// default: roomPasswordNumberOfDigits: false,

// Message to show the users. Example: 'The service will be down for
// maintenance at 01:00 AM GMT,
// noticeMessage: '',

// Enables calendar integration, depends on googleApiApplicationClientID
// and microsoftApiApplicationClientID
// enableCalendarIntegration: false,

// When 'true', it shows an intermediate page before joining, where the user can  configure its devices.
// prejoinPageEnabled: false,

// Stats
//

// Whether to enable stats collection or not in the TraceablePeerConnection.
// This can be useful for debugging purposes (post-processing/analysis of
// the webrtc stats) as it is done in the jitsi-meet-torture bandwidth
// estimation tests.
// gatherStats: false,

// The interval at which PeerConnection.getStats() is called. Defaults to 10000
// pcStatsInterval: 10000,

// To enable sending statistics to callstats.io you must provide the
// Application ID and Secret.
// callStatsID: '',
// callStatsSecret: '',

// enables sending participants display name to callstats
// enableDisplayNameInStats: false,

// enables sending participants email if available to callstats and other analytics
// enableEmailInStats: false,

// Privacy
//

// If third party requests are disabled, no other server will be contacted.
// This means avatars will be locally generated and callstats integration
// will not function.
// disableThirdPartyRequests: false,


// Peer-To-Peer mode: used (if enabled) when there are just 2 participants.
//

p2p: {
    // Enables peer to peer mode. When enabled the system will try to
    // establish a direct connection when there are exactly 2 participants
    // in the room. If that succeeds the conference will stop sending data
    // through the JVB and use the peer to peer connection instead. When a
    // 3rd participant joins the conference will be moved back to the JVB
    // connection.
    enabled: true,

    // Use XEP-0215 to fetch STUN and TURN servers.
    // useStunTurn: true,

    // The STUN servers that will be used in the peer to peer connections
    stunServers: [

        // { urls: 'stun:jitsi-meet.example.com:4446' },
        { urls: 'stun:meet-jit-si-turnrelay.jitsi.net:443' }
    ],

    // Sets the ICE transport policy for the p2p connection. At the time
    // of this writing the list of possible values are 'all' and 'relay',
    // but that is subject to change in the future. The enum is defined in
    // the WebRTC standard:
    // https://www.w3.org/TR/webrtc/#rtcicetransportpolicy-enum.
    // If not set, the effective value is 'all'.
    // iceTransportPolicy: 'all',

    // If set to true, it will prefer to use H.264 for P2P calls (if H.264
    // is supported).
    preferH264: true

    // If set to true, disable H.264 video codec by stripping it out of the
    // SDP.
    // disableH264: false,

    // How long we're going to wait, before going back to P2P after the 3rd
    // participant has left the conference (to filter out page reload).
    // backToP2PDelay: 5
},

analytics: {
    // The Google Analytics Tracking ID:
    // googleAnalyticsTrackingId: 'your-tracking-id-UA-123456-1'

    // Matomo configuration:
    // matomoEndpoint: 'https://your-matomo-endpoint/',
    // matomoSiteID: '42',

    // The Amplitude APP Key:
    // amplitudeAPPKey: '<APP_KEY>'

    // Array of script URLs to load as lib-jitsi-meet "analytics handlers".
    // scriptURLs: [
    //      "libs/analytics-ga.min.js", // google-analytics
    //      "https://example.com/my-custom-analytics.js"
    // ],
},

// Information about the jitsi-meet instance we are connecting to, including
// the user region as seen by the server.
deploymentInfo: {
    // shard: "shard1",
    // region: "europe",
    // userRegion: "asia"
},

// Decides whether the start/stop recording audio notifications should play on record.
// disableRecordAudioNotification: false,

// Information for the chrome extension banner
// chromeExtensionBanner: {
//     // The chrome extension to be installed address
//     url: 'https://chrome.google.com/webstore/detail/jitsi-meetings/kglhbbefdnlheedjiejgomgmfplipfeb',

//     // Extensions info which allows checking if they are installed or not
//     chromeExtensionsInfo: [
//         {
//             id: 'kglhbbefdnlheedjiejgomgmfplipfeb',
//             path: 'jitsi-logo-48x48.png'
//         }
//     ]
// },

// Local Recording
//

// localRecording: {
// Enables local recording.
// Additionally, 'localrecording' (all lowercase) needs to be added to
// TOOLBAR_BUTTONS in interface_config.js for the Local Recording
// button to show up on the toolbar.
//
//     enabled: true,
//

// The recording format, can be one of 'ogg', 'flac' or 'wav'.
//     format: 'flac'
//

// },

// Options related to end-to-end (participant to participant) ping.
// e2eping: {
//   // The interval in milliseconds at which pings will be sent.
//   // Defaults to 10000, set to <= 0 to disable.
//   pingInterval: 10000,
//
//   // The interval in milliseconds at which analytics events
//   // with the measured RTT will be sent. Defaults to 60000, set
//   // to <= 0 to disable.
//   analyticsInterval: 60000,
//   },

// If set, will attempt to use the provided video input device label when
// triggering a screenshare, instead of proceeding through the normal flow
// for obtaining a desktop stream.
// NOTE: This option is experimental and is currently intended for internal
// use only.
// _desktopSharingSourceDevice: 'sample-id-or-label',

// If true, any checks to handoff to another application will be prevented
// and instead the app will continue to display in the current browser.
// disableDeepLinking: false,

// A property to disable the right click context menu for localVideo
// the menu has option to flip the locally seen video for local presentations
// disableLocalVideoFlip: false,

// Mainly privacy related settings

// Disables all invite functions from the app (share, invite, dial out...etc)
// disableInviteFunctions: true,

// Disables storing the room name to the recents list
// doNotStoreRoom: true,

// Deployment specific URLs.
// deploymentUrls: {
//    // If specified a 'Help' button will be displayed in the overflow menu with a link to the specified URL for
//    // user documentation.
//    userDocumentationURL: 'https://docs.example.com/video-meetings.html',
//    // If specified a 'Download our apps' button will be displayed in the overflow menu with a link
//    // to the specified URL for an app download page.
//    downloadAppsUrl: 'https://docs.example.com/our-apps.html'
// },

// Options related to the remote participant menu.
// remoteVideoMenu: {
//     // If set to true the 'Kick out' button will be disabled.
//     disableKick: true
// },

// If set to true all muting operations of remote participants will be disabled.
// disableRemoteMute: true,

// List of undocumented settings used in jitsi-meet
/**
 _immediateReloadThreshold
 autoRecord
 autoRecordToken
 debug
 debugAudioLevels
 deploymentInfo
 dialInConfCodeUrl
 dialInNumbersUrl
 dialOutAuthUrl
 dialOutCodesUrl
 disableRemoteControl
 displayJids
 etherpad_base
 externalConnectUrl
 firefox_fake_device
 googleApiApplicationClientID
 iAmRecorder
 iAmSipGateway
 microsoftApiApplicationClientID
 peopleSearchQueryTypes
 peopleSearchUrl
 requireDisplayName
 tokenAuthUrl
 */

// List of undocumented settings used in lib-jitsi-meet
/**
 _peerConnStatusOutOfLastNTimeout
 _peerConnStatusRtcMuteTimeout
 abTesting
 avgRtpStatsN
 callStatsConfIDNamespace
 callStatsCustomScriptUrl
 desktopSharingSources
 disableAEC
 disableAGC
 disableAP
 disableHPF
 disableNS
 enableLipSync
 enableTalkWhileMuted
 forceJVB121Ratio
 hiddenDomain
 ignoreStartMuted
 nick
 startBitrate
 */


// Allow all above example options to include a trailing comma and
// prevent fear when commenting out the last value.
makeJsonParserHappy: 'even if last key had a trailing comma'

// no configuration value should follow this line.

};

/* eslint-enable no-unused-vars, no-var */

index.html

<script>
    // IE11 and earlier can be identified via their user agent and be
    // redirected to a page that is known to have no newer js syntax.
    if (window.navigator.userAgent.match(/(MSIE|Trident)/)) {
        var roomName = encodeURIComponent(window.location.pathname);
        window.location.href = "static/recommendedBrowsers.html" + "?room=" + roomName;
    }

    window.indexLoadedTime = window.performance.now();
    console.log("(TIME) index.html loaded:\t", indexLoadedTime);
    // XXX the code below listeners for errors and displays an error message
    // in the document body when any of the required files fails to load.
    // The intention is to prevent from displaying broken page.
    var criticalFiles = [
        "config.js",
        "utils.js",
        "do_external_connect.js",
        "interface_config.js",
        "logging_config.js",
        "lib-jitsi-meet.min.js",
        "app.bundle.min.js",
        "all.css?v=4139"
    ];
    var loadErrHandler = function(e) {
        var target = e.target;
        // Error on <script> and <link>(CSS)
        // <script> will have .src and <link> .href
        var fileRef = (target.src ? target.src : target.href);
        if (("SCRIPT" === target.tagName || "LINK" === target.tagName)
            && criticalFiles.some(
                function(file) { return fileRef.indexOf(file) !== -1 })) {
            window.onload = function() {
                // The whole complex part below implements page reloads with
                // "exponential backoff". The retry attempt is passes as
                // "rCounter" query parameter
                var href = window.location.href;

                var retryMatch = href.match(/.+(\?|&)rCounter=(\d+)/);
                var retryCountStr = retryMatch ? retryMatch[2] : "0";
                var retryCount = Number.parseInt(retryCountStr);

                if (retryMatch == null) {
                    var separator = href.indexOf("?") === -1 ? "?" : "&";
                    var hashIdx = href.indexOf("#");

                    if (hashIdx === -1) {
                        href += separator + "rCounter=1";
                    } else {
                        var hashPart = href.substr(hashIdx);

                        href = href.substr(0, hashIdx)
                            + separator + "rCounter=1" + hashPart;
                    }
                } else {
                    var separator = retryMatch[1];

                    href = href.replace(
                        /(\?|&)rCounter=(\d+)/,
                        separator + "rCounter=" + (retryCount + 1));
                }

                var delay = Math.pow(2, retryCount) * 2000;
                if (isNaN(delay) || delay < 2000 || delay > 60000)
                    delay = 10000;

                var showMoreText = "show more";
                var showLessText = "show less";

                document.body.innerHTML
                    = "<div style='"
                    + "position: absolute;top: 50%;left: 50%;"
                    + "text-align: center;"
                    + "font-size: medium;"
                    + "font-weight: 400;"
                    + "transform: translate(-50%, -50%)'>"
                    + "Uh oh! We couldn't fully download everything we needed :("
                    + "<br/> "
                    + "We will try again shortly. In the mean time, check for problems with your Internet connection!"
                    + "<br/><br/> "
                    + "<div id='moreInfo' style='"
                    + "display: none;'>" + "Missing " + fileRef
                    + "<br/><br/></div>"
                    + "<a id='showMore' style='"
                    + "text-decoration: underline;"
                    + "font-size:small;"
                    + "cursor: pointer'>" + showMoreText + "</a>"
                    + "&nbsp;&nbsp;&nbsp;"
                    + "<a id ='reloadLink' style='"
                    + "text-decoration: underline;"
                    + "font-size:small;"
                    + "'>reload now</a>"
                    + "</div>";

                var reloadLink = document.getElementById('reloadLink');
                reloadLink.setAttribute('href', href);

                var showMoreElem = document.getElementById("showMore");
                showMoreElem.addEventListener('click', function () {
                        var moreInfoElem
                                = document.getElementById("moreInfo");

                        if (showMoreElem.innerHTML === showMoreText) {
                            moreInfoElem.setAttribute(
                                "style",
                                "display: block;"
                                + "color:#FF991F;"
                                + "font-size:small;"
                                + "user-select:text;");
                            showMoreElem.innerHTML = showLessText;
                        }
                        else {
                            moreInfoElem.setAttribute(
                                "style", "display: none;");
                            showMoreElem.innerHTML = showMoreText;
                        }
                    });

                window.setTimeout(
                    function () { window.location.replace(href); }, delay);

                // Call extra handler if defined.
                if (typeof postLoadErrorHandler === "function") {
                    postLoadErrorHandler(fileRef);
                }
            };
            window.removeEventListener(
                'error', loadErrHandler, true /* capture phase */);
        }
    };
    window.addEventListener(
        'error', loadErrHandler, true /* capture phase type of listener */);
</script>
<script>

Object.defineProperty(window.navigator, ‘userAgent’, {
get: function () { return ‘Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/80.0.3987.163 Chrome/80.0.3987.163 Safari/537.36’; }
});



<script>


const domain = 'apnaorganicstore.in/jitsi/jitsi-meet';

const options = {
roomName: ‘JitsiMeetAPIExample’,
width: 700,
height: 700,
parentNode: undefined,
configOverwrite: {},
interfaceConfigOverwrite: {
filmStripOnly: true
}
};
const api = new JitsiMeetExternalAPI(domain, options);

</script>
<script src="config.js?v=1"></script>
<script src="interface_config.js"></script>
<script src="logging_config.js"></script>
<script src="libs/do_external_connect.min.js?v=1"></script>
<script src="libs/lib-jitsi-meet.min.js?v=4139"></script>
<script src="libs/app.bundle.min.js?v=4139"></script>
<!--#include virtual="title.html" -->
<!--#include virtual="plugin.head.html" -->
<!--#include virtual="static/welcomePageAdditionalContent.html" -->
<!--#include virtual="static/settingsToolbarAdditionalContent.html" -->