Giter VIP home page Giter VIP logo

bigbluebutton's Introduction

laravel-bigbluebutton

BigBlueButton Server API Library for Laravel

License Latest Version on Packagist Build Status Quality Score Total Downloads Laravel Framework

Package that provides easily communicate between BigBlueButton server and laravel framework

Requirements

  • Laravel 5.5 or above.

Installation

You can install the package via composer:

composer require joisarjignesh/bigbluebutton

After install package publish config file

php artisan vendor:publish --tag=bigbluebutton-config

Usage

  • Define in config/bigbluebutton.php file
BBB_SECURITY_SALT=bbb_secret_key   
BBB_SERVER_BASE_URL=https://example.com/bigbluebutton/
  • For Specific server configuration (only for multiple server by default is optional)
'servers' => [
       'server1' => [
           'BBB_SECURITY_SALT'    => '',
           'BBB_SERVER_BASE_URL'  => '',
       ],
 ]

After Define salt and url clear old configurations

php artisan config:clear

Api

Check a url and secret working

dd(\Bigbluebutton::isConnect()); //default 
dd(\Bigbluebutton::server('server1')->isConnect()); //for specific server 
dd(bigbluebutton()->isConnect()); //using helper method 

Meeting

Create a meeting

  • You can create meeting in three ways document

1.By Passing Array

\Bigbluebutton::create([
    'meetingID' => 'tamku',
    'meetingName' => 'test meeting',
    'attendeePW' => 'attendee',
    'moderatorPW' => 'moderator'
]); 

2.By passing CreateMeetingParameters object for customize create meeting

use BigBlueButton\Parameters\CreateMeetingParameters;

$meetingParams = new CreateMeetingParameters($meetingID, $meetingName);
$meetingParams->setModeratorPW('moderatorPassword');
$meetingParams->setAttendeePW('attendeePassword');

\Bigbluebutton::create($meetingParams);

3.By passing array it will return CreateMeetingParameters object for overwrite methods

$createMeeting = \Bigbluebutton::initCreateMeeting([
    'meetingID' => 'tamku',
    'meetingName' => 'test meeting',
    'attendeePW' => 'attendee',
    'moderatorPW' => 'moderator',
]);

$createMeeting->setDuration(100); //overwrite default configuration
\Bigbluebutton::create($createMeeting);
Upload slides
  • You can upload slides within the create a meeting call. If you do this, the BigBlueButton server will immediately download and process the slides
    \Bigbluebutton::create([
        'meetingID' => 'tamku',
        'meetingName' => 'test meeting',
        'attendeePW' => 'attendee',
        'moderatorPW' => 'moderator',
        'presentation'  => [ //must be array
            ['link' => 'https://www.example.com/doc.pdf', 'fileName' => 'doc.pdf'], //first will be default and current slide in meeting
            ['link' => 'https://www.example.com/php_tutorial.pptx', 'fileName' => 'php_tutorial.pptx'],
        ],
    ]); 
End meeting callback URL
  • You can ask the BigBlueButton server to make a callback to your application when the meeting ends. Upon receiving the callback your application could, for example, change the interface for the user to hide the ‘join’ button.

    Note : End meeting callback URL will notify silently, User won't redirect to that page.

    If you want to redirect users to that page after meeting end then can use logoutURL

\Bigbluebutton::create([
   'meetingID' => 'tamku',
   'meetingName' => 'test meeting',
   'attendeePW' => 'attendee',
   'moderatorPW' => 'moderator',
   'endCallbackUrl'  => 'www.example.com/callback',
   'logoutUrl' => 'www.example.com/logout',
]); 
Recording ready callback URL
  • You can ask the BigBlueButton server to make a callback to your application when the recording for a meeting is ready for viewing. Upon receiving the callback your application could, for example, send the presenter an e-mail to notify them that their recording is ready

    Note : Recording ready callback URL will notify silently, User won't redirect to that page.
\Bigbluebutton::create([
    'meetingID' => 'tamku',
    'meetingName' => 'test meeting',
    'attendeePW' => 'attendee',
    'moderatorPW' => 'moderator',
    'bbb-recording-ready-url'  => 'https://example.com/api/v1/recording_status',
]); 

Join a meeting

  • Join meeting ( by default it will redirect into BigBlueButton Server And Join Meeting) document
use JoisarJignesh\Bigbluebutton\Facades\Bigbluebutton;

return redirect()->to(
 Bigbluebutton::join([
    'meetingID' => 'tamku',
    'userName' => 'disa',
    'password' => 'attendee' //which user role want to join set password here
 ])
);
  • Join meeting but does want to redirect into BigBlueButton server and pass other parameters
