WWBN / AVideo

Create Your Own Broadcast Network With AVideo Platform Open-Source. OAVP OVP
https://avideo.tube/AVideo_OpenSource
Other
1.92k stars 974 forks source link

Jitsi meet suppose to have a invite option that allows call in by telephone. How to enable that on our Jitsi server #9526

Closed JoshWho closed 1 month ago

JoshWho commented 1 month ago

Today we’re launching a new way to quickly connect to the public telephone network and offer dial-in capabilities to your users without the need for hosting and managing the entire telephony infrastructure: JaaS components. You can give it a try today!

Are you running Jitsi Meet on a Debian instance or are you using Docker? Either way, you can opt-in for this feature and it will be automatically set up. A new JaaS account will be created for you and you’re good to… call.

If you’re running Jitsi Meet on Debian all you need to do is to answer ‘Yes’ to this question and you will have dial-in capability on your Jitsi instance.

Telephony as a service is our first Jitsi Meet component offered as a service, which allows your self-hosted Jitsi to connect to a cloud Jigasi and offer dial-in capabilities to your customers without the need of hosting and managing the entire telephony infrastructure (the Jigasi instance). Check out more details here on how to connect your self-hosted Jitsi Meet installation to the 8x8 public cloud telephone network.

concept free calling

JoshWho commented 1 month ago

Says I need to install something and gives these options

1806a950-d2fc-417e-92a7-7636cc33bdb1

Options found here linked

https://developer.8x8.com/jaas/docs/meet-components-telephony-access

This is what it looks like eabdf3de-5923-49fd-9502-0a9bd1a1bee3

9a35e595-138b-4734-877b-b63c14df64f3

ece0e155-bc07-4fb7-814b-e385a535b170

JoshWho commented 1 month ago

OMG this will change the game to have this enabled. Super excited.

JoshWho commented 1 month ago

Also can you enable the break rooms as well and every invited starts hidden? This will make it when guest call in or join vial link they start in there until we bring them to to main meeting.

08f891b0-be57-4a37-a608-f89e279e9235

JoshWho commented 1 month ago

How to use the jitsi numbers that already exist

Answer

To use existing Jitsi call-in numbers on a self-hosted Jitsi server or to integrate them into your use of Jitsi Meet, here's a general approach based on the information available:

Enable Dial-In Feature: If you're using a Docker setup for Jitsi, ensure you've set ENABLE_JAAS_COMPONENTS=1 in your .env file.

This setting is crucial for integrating telephony features which include dial-in capabilities.

For non-Docker setups (like on Debian or Ubuntu), during the installation or configuration process, you might be prompted to enable additional features or components related to JaaS (Jitsi as a Service), which includes dial-in numbers.

Answering 'Yes' to these prompts or configuring your setup to include these components will activate dial-in features. Configuration for Authentication and Authorization:

Ensure your Jitsi setup has authentication enabled (ENABLE_AUTH=1) and choose an authentication type (AUTH_TYPE) like internal, ldap, or jwt depending on your user management preference.

This step is necessary if you want to control who can start meetings that others can dial into.

Check Your Setup for Telephony Integration: If you've enabled the necessary components, your Jitsi interface should now show an option for inviting participants through a phone number.

This typically appears as a telephone icon or an "Invite" option that provides dial-in details.

Using the Dial-In Numbers: When you start a meeting, look for the invite or share options.

There should be a feature to show dial-in numbers.

These numbers are what participants can use to call into the meeting from a regular phone. Participants will dial the provided phone number, and they might need to enter a conference ID or pin, which should also be provided in your Jitsi meeting invite interface.

Ensure Proper Firewall and Port Configuration: Make sure that the necessary ports for Jitsi (like 443 for HTTPS, 10000 for WebRTC, etc., and any additional ports for telephony if specified) are open in your firewall.

This ensures external users can call in without issues.

Testing: Test the dial-in feature by initiating a call from a phone to one of the provided numbers to ensure everything is working as expected.

Remember, the exact steps might slightly differ based on updates to Jitsi or specific configurations of your self-hosted environment.

If you're encountering issues or if there's no straightforward option for enabling dial-in, it might be worth checking the latest documentation or community forums on X or Jitsi's official channels for any new guides or updates related to using or troubleshooting dial-in features.

Also, ensure your Jitsi server has a valid SSL certificate, as this is often required for features involving external communication like telephony.

JoshWho commented 1 month ago

