BigBlueButton Server API Library for Laravel

Overview

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->setModeratorPassword('moderatorPassword');
$meetingParams->setAttendeePassword('attendeePassword');

\Bigblubutton::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
[ 'foo' => 'bar', 'key' => 'value' ] ]); ">
\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
]);

Config xml

Get default config xml
\Bigbluebutton::getDefaultConfigXml(); //return as xml
//dd(XmlToArray($this->bbb->getDefaultConfigXML()->getRawXml())); //return as array 

Set config xml

0.9.0'), 'xml' => ' 0.9.0 ', //pass as string other wise pass as SimpleXmlElement object like above line 'meetingID' => 'tamku' ]); ">
\Bigbluebutton::setConfigXml([
  //'xml'       => new \SimpleXMLElement('
   
    
     
      0.9.0
     
    
   '),
  'xml'       => '
   
    
     
      0.9.0
     
    
   ', 
   //pass as string other wise pass as SimpleXmlElement object like above line
  'meetingID' => 'tamku'
]);

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',
    '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.

Comments
  • How can we set each BBB secret info for each room?

    How can we set each BBB secret info for each room?

    Hi everybody, I want to send each room (meeting) to specific BBB server. Could you help me to integrate and extend @joisarjignesh 's library for this improvement?

    enhancement 
    opened by cod3r0k 11
  • BadFunctionCallException customParameter is not a valid property

    BadFunctionCallException customParameter is not a valid property

    On v2.3.0

    Whenever I tried joining a meeting, I am getting the error below.

    BadFunctionCallException customParameter is not a valid property

    Find Screenshots below

    image

    image

    opened by SamjiDiamond 9
  • Could we check active tab browser?

    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.

    help wanted 
    opened by cod3r0k 6
  • moderatorPassword is not a valid property

    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

    opened by abolfazlnorzad 5
  • Update meta data of recording

    Update meta data of recording

    Dear All, How can we have update recording ? https://docs.bigbluebutton.org/dev/api.html#updaterecordings

    With this function, we can update our meta data of recordings

    opened by cod3r0k 5
  • Issue when creating a conference

    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

    opened by labomatik 5
  • Do we have any meeting statistics (Blindside) for recorded session?

    Do we have any meeting statistics (Blindside) for recorded session?

    I found a news which related to the founder's of BBB. https://blindsidenetworks.com/2018/02/20/statistics-report/

    They said that we can have statistics of each session in the recording files. Do we have this in this library? Do you have any related solution and idea?

    opened by cod3r0k 4
  • How can we get information of enter and exit time of each user during each meeting

    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

    opened by cod3r0k 4
  • The meeting ID that you supplied did not match any existing meetings

    The meeting ID that you supplied did not match any existing meetings

    Hi all, When I want to join into one meeting, it showed me the below message The meeting ID that you supplied did not match any existing meetings

    What's goes on? I create a meeting and then join to it...?

    opened by cod3r0k 4
  • Can we call a function when some body go out from the room?

    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

    opened by cod3r0k 4
  • Recording size

    Recording size

    Dear @joisarjignesh , Can we calculate the size of each recording record id? The API get me some information but there is not any further information in documentation. Do we need to use https://github.com/elsonwu/bbb-record-size ?

    opened by cod3r0k 3
Releases(v2.3.0)
Owner
Jignesh
life is about more than just surviving
Jignesh
Laravel API wrapper to interact fluently with your Janus Media Server

Laravel API wrapper to interact fluently with your Janus Media Server. Core server interactions, as well as the video room plugin included.

Richard  Tippin 11 Aug 21, 2022
JSON-RPC 2.0 API server for @Laravel framework

Sajya is an open-source project aiming to implement the JSON-RPC 2.0 server specification for the Laravel quickly.

Sajya 179 Dec 29, 2022
PHP library for sending messages using a ntfy server.

ntfy-php-library PHP library for sending messages using a ntfy server. Supports ntfy server version 1.27.2. Install composer require verifiedjoseph/nt

Joseph 6 Dec 14, 2022
This is a plugin written in the PHP programming language and running on the PocketMine platform that works stably on the API 3.25.0 platform. It helps to liven up your server with Tags!