\Bigbluebutton::join([
    'meetingID' => 'tamku',
    'userName' => 'disa',
    'password' => 'attendee', //which user role want to join set password here
    'redirect' => false, //it will not redirect into bigblueserver
    'userId' =>  "54575",
    'customParameters' => [  
       'foo' => 'bar',
       'key' => 'value'
    ]
]);

Get a list of meetings

\Bigbluebutton::all(); //using facade
bigbluebutton()->all(); //using helper method 

Get meeting info

use JoisarJignesh\Bigbluebutton\Facades\Bigbluebutton;

Bigbluebutton::getMeetingInfo([
    'meetingID' => 'tamku',
    'moderatorPW' => 'moderator' //moderator password set here
]);

Is a meeting running

Bigbluebutton::isMeetingRunning([
    'meetingID' => 'tamku',
]);

Bigbluebutton::isMeetingRunning('tamku'); //second way 

Close a meeting

use JoisarJignesh\Bigbluebutton\Facades\Bigbluebutton;

Bigbluebutton::close([
    'meetingID' => 'tamku',
    'moderatorPW' => 'moderator' //moderator password set here
]);

Recording

Get recordings

\Bigbluebutton::getRecordings([
    'meetingID' => 'tamku',
    //'meetingID' => ['tamku','xyz'], //pass as array if get multiple recordings 
    //'recordID' => 'a3f1s',
    //'recordID' => ['xyz.1','pqr.1'] //pass as array note :If a recordID is specified, the meetingID is ignored.
    // 'state' => 'any' // It can be a set of states separate by commas  
]);

Publish recordings

\Bigbluebutton::publishRecordings([
   'recordID' => 'a3f1s',
    //'recordID' => ['xyz.1','pqr.1'] //pass as array if publish multiple recordings
   'state' => true //default is true  
]);

Delete recordings

\Bigbluebutton::deleteRecordings([
    //'recordID' => 'a3f1s',
    'recordID' => ['a3f1s','a4ff2'] //pass array if multiple delete recordings
]);

Update recordings

\Bigbluebutton::updateRecordings([
    //'recordID' => 'a3f1s',
    'recordID' => ['a3f1s','a4ff2'] //pass array if multiple delete recordings
]);

Hooks

Hooks create

dd(Bigbluebutton::hooksCreate([
      'callbackURL' => 'example.test', //required
      'meetingID' => 'tamku', //optional  if not set then hooks set for all meeting id
      'getRaw' => true //optional
]));

Hooks destroy

dd(Bigbluebutton::hooksDestroy([
     'hooksID' => 33
]));

dd(Bigbluebutton::hooksDestroy('53')); //second way

Other

Get api version

  • Get api version
dd(\Bigbluebutton::getApiVersion()); //return as collection 

Unofficial

Start a meeting

  • Start meeting (first check meeting is exists or not if not then create a meeting and join a meeting otherwise meeting is exists then it will directly join a meeting) (by default user join as moderator)
$url = \Bigbluebutton::start([
    'meetingID' => 'tamku',
    'meetingName' => 'test meeting name',
    'moderatorPW' => 'moderator', //moderator password set here
    'attendeePW' => 'attendee', //attendee password here
    'userName' => 'John Deo',//for join meeting 
    //'redirect' => false // only want to create and meeting and get join url then use this parameter 
]);

return redirect()->to($url);

More Information Read This wiki

For Bigbluebutton Api Testing See This ApiMate

See Bigbluebutton Official dev Api Bigbluebutton

Support

Buy Me A Coffee Donate

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

bigbluebutton's People

Contributors

anthonyvage avatar cocomdidin avatar joisarjignesh avatar mohamed-hendawy avatar nimah79 avatar sadeghpm avatar samuelwei avatar stylecibot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

bigbluebutton's Issues

Waiting room

Hi, How can we have a waiting room like as we have in Greenlight?

Webhook or callback for join meeting

Hi @joisarjignesh ,

Is there any webhook or callback(call after join meeting event) to identify who join the meeting so we can do our operation in DB.
After join the meeting,we have to know attendee detail without use of getMeetingInfo api.

error when join : String could not be parsed as XML

Hi ,

i try to connect but return false and join trigger error :

String could not be parsed as XML

.env :

BBB_SECURITY_SALT=8cd8ef52e8e101574e400365b55e11a6   
BBB_SERVER_BASE_URL=http://test-install.blindsidenetworks.com/bigbluebutton

code :