If this is not possible in the self hosted how can we just integrate the free version of Jitsi Meet? I seen it on other apps like Delta chat. It just uses the free version and has this invite built in free.

JoshWho commented 1 month ago

I figured out a way to make a public server call check this out @DanielnetoDotCom

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Create a Meeting Room</title>
</head>
<body>
    <h1>Click to Start a Meeting room</h1>
    <button id="joinButton">Join Meeting</button>
    <script>
    document.getElementById('joinButton').addEventListener('click', function() {
        const domain = 'meet.jit.si';

        // Function to generate a random string for meeting name
        function generateRandomString(length) {
            let result = '';
            const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
            for (let i = 0; i < length; i++) {
                result += characters.charAt(Math.floor(Math.random() * characters.length));
            }
            return result;
        }

        // Generate a random room name
        const roomName = generateRandomString(10);

        // Construct the URL for the new tab
        const url = `https://${domain}/${roomName}`;

        // Open the Jitsi Meet in a new tab
        window.open(url, '_blank');
    });
    </script>
</body>
</html>

3a7a9d99-f9ac-4848-a1e5-d4faf920250e

Example script above

download

and boom

3f035e3a-8271-4e8c-bb7b-f7ec162eb97a

and when you go live just use your StreamKeyURL2 one that is both combined and it works perfect on the avideo website.

JoshWho commented 1 month ago

Made it look even better like this

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Create a JoshWho Meeting Room</title>
    <style>
        body {
            font-family: 'Arial', sans-serif;
            background: url('https://images.unsplash.com/photo-1557683311-eac922347aa1?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2015&q=80') no-repeat center center fixed;
            -webkit-background-size: cover;
            -moz-background-size: cover;
            -o-background-size: cover;
            background-size: cover;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            color: #fff;
        }

        .content {
            text-align: center;
            background: rgba(0, 0, 0, 0.5);
            padding: 2rem;
            border-radius: 10px;
        }

        h1 {
            margin-bottom: 2rem;
            text-shadow: 2px 2px 4px #000000;
        }

        #joinButton {
            padding: 15px 30px;
            font-size: 18px;
            background-color: #2ECC71;
            color: white;
            border: none;
            border-radius: 25px;
            cursor: pointer;
            transition: all 0.3s ease 0s;
            box-shadow: 0 5px 15px rgba(0,0,0,0.3);
        }

        #joinButton:hover {
            background-color: #27AE60;
            transform: translateY(-2px);
            box-shadow: 0 7px 20px rgba(0,0,0,0.4);
        }

        @keyframes pulse {
            0% { transform: scale(1); }
            50% { transform: scale(1.05); }
            100% { transform: scale(1); }
        }

        #joinButton {
            animation: pulse 2s infinite;
        }
    </style>
</head>
<body>
    <div class="content">
        <h1>Click "Join Meeting" to Start a JoshWho Meeting Room</h1>
        <button id="joinButton">Join JoshWho Meeting</button>
    </div>
    <script>
    document.getElementById('joinButton').addEventListener('click', function() {
        const domain = 'meet.jit.si';

        function generateRandomString(length) {
            let result = '';
            const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
            for (let i = 0; i < length; i++) {
                result += characters.charAt(Math.floor(Math.random() * characters.length));
            }
            return result;
        }

        // Ensure there are no spaces in the prefix or concatenated result
        const roomName = 'JoshWhoMeet-' + generateRandomString(10);
        const url = `https://${domain}/${roomName}`;
        window.open(url, '_blank');
    });
    </script>
</body>
</html>

https://www.joshwho.net/meeting.php

Create-a-JoshWho-Meeting-Room-10-21-2024_12_50_AM

85b03e80-cc74-4156-bcf1-ff6df1a48bd2

DanielnetoDotCom commented 1 month ago

Hello,

Here's the information regarding JaaS dial-in capabilities and our meeting setup:

1. Dial-in Capabilities

2. Access Control

3. Moderator Control

4. Breakout Rooms

JoshWho commented 1 month ago

Jitsi announced what use to be a paid feature for call ins, now uses there public telephony system free. They didn't update the language for this in the documents but it is what they are saying now this year for it to use the public numbers it now has free.

JoshWho commented 1 month ago

I am literally using it for free in my example https://www.joshwho.net/meeting.php fd7df52b-1625-44d8-80a6-b6fc12e9ece1

This should now also work once calls are enabled

