Jump to content
View in the app

A better way to browse. Learn more.

DoniaWeB

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
     
Do not create multi-accounts, you will be blocked!

adriano

Members
  • Joined

  • Last visited

Posts posted by adriano

  1. Em 02/11/2024 em 08:48, Jamshaid Yousaf disse:

    Hi @Mahmoud  After deploying on cpanel (shared hosting), I am facing an issue while starting the Node application (using Node.js version 16.20.1),  after starting the app i am experiencing the following error

    returncode: 1
    stdout:
    > start
    > node .
    
    Running cleanup before exit.
    stderr:
    Error: listen EADDRINUSE: address already in use 127.0.0.1:8000
        at Server.setupListenHandle [as _listen2] (node:net:1463:16)
        at listenInCluster (node:net:1511:12)
        at doListen (node:net:1660:7)
        at processTicksAndRejections (node:internal/process/task_queues:84:21)


    Also the application get crashed

    image.thumb.png.6bdd650f9a7882df98b2c3dca0c90862.png

    Need help please...

    I had this problem, I fixed it by changing the server port in the env to 8081

  2. 8 horas atrás, adhiete disse:

    @adriano try check the status of the port. is it running or not.
    Then change .env on your web root folder to this,
    APP_URL=https://yourwebsite
    WA_URL_SERVER=https://yourwebsite:portnodejs

    then save.
    restart the apache2. then change to your web folder cd /var/www/html/yourmpwafolder then execute node server.js

    I'm on debian12 with node20

    CMIIW

    Hi, it's already like this in my .env, it ran normally on http, when I changed it to https it doesn't show the qrcode
    i use ubuntu e node 22

  3. ·

    Edited by adriano

    52 minutos atrás, adhitya syahputra disse:

    1- Open the .htaccess in the root path of the script and clear all code and save it.

    2-Then, we will edit the server.js file and replace this code from:

    /**
    * EXPRESS FOR ROUTING
    */
    const express = require("express");
    const app = express();
    const http = require("http");
    const server = http.createServer(app);

    To:

    /**
    * EXPRESS FOR ROUTING
    */
    const serverOptions = {
    key: fs.readFileSync('key.pem'), # key.pem is your ssl key
    cert: fs.readFileSync('cert.pem') #cert.pem is your ssl cert
    }

    const express = require("express");
    const app = express();
    const https = require("https");
    const server = https.createServer(serverOptions, app);

    3- edit the routes/web.php file and add this code at the end of the file:

       URL::forceScheme('https');

    4- Open .htaccess again, put the following code inside and save:

    <IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI} !^/socket.io/
    RewriteCond %{REQUEST_URI} !^/backend-*
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(.*)$ /public/$1 [L,QSA]
    </IfModule>
    <IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
    </IfModule> 

    5- Restart your node.js project

    I was unsure where to put the changes.

    my server.js
     

    'use strict';

    const wa = require("./server/whatsapp");
    const fs = require("fs");
    const dbs = require('./server/database/index');
    require("dotenv").config();
    const lib = require("./server/lib");
    global.log = lib.log;

    /**
     * EXPRESS FOR ROUTING
     */
    const express = require("express");
    const app = express();

    /**
     * HTTPS CONFIGURATION
     */
    const https = require("https");

    // Substitua <seu_dominio> pelo domínio que você usou para gerar os certificados com o Let's Encrypt.
    const privateKey = fs.readFileSync('/etc/letsencrypt/live/site/privkey.pem', 'utf8');
    const certificate = fs.readFileSync('/etc/letsencrypt/live/site/cert.pem', 'utf8');
    const ca = fs.readFileSync('/etc/letsencrypt/live/site/chain.pem', 'utf8');

    const credentials = {
      key: privateKey,
      cert: certificate,
      ca: ca
    };

    const server = https.createServer(credentials, app);

    /**
     * SOCKET.IO
     */
    const { Server } = require("socket.io");
    const io = new Server(server, {
      pingInterval: 25000,
      pingTimeout: 10000,
    });

    // Porta definida apenas uma vez
    const port = process.env.PORT_NODE || 3200; // Caso PORT_NODE não esteja definido, será usada a porta 3200.

    app.use((req, res, next) => {
      res.set("Cache-Control", "no-store");
      req.io = io;
      next();
    });

    const bodyParser = require("body-parser");

    app.use(
      bodyParser.urlencoded({
        extended: false,
        limit: "50mb",
        parameterLimit: 100000,
      })
    );

    app.use(bodyParser.json());
    app.use(express.static("src/public"));
    app.use(require("./server/router"));

    io.on("connection", (socket) => {
      console.log("A user connected");
    });

    server.listen(port, () => {
      console.log(`Servidor rodando em https://localhost:${port}`);
    });


    htaccess                                                                                                                 
    DirectoryIndex index.php index.html

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /mpwa/

        RewriteCond %{REQUEST_URI} !^/mpwa/socket.io/
        RewriteCond %{REQUEST_URI} !^/mpwa/backend-*
        RewriteCond %{REQUEST_URI} !^/mpwa/public/
        RewriteRule ^(.*)$ /mpwa/public/$1 [L,QSA]
    </IfModule>

    <IfModule mod_security.c>
        SecFilterEngine Off
        SecFilterScanPOST Off
    </IfModule>


    web.php

     

    <?php
    /**************************/
    /*    Nulled & Decoded    */
    /*   By Magd Almuntaser   */
    /*         TTMTT          */
    /**************************/

    use App\Http\Controllers\Admin\ManageUsersController;
    use App\Http\Controllers\Admin\UpdateController;
    use App\Http\Controllers\Auth\LoginController;
    use App\Http\Controllers\Auth\LogoutController;
    use App\Http\Controllers\AutoreplyController;
    use App\Http\Controllers\TwoFactorController;
    use App\Http\Controllers\AibotController;
    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;
    use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
    use App\Http\Controllers\PasswordResetController;
    use App\Http\Controllers\ThemesController;

    require_once 'custom-route.php';

    Route::group(['prefix' => LaravelLocalization::setLocale()], function() {
        Route::get('/', function()
        {
            return Redirect::to( '/login');
        });
        Route::middleware('2fa')->group(function (){
            Route::get('/2fa', [TwoFactorController::class, 'showVerify'])->name('2fa.verify');
            Route::post('/2fa', [TwoFactorController::class, 'verifyLogin'])->name('2fa.verify');
        });
        Route::middleware('auth', '2fa')->group(function (){
            Route::group(['prefix' => 'laravel-filemanager'], function () {
                \UniSharp\LaravelFilemanager\Lfm::routes();
            });
            Route::get('/home',[HomeController::class,'index'])->name('home');
            Route::get('/file-manager', [FileManagerController::class, 'index'])->name('file-manager');
            Route::get('/filemanager', function () { return redirect('/'.LaravelLocalization::getCurrentLocale().'/laravel-filemanager'); })->name('filemanager');
            Route::post('/home/setSessionSelectedDevice',[HomeController::class,'setSelectedDeviceSession'])->name('home.setSessionSelectedDevice');
            Route::post('/home/sethook',[HomeController::class,'setHook'])->name('setHook');
            Route::post('/home/setavailable',[HomeController::class,'setAvailable'])->name('setAvailable');
            Route::post('/home/setdelay',[HomeController::class,'setDelay'])->name('setDelay');
            Route::post('/home/sethookread',[HomeController::class,'setHookRead'])->name('setHookRead');
            Route::post('/home/sethookreject',[HomeController::class,'setHookReject'])->name('setHookReject');
            Route::post('/home/sethooktyping',[HomeController::class,'setHookTyping'])->name('setHookTyping');
            Route::post('/home/setGPT',[HomeController::class,'setGPT'])->name('setGPT');
            Route::post('/home',[HomeController::class,'store'])->name('addDevice');
            Route::delete('/home',[HomeController::class,'destroy'])->name('deleteDevice');

            Route::get('/scan/{number:body}',[ScanController::class,'scan'])->name('scan');
            Route::get('/code/{number:body}',[ScanController::class,'code'])->name('connect-via-code');

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

            Route::get('/aibot',[AibotController::class,'index'])->name('aibot');
            Route::post('/aibot',[AibotController::class,'store'])->name('aibot');
            
            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::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('/form-message-edit/{type}',[ShowMessageController::class,'showEdit'])->name('formMessageEdit');
          


          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::post('/user/setting/deletehistory',[UserController::class,'deleteHistory'])->name('deleteHistory');
          
          Route::post('/user/settings/2fa', [UserController::class, 'toggleTwoFactor'])->name('user.settings.2fa');
          Route::get('/user/2fa_setup', [TwoFactorController::class, 'showSetup'])->name('user.2fa_setup');
          Route::post('/user/2fa/verify', [TwoFactorController::class, 'verify'])->name('user.2fa.verify');
          
          Route::get('/admin/settings',[SettingController::class,'index'])->name('admin.settings');
          Route::post('/settings/server',[SettingController::class,'setServer'])->name('setServer');
          Route::post('/settings/generate-ssl', [SettingController::class, 'generateSslCertificate'])->name('generateSsl');
          Route::post('/settings/setenvall', [SettingController::class, 'setEnvAll'])->name('setEnvAll');
          
          Route::get('/admin/update',[UpdateController::class,'checkUpdate'])->name('update');
          Route::post('/admin/update/install',[UpdateController::class,'installUpdate'])->name('update.install');
          
          Route::get('/admin/manage-themes',[ThemesController::class,'index'])->name('admin.manage-themes');
          Route::get('/admin/active-themes/{name}',[ThemesController::class,'activeTheme'])->name('themes.active');
          Route::post('/admin/download-themes',[ThemesController::class,'downloadTheme'])->name('themes.download');
          Route::post('/admin/delete-themes',[ThemesController::class,'deleteTheme'])->name('themes.delete');

          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('/delete-messages',[MessagesHistoryController::class,'deleteAll'])->name('delete.messages');

        });

        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('password/reset', [PasswordResetController::class, 'showLinkRequestForm'])->name('password.request');
            Route::post('password/email', [PasswordResetController::class, 'sendResetLinkEmail'])->name('password.email');
            Route::get('password/reset/{token}', [PasswordResetController::class, 'showResetForm'])->name('password.reset');
            Route::post('password/reset', [PasswordResetController::class, 'reset'])->name('password.update');
        });
        Route::match(['get', 'post'], '/logout', LogoutController::class)->name('logout');
        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');
    });

    URL::forceScheme('https');
    ?>
     

     

  4. 6 minutos atrás, Magd Almuntaser disse:

     

    The important thing is that it works. The delay may be from WhatsApp or from your server being far away from WhatsApp servers. It works correctly for everyone.

     


    use nodejs 18 and ubove
     


    The problem has been solved in version 9.0.0 as the code changes quickly.

    Has version 9.0 already been made available?

  5. 8 minutos atrás, Magd Almuntaser disse:

     

    Certifique-se de que você está usando php8.1 e abra o link diretamente:

     


    tente abrir o link do seu wa_server:

    e me diga o que você vê... ou me envie uma mensagem privada

    Observação: não use a instalação automática, ela não é para você... minha resposta é para alguém, leia atentamente a citação.

    image.png.306d5e58e69c6156b96dc8e718342228.png

     

  6. 23 minutos atrás, Magd Almuntaser disse:

    Are you using a control panel like cpanel or aapanel or an empty vps?

    If the vps is empty, you can install the version via auto installer.. It will install the version and create your site and database and everything. All you have to do is prepare an empty vps and run the command..
     

    https://doniaweb.com/topic/17994-whatsapp-gateway-multi-device-v851/page/89/#comment-75612

    But if you have a vps with a control panel, you can install it easily (download the compressed file, extract it on your site, open your site link and you will be taken to the installation. Complete the installation and run nodejs)
     


    try to change this in .env file:
     

    APP_URL=http://yoursite.com
    WA_URL_SERVER=http://yoursite.com:3100
    PORT_NODE=3100
    TYPE_SERVER=other

    and restart your nodejs and make sure you use http on your link on browser..
     


    you need ti use cronjob:
     

    curl "https://website.com/blast-start" >/dev/null 2>&1
    curl "https://website.com/schedule-cron" >/dev/null 2>&1
    curl "https://website.com/schedule-run" >/dev/null 2>&1

    Sometimes your shared hosting gives another path to the curl command, so try these links above first. If they don't work, you can search for the correct path to curl or contact your hosting company to find out the correct path.

    image.png.559415a5eda0e6d17a3897565e6d6c72.png 

    I use a clean VPN, but it is not working , image.png.f053e8a2483fd7df44f4974f2c682ef1.png

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.