Bigbluebutton::create([
    'meetingID' => 'tamku',
    'meetingName' => 'test meeting',
    'attendeePW' => 'attendee',
    'moderatorPW' => 'moderator'
]); 
  
//join
return response()->to(
 Bigbluebutton::join([
    'meetingID' => 'tamku',
    'userName' => 'disa',
    'password' => 'attendee' //which user role want to join set password here
 ])
);

why?

BBB v2.3 support?

BBB released v2.3 a couple days ago and I wonder if this package will support it. Would be nice to have user avatars!

Error on creating new meeting

I tested my servers and connection is true
dd(\Bigbluebutton::server($server)->isConnect());

I tried all three ways but it shows the same error

Cannot redeclare BigBlueButton\Parameters\CreateMeetingParameters::setFreeJoin()

moderatorPassword is not a valid property

hi
I get an error when I try to create a new meeting
bigbluebutton()->create([ 'meetingID' => 'tamku', 'meetingName' => 'test meeting', 'attendeePW' => 'attendee', 'moderatorPW' => 'moderator', 'endCallbackUrl' => 'www.example.com/callback', 'logoutUrl' => 'www.example.com/logout', ]);

image

Make Request on different bbb servers

Hi Joisarjignesh,
first of all many thanks about this wonderful package!

Maybe you could help me or give me a suggestion, i try to get meeting info from two different servers with big blue button, but I've not found the right yet.

The first idea is to ask to server1 with a Laravel Scheduled job, and after this one, change env bbb parameters to connect to server2 and make the same things, but all this, unfourtunately not work! Do you ever try a thing like this one?

Thanks a lot!

create meeting with no microphone access

