whatsapp_bot_flutter
Puppeteer および WhatsApp Web スクレイピングを使用した WhatsApp ボット。Flutter デスクトップ/ウェブおよび Dart プロジェクトをサポート
Flutter デスクトップ用の WhatsApp ボット
以下は英語原文のスナップショットです。最新版は GitHub をご覧ください。
whatsapp_bot_flutter_logo
whatsapp_bot_flutter_mobile version
whatsapp_bot_flutter_web version
We can use this library in Flutter as well as Pure dart projects , checkout dart_example
First launch on Desktop apps will take some time, it will download chromium files locally, using puppeteer
Get WhatsappClient using connect method
Either link with QRCode (default) and get QrCode in onQrCode callback or set linkWithPhoneNumber, and get code in onPhoneLinkCode callback
// use WhatsappBotFlutterMobile.connect for Android/IOS platforms
WhatsappClient? whatsappClient = await WhatsappBotFlutter.connect(
onConnectionEvent: (ConnectionEvent event) {
print(event.toString());
},
onQrCode: (String qr, Uint8List? imageBytes) {
// use imageBytes to display in flutter : Image.memory(imageBytes)
print(WhatsappBotFlutter.convertStringToQrCode(qr));
},
);
We have these modules to access whatsappClient features :
WhatsappClient.chat
WhatsappClient.contact
WhatsappClient.profile
WhatsappClient.group
Use sendTextMessage to send a text message
phone parameter can be of this format : countryCode+phoneNumber , eg : 91xxxxxxxxxx , or we can get phone from messageEvents in this format : countryCode+phone+"@c.us"
await whatsappClient.chat.sendTextMessage(
phone: "------",
message: "Test Message",
);
Use sendFileMessage to send a File
await whatsappClient.chat.sendFileMessage(
phone: "------",
fileBytes: fileBytes, // Pass file bytes
caption: "Test Message", // Optional
fileType: fileType, // document, image, audio
);
To get whatsapp connection Events , subscribe to whatsappClient.connectionEventStream
whatsappClient.connectionEventStream.listen((event) {
// Connection Events : authenticated,logout,connected.....
});
To get new Messages
whatsappClient.on(WhatsappEvent.chat_new_message, (data) {
List<Message> messages = Message.parse(data);
// replyMessageId is optional , add this to send a reply message
whatsappClient.chat.sendTextMessage(
phone: message.from,
message: "Hey !",
replyMessageId: message.id,
);
});
We can listen to multiple events like this
whatsappClient.on(WhatsappEvent.EVENT_NAME, (data) {})
To stop listening to an event
whatsappClient.off(WhatsappEvent.EVENT_NAME);
To setup on Android , make sure to checkout flutter_inappwebview documentation for Android and IOS setup
Android sdk:minSdkVersion cannot be smaller than version 19
For Macos , Enable outgoing and incoming connections, If getting sandbox issue , try disabling sandbox mode comment this out in macos/Runner/*.entitlements:
<key>com.apple.security.app-sandbox</key>
<true/>
Should run out of the box in Windows and Linux
checkout web demo app : https://rohitsangwan01.github.io/whatsapp_bot_flutter
To run natively on Web, checkout whatsapp_bot_flutter_web
We can use browserless, Create a free account there and get API_TOKEN from browserless, and use this url to connect : wss://chrome.browserless.io?token=API_TOKEN
Or we can run puppeteer, and get browserWsEndpoint from there and pass into the connect method, checkout this example
then pass this browserWsEndpoint in connect method, and also requires wppJsContent, we can download this file from here, add this file in assets and pass like this,
await WhatsappBotFlutter.connect(
browserWsEndpoint: "BROWSER_WS_ENDPOINT_URL",
wppJsContent: await rootBundle.loadString("assets/wpp.js"),
);
We can use this on Mobile or Desktop platforms as well , to connect to a chrome server hosted somewhere else
If we have to access this webSocket url locally on Mobile or other platforms , we can use ngrok to expose our local Websocket url to internet
Thanks to wa-js for exporting functions from WhatsApp Web
This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with WhatsApp or any of its subsidiaries or its affiliates. The official WhatsApp website can be found at https://whatsapp.com. "WhatsApp" as well as related names, marks, emblems and images are registered trademarks of their respective owners.
Its just initial version, I can't guarantee you will not be blocked by using this method, try to avoid primary whatsapp numbers. WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe.