• You MUST read the Babiato Rules before making your first post otherwise you may get permanent warning points or a permanent Ban.

    Our resources on Babiato Forum are CLEAN and SAFE. So you can use them for development and testing purposes. If your are on Windows and have an antivirus that alerts you about a possible infection: Know it's a false positive because all scripts are double checked by our experts. We advise you to add Babiato to trusted sites/sources or disable your antivirus momentarily while downloading a resource. "Enjoy your presence on Babiato"

Wa Gateway | Multi device BETA | MPWA MD

Wa Gateway | Multi device BETA | MPWA MD v6.5.0 Nulled

No permission to download
/routes/web.php

"
<?php


use App\Http\Controllers\Admin\ManageUsersController;
use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\Auth\LogoutController;
use App\Http\Controllers\AutoreplyController;
use App\Http\Controllers\BlastController;
use App\Http\Controllers\CampaignController;
use App\Http\Controllers\ContactController;
use App\Http\Controllers\FileManagerController;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\MessagesController;
use App\Http\Controllers\MessagesHistoryController;
use App\Http\Controllers\RegisterController;
use App\Http\Controllers\RestapiController;
use App\Http\Controllers\ScanController;
use App\Http\Controllers\SettingController;
use App\Http\Controllers\ShowMessageController;
use App\Http\Controllers\TagController;
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Redirect;


require_once 'custom-route.php';

Route::group(['prefix' => 'laravel-filemanager', 'middleware' => ['web', 'auth']], function () {

\UniSharp\LaravelFilemanager\Lfm::routes();

});
Route::get('/', function()
{
return Redirect::to( '/login');
// OR: return Redirect::intended('/bands'); // if using authentication
});
Route::middleware('auth')->group(function (){

Route::get('/home',[HomeController::class,'index'])->name('home');
Route::get('/file-manager',[FileManagerController::class,'index'])->name('file-manager');
Route::post('/home/setSessionSelectedDevice',[HomeController::class,'setSelectedDeviceSession'])->name('home.setSessionSelectedDevice');
Route::post('/home/sethook',[HomeController::class,'setHook'])->name('setHook');
Route::post('/home',[HomeController::class,'store'])->name('addDevice');
Route::delete('/home',[HomeController::class,'destroy'])->name('deleteDevice');

Route::get('/scan/{number:body}', ScanController::class)->name('scan');

Route::get('/autoreply',[AutoreplyController::class,'index'])->name('autoreply');
Route::post('/autoreply',[AutoreplyController::class,'store'])->name('autoreply');
Route::delete('/autoreply',[AutoreplyController::class,'destroy'])->name('autoreply.delete');
Route::post('auto-reply/update/{autoreply:id}',[AutoreplyController::class,'update'])->name('autoreply.update');



Route::get('/phonebook',[TagController::class,'index'])->name('phonebook');
Route::get('/get-phonebook',[TagController::class,'getPhonebook'])->name('getPhonebook');
Route::delete('/clear-phonebook',[TagController::class,'clearPhonebook'])->name('clearPhonebook');
Route::get('get-contact/{id}',[ContactController::class,'getContactByTagId']);
Route::post('/contact/store',[ContactController::class,'store'])->name('contact.store');
Route::delete('/contact/delete/{contact:id}',[ContactController::class,'destroy'])->name('contact.delete');
Route::delete('/contact/delete-all/{id}',[ContactController::class,'DestroyAll'])->name('deleteAll');
Route::post('/contact/import',[ContactController::class,'import'])->name('import');
Route::get('/contact/export/{id}',[ContactController::class,'export'])->name('exportContact');

Route::post('/tags',[TagController::class,'store'])->name('tag.store');
Route::delete('/tags',[TagController::class,'destroy'])->name('tag.delete');
Route::post('fetch-groups',[TagController::class ,'fetchGroups'])->name('fetch.groups');

Route::get('/campaigns',[CampaignController::class,'index'])->name('campaigns');
Route::get('/campaign/create',[CampaignController::class,'create'])->name('campaign.create');
Route::post('/campaign/store',[CampaignController::class,'store'])->name('campaign.store');
Route::get('/get-phonebook-list',[CampaignController::class,'getPhonebookList'])->name('getPhonebookList');
Route::post('/campaign/pause/{id}',[CampaignController::class,'pause'])->name('campaign.pause');
Route::post('/campaign/resume/{id}',[CampaignController::class,'resume'])->name('campaign.resume');
Route::delete('/campaign/delete/{id}',[CampaignController::class,'destroy'])->name('campaign.delete');
Route::get('/campaign/show/{id}',[CampaignController::class,'show'])->name('campaign.show');
Route::delete('/campaign/clear',[CampaignController::class,'destroyAll'])->name('campaigns.delete.all');
Route::get('/campaign/blast/{campaign:id}',[BlastController::class,'index'])->name('campaign.blasts');

Route::post('/preview-message',[ShowMessageController::class,'index'])->name('previewMessage');
Route::get('/form-message/{type}',[ShowMessageController::class,'getFormByType'])->name('formMessage');



Route::get('/message/test',[MessagesController::class,'index'])->name('messagetest');
Route::post('/message/test',[MessagesController::class,'store'])->name('messagetest');

Route::get('/api-docs',RestapiController::class)->name('rest-api');

Route::get('/user/settings',[UserController::class,'settings'])->name('user.settings');
Route::post('/user/change-password',[UserController::class,'changePasswordPost'])->name('changePassword');
Route::post('/user/setting/apikey',[UserController::class,'generateNewApiKey'])->name('generateNewApiKey');


Route::get('/admin/settings',[SettingController::class,'index'])->name('admin.settings');
Route::post('/settings/server',[SettingController::class,'setServer'])->name('setServer');


Route::get('/admin/manage-users',[ManageUsersController::class,'index'])->name('admin.manage-users')->middleware('admin');
Route::post('/admin/user/store',[ManageUsersController::class,'store'])->name('user.store')->middleware('admin');
Route::delete('/admin/user/delete/{id}',[ManageUsersController::class,'delete'])->name('user.delete')->middleware('admin');
Route::get('admin/user/edit',[ManageUsersController::class,'edit'])->name('user.edit')->middleware('admin');
Route::post('admin/user/update',[ManageUsersController::class,'update'])->name('user.update')->middleware('admin');

Route::get('/messages-history',[MessagesHistoryController::class,'index'])->name('messages.history');
Route::post('/resend-message',[MessagesHistoryController::class,'resend'])->name('resend.message');


Route::post('/logout', LogoutController::class)->name('logout');



});