Dear all, I want to create a room which the end-user not share the microphone access and just listen.
I don't want a modal window which force end-user to select it's access. I want an access to just listen (like play a music which don't need any access and the end-user fastly join to the meeting and not wait for checking anything).
I change settings.yml in (/usr/share/meteor/bundle/programs/server/assets/app/config)

    autoJoin: true
    listenOnlyMode: false
    forceListenOnly: false
    skipCheck: true

But the modal is also coming and the user must wait for just 3-5 second. I want to create a room with api which the end-user not see any modal and join fast to the meeting.

If the moderator change it's access to a microphone or moderator from attendee, on that moment the end-user try to access the microphone.

Could you help me in this moment for joining fast like as any other music website which load in just a millisecond?
@SamuelWei

guestPolicy in create not passing to URL?

I've added the hooks to both the official bbb api and this to allow guestPolicy settings to be passed during the Create Room method.

Since it requires an update to the BBB api, should I just include the changes here for reference or make a pull request that can be merged when the API is updated? I haven't made a pull request there yet.

Thanks,
Dwayne

in Start method , "userId" does not apply.

if run START method and set userId parameter, does not apply:
you can modify 'initMeeting.php':

private function makeJoinMeetingArray($object, $parameters)
    {
        $pass['meetingID'] = $object->get('meetingID');
        $pass['password'] = $object->get('moderatorPW');
        if (isset($parameters['userName'])) {
            $pass['userName'] = $parameters['userName'];
        }
        $pass['meetingName'] = $object->get('meetingName');
        if (isset($parameters['redirect'])) {
            $pass['redirect'] = $parameters['redirect'];
        }

        return $pass;
    }

and insert this:

        if (isset($parameters['userId'])) {
            $pass['userId'] = $parameters['userId'];
        }

Could we check active tab browser?

Hi, I want to check some participants' status.
For example, I want to check which participants' browser is active and not changed during each session.

Issue when creating a conference

When creating a conference using
$url = Bigbluebutton::create([ 'meetingID' => 'sdcsiqufgssf', 'meetingName' => 'testmeeting', 'attendeePW' => 'attendee', 'moderatorPW' => 'moderator' ]);

i've this error on the bigbluebutton server: HTTP Status 500 – Internal Server Error
with this log
/var/log/bigbluebutton/bbb-web.log:2020-04-27T16:23:52.768+02:00 ERROR o.g.w.e.GrailsExceptionResolver - NumberFormatException occurred when processing request: [GET] /bigbluebutton/api/create

It's a fresh bigbluebutton server and using api-mate all is working perfectly

SSL problem

Error:
Unhandled curl error: SSL certificate problem: unable to get local issuer certificate.

how to solve this?

Can we call a function when some body go out from the room?

Dear All, How can we detect that anybody is not in the room (with hooks)? E.g. how can we get the duration of each user entrance? also some body maybe have loss internet connection. I want to call some function when anybody's connection is destroyed

guestPolicy option is ignored

guestPolicy option always sent with value ALWAYS_ACCEPT because we don't call setGuestPolicy function to override the default value.

How to generate keys?

Hello, how to generate these params in conf file, or where to get them?

BBB_SECURITY_SALT=bbb_secret_key   
BBB_SERVER_BASE_URL=https://example.com/bigbluebutton/

not working in my laravel version 6.x

 "php": "^7.2",
  "laravel/framework": "^6.2",
 "joisarjignesh/bigbluebutton": "^1.1", v1.1.8

after fresh install of this package and publish config file and insert BBB_SECURITY_SALT and BBB_SERVER_BASE_URL in the .end file i tried to test my BBB server with below code

dd(\Bigbluebutton::isConnect()); //false

but result is false,
i have another project laravel 5.5.* version and works fine with your package ( "joisarjignesh/bigbluebutton": "^1.1", ).

i dont know whats wrong here when package installed in laravel version 6.2 its not working ,

any help will be appreciated

endCallbackUrl not working

hello
endCallbackUrl not working.
When it is the session it does not forward the link created during session creation. Is there a solution to this problem

\Bigbluebutton::create([
   'meetingID' => 'tamku',
   'meetingName' => 'test meeting',
   'attendeePW' => 'attendee',
   'moderatorPW' => 'moderator',
   'endCallbackUrl'  => 'www.example.com/callback',
]); 

Setting servers

Hi! Thanks for this, it is really helpful.

I will like to know

1, If setting multiple servers will make this work as scalelite?
2, If setting 2 servers will it be able to pull recordings from the 2 servers and will not be delayed.

How can we get information of enter and exit time of each user during each meeting

Dear All, I want to have some reports which related to each session. How can we logs of enter and exit time of each user during the each meeting?
Some user join into some meeting, but their internet or any other events (like closing a browser, turning off the electricity or etc.) cause that they leave each meeting. I want to have an excellent log for this.

With Laravel, I can just log the login time and also logout time (if they came back and not closing the browser) and it is not sufficient.

Please help me in this moment.
@SamuelWei @joisarjignesh

Type Error when there are no recordings

Hi there

When there are no recordings a type error is thrown in Bbb.php on line 283. With PHP 8, the count functions does not accept null values.

This function:

public function getRecordings($recording)
{
    if (! $recording instanceof GetRecordingsParameters) {
        $recording = $this->initGetRecordings($recording);
    }

    $this->response = $this->bbb->getRecordings($recording);
    if (count($this->response->getRawXml()->recordings->recording) > 0) { // THIS
        $recordings = [];
        foreach ($this->response->getRawXml()->recordings->recording as $r) {
            $recordings[] = XmlToArray($r);
        }

        return collect($recordings);
    }

    return collect([]);
}

In the if statement a check should be added to see if $this->response->getRawXml()->recordings->recording is null.
You can probably do something like this. But I haven't actually had a possibility to test this.

if ($this->response->getRawXml()->recordings->recording && count($this->response->getRawXml()->recordings->recording) > 0) {
    $recordings = [];
    foreach ($this->response->getRawXml()->recordings->recording as $r) {
        $recordings[] = XmlToArray($r);
    }

    return collect($recordings);
}

Issue in deleting a record

when i delete a recorded meeting it changes the state of that recording to deleted,
but it is still on the server, how can i remove it completely ?

join the meeting

Hi, I deal with simple and big issue!
When I want to join to the meeting, I found the below error:

BadMethodCallException Method Illuminate\Routing\ResponseFactory::to does not exist.

my code is the same as the tutorial but it doesn't work well.

`

	return response()->to(
		 Bigbluebutton::join([
			'meetingID' => 'tamku',
			'userName' => 'disa',
			'password' => 'attendee', //which user role want to join set password here
			//'redirect' => false, //it will not redirect into bigblueservr
		 ])
	)

`

How to use bigbluebutton.properties?

I want to add this BigBlueButton properties with this package:

The BigBlueButton server will automatically remove empty meetings that were created but have never had any users after a number of minutes specified by meetingExpireIfNoUserJoinedInMinutes defined in bigbluebutton.properties.

How to pass meetingExpireIfNoUserJoinedInMinutes properties while creating a meeting in this package?

Name or other information of attendee

Dear all, I want to check who are in each meeting. I don't have any idea how can we check each person by another. Each person logged into the meeting via his/her name and I can't pass any parameter like as ssid or the other ones.
Therefore, I can't check somebody when he/she has the same name as the other

What should I do now?

avatarURL

Hi,when I use join method and set avatarURL, avatar image not shown in bbb
Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.