JoshWho commented 1 month ago

says it is ready for the one we have by you on the ftj ypt domain

90fd6fbc-95f8-4f3b-b125-ee67fc32d486

Access token I am not understanding what it is asking to test this though

JoshWho commented 1 month ago

Why not just use the free jitsi for the site? This is how I have this one setup https://www.joshwho.net/meeting.php

Using code

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Create Free video conference with free guests calling by phone, or join in browser.</title>
    <!-- Basic Meta Tags -->
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="Create free video conference Allow guest to call in by phone for free, or join in browser.">
    <meta name="keywords" content="JoshWho, video conference, meeting room, free call, global numbers">
    <meta name="author" content="JoshWho">
    <meta name="rating" content="general">

    <!-- Robots Meta Tag -->
    <meta name="robots" content="index, follow">
    <meta name="revisit-after" content="1 days">

    <!-- Open Graph / Facebook -->
    <meta property="og:type" content="website">
    <meta property="og:url" content="https://joshwho.net/meeting.php">
    <meta property="og:title" content="Create Free video conference with free guests calling by phone, or join in browser.">
    <meta property="og:description" content="Create free video conference Allow guest to call in by phone for free, or join in browser.">
    <meta property="og:image" content="https://joshwho.net/meetog.jpg">

    <!-- Twitter -->
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:site" content="@JoshWhoX">
    <meta name="twitter:title" content="Create Free video conference with free guests calling by phone, or join in browser.">
    <meta name="twitter:description" content="Allow guest to call in by phone for free, or join Conf in browser.">
    <meta name="twitter:image" content="https://joshwho.net/meetog.jpg">
    <meta name="twitter:image:alt" content="Image describing a meeting room setup or video conference interface">
    <link rel="manifest" href="https://www.joshwho.net/superpwa-manifest.json">
<script>
// In service-worker.js
self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request).then((response) => {
      return response || fetch(event.request);
    })
  );
});

// Register this service worker in your main JS or HTML
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
    console.log('Service Worker registered with scope:', registration.scope);
  }).catch(function(error) {
    console.log('Service worker registration failed:', error);
  });
}
</script>

    <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9946323153137862"
         crossorigin="anonymous"></script>

    <style>
        body {
            font-family: 'Arial', sans-serif;
            background: url('meetingbg.jpg') no-repeat center center fixed;
            -webkit-background-size: cover;
            -moz-background-size: cover;
            -o-background-size: cover;
            background-size: cover;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            color: #fff;
        }

        .content {
            text-align: center;
            background: rgba(0, 0, 0, 0.5);
            padding: 2rem;
            border-radius: 10px;
        }

        h1 {
            margin-bottom: 2rem;
            text-shadow: 2px 2px 4px #000000;
        }

        #joinButton, #installApp {
            padding: 15px 30px;
            font-size: 18px;
            color: white;
            border: none;
            border-radius: 25px;
            cursor: pointer;
            transition: all 0.3s ease 0s;
            box-shadow: 0 5px 15px rgba(0,0,0,0.3);
        }

        #joinButton {
            background-color: #2ECC71;
        }

        #joinButton:hover {
            background-color: #27AE60;
            transform: translateY(-2px);
            box-shadow: 0 7px 20px rgba(0,0,0,0.4);
        }

        #installApp {
            background-color: #007bff;
            top: 10px;
            right: 10px;
            position: fixed;
            display: none;
        }

        @keyframes pulse {
            0% { transform: scale(1); }
            50% { transform: scale(1.05); }
            100% { transform: scale(1); }
        }

        #joinButton {
            animation: pulse 2s infinite;
        }

        .logo {
            max-width: 100%;
            height: auto;
            margin-bottom: 20px;
        }

        footer {
            position: fixed;
            bottom: 0;
            width: 100%;
            text-align: center;
            background-color: rgba(0, 0, 0, 0.7);
            padding: 10px 0;
        }
    </style>

<!-- Matomo -->
<script>
  var _paq = window._paq = window._paq || [];
  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="//analytics.joshwho.net/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '2']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Matomo Code -->

</head>
<body>
    <div class="content">
        <img src="https://joshwho.net/logo.png" alt="JoshWho Logo" class="logo">
        <h1>Click "Join Meeting" to start a conference</h1>
        <center><p>Create an instant live video conference room,<br> <b>Allow guest to call in by phone for free, or join in browser.</b></p></center><br>
        <button id="joinButton">Join Meeting</button>
    </div>

    <button id="installApp">Install App</button>

   <script>