Route::middleware('guest')->group(function(){

Route::get('/login',[LoginController::class,'index'])->name('login');
Route::get('/register',[RegisterController::class,'index'])->name('register');
Route::post('/register',[RegisterController::class,'store'])->name('register');
Route::post('/login',[LoginController::class,'store'])->name('login')->middleware('throttle:5,1');
});
Route::get('/install', [SettingController::class,'install'])->name('setting.install_app');
Route::post('/install', [SettingController::class,'install'])->name('settings.install_app');

Route::post('/settings/check_database_connection',[SettingController::class,'test_database_connection'])->name('connectDB');
Route::post('/settings/activate_license',[SettingController::class,'activate_license'])->name('activateLicense');


?> "
 
app/Services/Impl/MessageServiceImpl.php


<?php



namespace App\Services\Impl;

use App\Services\MessageService;

class MessageServiceImpl implements MessageService

{

public function formatText($text): array

{

return ['text' => $text];

}

public function formatImage($url, $caption = ''): array

{

return ['image' => ['url' => $url], 'caption' => $caption];

}

// formating buttons

public function formatButtons($text, $buttons, $urlimage = '', $footer = '' ): array

{

$optionbuttons = [];

$i = 1;

foreach ($buttons as $button) {

$optionbuttons[] = [

'buttonId' => "id$i",

'buttonText' => ['displayText' => $button],

'type' => 1,

];

$i++;

}

$valueForText = $urlimage ? 'caption' : 'text';

$message = [

$valueForText => $text,

'buttons' => $optionbuttons,

'footer' => $footer,

'headerType' => 1,

];

if ($urlimage) {

$message['image'] = ['url' => $urlimage];

}

return $message;

}

// formating templates

public function formatTemplates( $text,$buttons, $urlimage = '', $footer = ''): array

{

$templateButtons = [];

$i = 1;

foreach ($buttons as $button) {

$type = explode('|', $button)[0] . 'Button';

$textButton = explode('|', $button)[1];

$urlOrNumber = explode('|', $button)[2];

$typeIcon = explode('|', $button)[0] === 'url' ? 'url' : 'phoneNumber';

$templateButtons[] = [

'index' => $i,

$type => ['displayText' => $textButton, $typeIcon => $urlOrNumber],

];

$i++;

}

$valueForText = $urlimage ? 'caption' : 'text';

$templateMessage = [

$valueForText => $text,

'footer' => $footer,

'templateButtons' => $templateButtons,

'viewOnce' => true,

];

//add image to templateMessage if exists

if ($urlimage) {

$templateMessage['image'] = ['url' => $urlimage];

}

return $templateMessage;

}

public function formatLists ($text,$lists,$title,$name,$buttonText,$footer = '') : array

{

$section = [

'title' => $title,

];

$i = 1;

foreach ($lists as $menu) {

$i++;

$section['rows'][] = [

'title' => $menu,

'rowId' => 'id' . $i,

'description' => '',

];

}

$listMessage = [

'text' => $text,

'footer' => $footer,

'title' => $name,

'buttonText' => $buttonText,

'sections' => [$section],

];

return $listMessage;

}





public function format ($type, $data) : array

{

switch ($type) {

case 'text':

$reply = $this->formatText($data->message);

break;

case 'image':

$reply = $this->formatImage($data->image, $data->caption );

break;

case 'button':

$buttons = [];

foreach ($data->button as $button) {

$buttons[] = $button;

}

$reply = $this->formatButtons( $data->message,$buttons,$data->image ? $data->image : '',$data->footer ?? '' );

break;

case 'template':

$buttons = [];

foreach ($data->template as $button) {

$buttons[] = $button;

}

try {

$reply = $this->formatTemplates( $data->message,$buttons, $data->image ? $data->image : '',$data->footer ?? ''

);

} catch (\Throwable $th) {

throw new \Exception('Invalid button type');

}

break;

case 'list':

$reply = $this->formatLists($data->message,$data->list,$data->title,$data->name,$data->buttontext,'');

break;

default:

# code...

break;

}

return $reply;

}

}
?>
 