General This is a plugin written in the PHP programming language and running on the PocketMine platform that works stably on the API 3.25.0 platform.

Thành Nhân 4 Oct 21, 2021
A Laravel Wrapper for the CoinDCX API. Now easily connect and consume the CoinDCX Public API in your Laravel apps without any hassle.

This package provides a Laravel Wrapper for the CoinDCX API and allows you to easily communicate with it. Important Note This package is in early deve

Moinuddin S. Khaja 2 Feb 16, 2022
The fastest way to make a powerful JSON:API compatible Rest API with Laravel.

The first fully customizable Laravel JSON:API builder. "CRUD" and protect your resources with 0 (zero) extra line of code. Installation You can instal

BinarCode 288 Aug 8, 2022
Learning Websocket by creating Custom Websocket-server package provided by Laravel

Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling.

Chisty Md.Muzammel Hossain 3 Oct 25, 2022
Add Server-Timing header information from within your Laravel apps.

Laravel Server Timings Add Server-Timing header information from within your Laravel apps. Installation You can install the package via composer: comp

Beyond Code 498 Dec 15, 2022
This package enables you to create and run a fully functioning WebSocket server in your Laravel app.

This package enables you to create and run a fully functioning WebSocket server in your Laravel app. It can optionally receive messages broadcast over ZeroMQ.

Asked.io 181 Oct 6, 2022
Server-side handler of DataTables Jquery Plugin for Laravel 4

Project is not being maintained actively. You will most likely find a better more actively maintained fork here https://github.com/yajra/laravel-datat

Bilal Gultekin 264 Jul 2, 2022
This is a laravel 4 package for the server and client side of datatables at http://datatables.net/

Datatable Important This package will not receive any new updates! You can still use this package, but be preparared that there is no active developme

Nils Plaschke 388 Dec 30, 2022
Laravel package to periodically monitor the health of your server and application.

Laravel package to periodically monitor the health of your server and application. It ships with common checks out of the box and allows you to add your own custom checks too. The packages comes with both console and web interfaces.

Sarfraz Ahmed 170 Dec 13, 2022
Easy Laravel Server-Side implementation of PrimeVue Datatables

Laravel + PrimeVue Datatables This is a simple, clean and fluent serve-side implementation of PrimeVue Datatables in Laravel. Features Global Search i

Savannabits 11 Dec 29, 2022
Laravel Custom Response Messages from Passport Oauth2 Server

This is a sample repository showing how to install Oauth2 server using Laravel's passport package and customize its responses.

M. Ismail 7 Nov 22, 2022
Lavacharts is a graphing / charting library for PHP 5.4+ that wraps Google's Javascript Chart API.

Lavacharts 3.1.12 Lavacharts is a graphing / chart library for PHP5.4+ that wraps the Google Chart API. Stable: Dev: Developer Note Please don't be di

Kevin Hill 616 Dec 17, 2022
This is a courier api endpoints library for interacting such as e-courier, dhl, pathao etc

This is a courier api endpoints library for interacting such as e-courier, dhl, pathao etc Installation Step 1: composer require xenon/multicourier S

Ariful Islam 19 Sep 8, 2022
Lumen rest api demo with Dingo/Api, JWT, CORS, PHPUNIT

lumen-api-demo 这是一个比较完整用 lumen 5.7 写的的 REST API 例子。使用了 dingo/api ,jwt 实现登录,功能上很简单,登录,注册,发帖,评论,单元测试(正在补充)。 lumen5.x 请看对应的分支 有需要随时联系我 lumen/laravel/rest

Yu Li 859 Oct 25, 2022
Boilerplate code for protecting a form with proof of work. Uses javascript in the browser to generate the hashcash and PHP on the server to generate the puzzle and validate the proof of work.

Boilerplate code for protecting a form with proof of work. Uses javascript in the browser to generate the hashcash and PHP on the server to generate the puzzle and validate the proof of work.

Jameson Lopp 28 Dec 19, 2022
UnifiedPush provider for Nextcloud - server application

NextPush - Server App UnifiedPush provider for Nextcloud - server application This is still a WIP version Requirement It require the nextcloud server

NextPush 38 Jan 5, 2023