var a2a_config = a2a_config || {};
a2a_config.templates = a2a_config.templates || {};
a2a_config.templates.twitter = {
    text: " ${title} ${link} by @JoshWhoX",
};
</script>
<div class="a2a_kit a2a_kit_size_32 a2a_floating_style a2a_vertical_style" style="right:0px; top:150px;">
    <a class="a2a_button_facebook"></a>
    <a class="a2a_button_twitter"></a>
    <a class="a2a_button_pinterest"></a>
    <a class="a2a_button_telegram"></a>
    <a class="a2a_dd" href="https://www.addtoany.com/share"></a>
</div>
<script async src="https://static.addtoany.com/menu/page.js"></script> 

    <script>
    document.getElementById('joinButton').addEventListener('click', function() {
        const domain = 'meet.jit.si';

        function generateRandomString(length) {
            let result = '';
            const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
            for (let i = 0; i < length; i++) {
                result += characters.charAt(Math.floor(Math.random() * characters.length));
            }
            return result;
        }

        const roomName = 'JoshWhoMeet-' + generateRandomString(10);
        const url = `https://${domain}/${roomName}`;
        window.open(url, '_blank');
    });

    let deferredPrompt;

    window.addEventListener('beforeinstallprompt', (e) => {
        e.preventDefault();
        deferredPrompt = e;
        document.getElementById('installApp').style.display = 'block';
    });

    document.getElementById('installApp').addEventListener('click', (e) => {
        document.getElementById('installApp').style.display = 'none';
        if(deferredPrompt) {
            deferredPrompt.prompt();
            deferredPrompt.userChoice.then((choiceResult) => {
                if (choiceResult.outcome === 'accepted') {
                    console.log('User accepted the A2HS prompt');
                } else {
                    console.log('User dismissed the A2HS prompt');
                }
                deferredPrompt = null;
            });
        }
    });

    window.addEventListener('appinstalled', (evt) => {
        console.log('PWA was installed');
    });
    </script>
</body>
<!-- Matomo Image Tracker-->
<img referrerpolicy="no-referrer-when-downgrade" src="https://analytics.joshwho.net/matomo.php?idsite=2&amp;rec=1" style="border:0" alt="" />
<!-- End Matomo -->

</html>
JoshWho commented 1 month ago

When I got to https://ftjmedia.ypt.me/TelephonyCall

I get this and it shows the Invite button

af13574e-4543-46bf-b860-005eb5a6736b

DanielnetoDotCom commented 1 month ago

Enabled, I hope it works without cost

image

DanielnetoDotCom commented 1 month ago

Hold on I guess the meet plugin need some updates

DanielnetoDotCom commented 1 month ago

The problem is, for security reasons you are not supposed to access the meeting thru https://ftjmedia.ypt.me/TelephonyCall

I guess the caller will direct you to this meeting, but I am not sure if it will work, you must test it

JoshWho commented 1 month ago

Looks beautiful @DanielnetoDotCom Thank you so much

JoshWho commented 1 month ago

The problem is, for security reasons you are not supposed to access the meeting thru https://ftjmedia.ypt.me/TelephonyCall

I guess the caller will direct you to this meeting, but I am not sure if it will work, you must test it

It works great

JoshWho commented 1 month ago

Just realised there is no longer a Start Live streaming option anymore. Does that need reconfigured?

ceff82a0-3efd-4a4a-b324-4be7e94dc63b

DanielnetoDotCom commented 1 month ago

Checking

DanielnetoDotCom commented 1 month ago

I will need more time to findout, maybe i will need to rebuild it.

JoshWho commented 1 month ago

I will need more time to findout, maybe i will need to rebuild it.

K no probs. Yeah I noticed the call thing was gone again. Can't wait to see it all working super excited.

JoshWho commented 1 month ago

Everything I have searched say to check Permissions: Ensure that your user account has the necessary permissions to go live. Sometimes, only certain roles can access this feature.

DanielnetoDotCom commented 1 month ago

Done, I guess it is all back now.

JoshWho commented 1 month ago

Excellent thank you so much Looks great.

DanielnetoDotCom commented 1 month ago

I am rebooting now, it may be back in 5 min

DanielnetoDotCom commented 1 month ago

Also Breakout Rooms should be working now

JoshWho commented 1 month ago

That is really awesome. Thank you.