Last edited:
app/Services/Impl/WhatsappServiceImpl.php

<?php

namespace
App\Services\Impl;

use App\Services\WhatsappService;

use Illuminate\Support\Facades\Http;

class WhatsappServiceImpl implements WhatsappService {

private $url;



public function __construct()

{

$this->url = env('WA_URL_SERVER');

}

public function fetchGroups($device): object

{

$fetch = Http::withOptions(['verify' => false])->asForm()->post($this->url .'/backend-getgroups',['token' => $device->body]);

return json_decode($fetch->body());

}

public function startBlast($data): object

{

$res = Http::withOptions(['verify' => false])

->asForm()

->post(

$this->url . '/backend-blast',

[

'data' => json_encode($data),

'delay' => 1,

]

);

return json_decode($res->body());

}

public function sendText($request,$receiver): object | bool

{

$results = Http::withOptions(['verify' => false])->asForm()->post($this->url . '/backend-send-text', [

'token' => $request->sender,

'number' =>$receiver,

'text' => $request->message,

]);

return json_decode($results->body());

}



public function sendMedia($request,$receiver): object | bool

{

// GET FILE NAME from $request->url

$fileName = explode('/', $request->url);

$fileName = explode('.', end($fileName));

$fileName = $fileName[0];

$data = [

'token' => $request->sender,

'url' => $request->url,

'number' => $receiver,

'caption' => $request->caption ?? '',

'filename' => $fileName,

'type' => $request->media_type,

'ptt' => $request->ptt ? ($request->ptt == 'vn' ? true : false) : false,

];

$results = Http::withOptions(['verify' => false])->asForm()->post($this->url . '/backend-send-media', $data);



return json_decode($results->body());

}



public function sendButton($request,$receiver): object | bool

{

$buttons = [];

foreach ($request->button as $button) {

$buttons[] = ['displayText' => $button, ];

}

// check url if exists,set to image if not exists cheeck thumbnail if exists set to image

$image = $request->url ? $request->url : ($request->image ? $request->image : '');

$data = [

'token' => $request->sender,

'number' => $receiver,

'button' => json_encode($buttons),

'message' => $request->message,

'footer' => $request->footer ?? '',

'image' => $image,

];

;

$results = Http::withOptions(['verify' => false])->asForm()->post($this->url . '/backend-send-button', $data);

return json_decode($results->body());

}

public function sendTemplate($request,$receiver): object | bool

{

$templates = [];

$ii = 1;

foreach ($request->template as $template) {

$ii++;

$typedest = explode('|', $template)[0] == 'url' ? 'url' : (explode('|', $template)[0] == 'call' ? 'phoneNumber' : 'id');

$type = explode('|', $template)[0] == 'id' ? 'quickReplyButton' : explode('|', $template)[0] . 'Button';

$templates[] = [

'index' => $ii,

$type => [

'displayText' => explode('|', $template)[1],

$typedest => explode('|', $template)[2],

],

];

}

$image = $request->url ? $request->url : ($request->image ? $request->image : '');

$data = [

'token' => $request->sender,

'number' => $receiver,

'button' => json_encode($templates),

'text' => $request->message,

'footer' => $request->footer ?? '',

'image' => $image,

];

$results = Http::withOptions(['verify' => false])->asForm()->post($this->url . '/backend-send-template', $data);

return json_decode($results->body());

}



public function sendList($request,$receiver) : Object | bool

{

$section['title'] = $request->title;

$i = 1;

foreach ($request->list as $menu) {

$i++;

$section['rows'][] = [

'title' => $menu,

'rowId' => 'id' . $i,

'description' => '',

];

}

$data = [

'token' => $request->sender,

'number' => $receiver,

'list' => json_encode($section),

'text' => $request->message,

'footer' => $request->footer ?? '',

'title' => $request->title,

'buttonText' => $request->buttontext,

];



$results = Http::withOptions(['verify' => false])->asForm()->post($this->url . '/backend-send-list', $data);

return json_decode($results->body());

}

}

