gabrieljaime / wa-laravel
用于Laravel使用WhatsApp Baileys Api的包装器
Requires
- php: ^8.0.2
- beyondcode/laravel-websockets: ^1.13
- laravel/framework: ^9.0
This package is auto-updated.
Last update: 2024-09-07 11:40:17 UTC
README
[PT-BR] 此包增加了Laravel中使用WhatsApp的功能。它是一个包装器,利用由@tiagoandrepro/baileys-api提供的API,该API简化了@adiwajshing/Baileys库的使用。
安装
composer require rocketslab/wa-laravel
服务提供者将自动注册到Laravel中。
php artisan wa:install
上面的命令安装了JavaScript依赖项,包括介绍中提到的库。
可选地,您可以发布配置文件
php artisan vendor:publish --provider=RocketsLab\\WALaravel\\WALaravelServiceProvider
由于此包高度依赖WebSockets,因此已包含@beyondcode/laravel-websockets库。
启动服务
需要启动两个服务器:websocket和自己的库baileys-api
默认情况下,websocket服务器监听端口6001。可以使用其他端口和websocket的其他配置,所有这些都在beyondcode/laravel-websockets的文档中有描述。websocket的配置应按其文档中所述进行。
启动websocket服务器
php artisan websocket:serve
下一步是启动baileys-api服务器。
php artisan wa:serve
默认情况下,WA API服务器在本地主机上的端口3333启动通信。这些配置可以在config/wa-laravel配置文件中更改。
功能
此包装器通过触发事件并在应用程序中通过WebHooks通知发生的事件来运行,从而在WhatsApp中通知发生了什么。
包中已经包含了一个EventSubscriber和一个EventDispatcher来处理生成的事件,但如果您想对这些事件有更大的控制权,可以通过将配置文件config/walaravel.php中的register_events参数更改为false来禁用事件的自动注册。
服务器端
创建新会话
/* Com o servidor da API iniciado... // O segundo parâmetro é opcional. E informa a API */ que é uma versão legada do WA $wa = \RocketsLab\WALaravel\WhatsApp::factory(); /* Recomenda-se remover a sessão existente */ $wa->removeSession('session-id'); $wa->startSession('session-id', false);
方法返回的是由Laravel的Http客户端提供的Http/Response。
发送消息
// No arquivo de rotas Route::post('sendMessage', funciton(Request $request) { /* Pode-se extrair somente o necessário da requisição */ $data = $request->only(['receiver', 'message', 'sessionId']); \RocketsLab\WALaravel\WhatsApp::factory() ->sendText(...$data); })
客户端(Laravel Echo)
按照文档配置Laravel Echo。
API发送的钩子以POST请求的形式到达服务器,该包已预配置了这些路由,并且对于每个接收到的钩子,都会在服务器端触发一个事件,并将接收到的数据作为事件进行广播。
为了使客户端/浏览器能够接收这些事件并处理信息,需要在walaravel.{id-da-sessão}中监听一个特定的频道。
目前可以监听的事件有
以下是一个小例子
在布局文件(app.blade.php)中的更改...
在布局的头部中,我们需要移除对
app.js的链接,并将此链接移到布局的body末尾。
<head> .... <!-- remover essa linha --> <link rel="stylesheet" href="{{ asset('js/app.js') }}" defer> </head> <body> ... <!-- incluir ela aqui no final --> <link rel="stylesheet" href="{{ asset('js/app.js') }}"> @stack('scripts') </body>
加载视图...
在加载视图的路线中,可以传递一个
$sessionId属性来标识将接收事件的会话,这样如果发送了来自其他会话的事件,则会将其丢弃。
Route::get('whatsapp-config', function() { $sessionId = 'my-session'; return view('wa-config', compact('sessionId')); });
为会话my-session监听Echo...
在某个Blade视图中,在末尾放置@push块。这里的
$sessionId是加载视图时作为返回接收的,可以是静态的或来自数据库。
<!-- VIEW: wa-config --> @push('scripts') <script> Echo.channel('{{ ".meesage-upsert.{$sessionId}" }}') .listen('.message-upsert', ({ event }) => { console.log("MU: " + JSON.stringify(event)) }); </script> @endpush
继续...
此文档正在WIP中,就像此包一样。
如有疑问或建议,请通过
由 jjsquady 创建
合作者 tiagoandre
@2022 火箭实验室