Send MultiMedia Added to chats out

This commit is contained in:
rawee 2023-01-24 00:59:38 +05:30
parent 98742199d5
commit 1830190943
3 changed files with 55 additions and 13 deletions

View File

@ -3,6 +3,8 @@
Simple node for connecting Node-Red to Whatsapp :iphone:
Currently in developing mode, Continous updated may encounter. :sweat_smile:
Working on WhatsappLite (Lite version of whatsapp Web baised on web sockets.)
## To Connect with Whatsapp
@ -55,14 +57,19 @@ Admin Node generate QR Code just below the node for easy connection with whatsap
3. **Chats Out** : As simple as mention on name, node will send `msg.payload` recived at input to the number mentioned in node.
<p>Don't forget to mention international dialing code befor your number.
Number must be in format like <b>+11 99999 99999</b> without any space.</p>
<P><b>OR</b></P>
<P>Leave the Number blank and provide the number along with paylod
at `msg.toNumber` with international code.</P>
<p>To send message on multiple contacts an Arrar of number can be passed
on `msg.toNumber` like `msg.toNumber = [+1199999999, +12990000099, +1311111111].
</p>
MultiMedia Message Out: Requirments-
| Input | Description |
|--------|-------------|
| `msg.image` | Base64 (encoded image) |
| `msg.payload` | Image Caption |
| `msg.toNumber` | Sender number (if number not provided in node) |
Don't forget to mention international dialing code befor your number.
Number must be in format like <b>+11 99999 99999</b> without any space.
<P><b>OR</b></P>
Leave the Number blank and provide the number along with paylod at `msg.toNumber` with international code.
To send message on multiple contacts an Arrar of number can be passed on `msg.toNumber` like `msg.toNumber` = ["+1199999999", "+12990000099", "+1311111111"].
4. **Group Message** : Whatsapp Group Node to send message in a Group.
@ -81,7 +88,7 @@ Issues and Suggestions are welcome [here.](https://github.com/raweee/node-red-co
* `Ver-0.1.23` : Nodes are formatted correctly and names are updated.
* `Ver-0.1.28` : Now QR Codes are directlly avilable in run time on Whatsapp-Admin-Node.
* `Ver-0.1.30` : Message can be send to an Array of contacts provided at `msg.toNumber`.
* Working on Reply Node.
* Working on WhatsappLite.
## Future Nodes
Currently working on more Whatsapp Node and will be avilable soon -

View File

@ -47,5 +47,12 @@ Node to send whatsapp messages.
As simple as mention on name, node will send `msg.payload` recived at input to the number mentioned in node.
MultiMedia Message Out: Requirments-
| Input | Description |
|--------|-------------|
| `msg.image` | Base64 (encoded image) |
| `msg.payload` | Image Caption |
| `msg.toNumber` | Sender number (if number not provided in node) |
-*Don't forget to mention international dialing code befor your number. Number must be in format like `+11 99999 99999` without any space.*
</script>

View File

@ -5,6 +5,7 @@ module.exports = function(RED) {
node.number = config.number;
var whatsappLinkNode = RED.nodes.getNode(config.whatsappLink);
node.waClient = whatsappLinkNode.client;
const { MessageMedia } = require('whatsapp-web.js')
let SetStatus = function(WAStatus, color){
node.status({fill:color,shape:"dot",text:WAStatus});
@ -28,16 +29,43 @@ module.exports = function(RED) {
} else { node.log(`Error Sending Msg: ${e}`)}
};
function whatsappMultiMediaMessage(numb, whatsappImage, whatsappCaption){
try {
numb = node.number;
whatsappImage = whatsappImage.split(',')[1] || whatsappImage;
var myMessage = new MessageMedia('image/png', whatsappImage, null, null);
numb = typeof numb ==='number' ? numb : numb.replace(/\D/g, '');
numb = `${numb}@c.us`;
node.waClient.sendMessage(numb, myMessage, {caption : whatsappCaption || "Image from Node-Red"});
SetStatus("Message Send.", "green");
setTimeout(()=>{
SetStatus('Connected','green');
}, 2000)
} catch(e) {
node.log(`Error sending MultiMedia Message : ${e}`)
}
};
node.on('input', (message)=> {
if (node.number){
whatsappMessage(node.number, message.payload);
if (message.image){
whatsappMultiMediaMessage(node.number, message.image, message.payload);
}
else {
whatsappMessage(node.number, message.payload);
}
} else if (message.toNumber){
var numbers = typeof message.toNumber === 'number' ? Array.of(message.toNumber) : message.toNumber;
for (number of numbers) {
setTimeout(()=> {
whatsappMessage(number, message.payload)}
, 3000);
if(message.image){
whatsappMultiMediaMessage(number, message.image, message.payload)
delay(2000);
} else {
whatsappMessage(number, message.payload)
delay(2000)
}
}
} else {
SetStatus("No number","red");