?>
 
Last edited:
<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
*
@var array<int, class-string|string>
*/

protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Fruitcake\Cors\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

/**
* The application's route middleware groups.
*
*
@var array<string, array<int, class-string|string>>
*/

protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\App\Http\Middleware\appInstalled::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\isVerifiedLicense::class,
],

'api' => [
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,

],
];

/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
*
@var array<string, class-string|string>
*/

protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'checkApiKey' => \App\Http\Middleware\CheckApiKey::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
];
}

?>
 
I also decrypt the JS files, but it stopped sending the image, I think it's a problem with the Baileys WhatsApp platform used, and not with the code, I made some changes to trigger messages without dropping the chip, I put random on the delay, and random on the messages!
 
\app\Console\Commands\StartBlast.php


<?php

namespace
App\Console\Commands;



use App\Models\Campaign;

use App\Services\WhatsappService;

use Illuminate\Console\Command;

use Illuminate\Support\Facades\Log;

class StartBlast extends Command

{

/**

* The name and signature of the console command.

*

* [/COLOR][COLOR=#569cd6]@var[/COLOR][COLOR=#7ca668] string

*/


protected $signature = 'start:blast';

/**

* The console command description.

*

* [/COLOR][COLOR=#569cd6]@var[/COLOR][COLOR=#7ca668] string

*/


protected $description = 'Command description';

/**

* Create a new command instance.

*

*
@return void

*/

protected $wa;

public function __construct(WhatsappService $wa)

{

parent::__construct();

$this->wa = $wa;

}

/**

* Execute the console command.

*

*
@return int

*/

public function handle()

{

$waitingCampaigns = Campaign::where('schedule', '<=', now())

->whereIn('status', ['waiting', 'processing'])

->with('phonebook', 'device')

->get();



foreach ($waitingCampaigns as $campaign) {

$countPhonebook = $campaign->phonebook->contacts()->count();

if ($countPhonebook == 0) {

$campaign->update(['status' => 'failed']);

continue;

}

if ($campaign->device->status != 'Connected') {

$campaign->update(['status' => 'paused']);

continue;

}

$campaign->update(['status' => 'processing']);

$pendingBlasts = $this->getPendingBlasts($campaign);

if ($pendingBlasts->count() == 0) {

continue;

}

// send progress

$blastdata = [];

foreach ($pendingBlasts as $blast) {

$blastdata[] = [

'receiver' => $blast->receiver,

'message' =>$this->random($blast->message), // function created to send random message

];

}

$data = [

'data' => $blastdata,

'delay' => rand(60,$campaign->delay),//in the rand function, the first is minimum time and the second is maximum time

'campaign_id' => $campaign->id,

'sender' => $campaign->device->body,

];

try {

$results = $this->wa->startBlast($data);

$campaign->update(['status' => 'processing']);

} catch (\Throwable $th) {

$campaign->update(['status' => 'failed']);

Log::error($th);

}

}

return 0;

}

public function getPendingBlasts($campaign)

{

$pendingBlasts = $campaign

->blasts()

->where('status', 'pending')

->limit(15)

->get();

if ($pendingBlasts->count() == 0) {

$campaign->update(['status' => 'completed']);

return collect();

}

return $pendingBlasts;

}



// function created to send random message

protected function random ($str) {

// Returns random values found between @ this | and @

return preg_replace_callback("/@(.*?)@/", function ($match) {

// Splits 'this|and' strings into an array

$words = explode("|", $match[1]);

// Grabs a random array entry and returns it

return $words[array_rand($words)];

// The input string, which you provide when calling this func

}, $str);

}

}
 
see my changes:

1st - random time: with this change the minimum time will be 60 and the maximum time will be informed by the user. this time needs to be greater than 61. example: I choose 400 seconds, it will choose from 60 to 400, and it will raffle a number, and so on, each msg it makes a raffle!

2nd word random: It has been configured to send a random greeting message. example:

@hello|hello|Hello|Hi|Hi!|Hello!|hi!|hello!@

When entering according to the above command, the system will raffle one of these words and send it to the person.
 
it only works in the campaign, as these changes are being made in the function that executes the campaign. These functions were created to warm up the chip, as the newly created chip already manages to send 400 to 500 messages a day using this method. At first, I shoot very little. 30 messages, increasing by 10 by 10 per day. so, in 20 days it already shoots 250.
 
i got the error after install v550:

/root-folder/wamd/app/Services/Impl/WhatsappServiceImpl.php(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code:46

can anyone help?
 
<?php

namespace App\Http;


use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
/**

* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array<int, class-string|string>
*/
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Fruitcake\Cors\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

/**

* The application's route middleware groups.
*
* @var array<string, array<int, class-string|string>>
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\App\Http\Middleware\appInstalled::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\isVerifiedLicense::class,
],

'api' => [

// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,

],
];

/**

* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array<string, class-string|string>
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'checkApiKey' => \App\Http\Middleware\CheckApiKey::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
];
}

?>
Where do I put this code and what does it do?
 
  • Like
Reactions: nuncanemvi
AdBlock Detected

We get it, advertisements are annoying!

However in order to keep our huge array of resources free of charge we need to generate income from ads so to use the site you will need to turn off your adblocker.

If you'd like to have an ad free experience you can become a Babiato Lover by donating as little as $5 per month. Click on the Donate menu tab for more info.

I've Disabled AdBlock