devlikeapro / waha

WAHA - WhatsApp HTTP API (REST API) that you can configure in a click!
https://waha.devlike.pro/
Apache License 2.0
820 stars 249 forks source link

Custom attribute while sending message #272

Open KKshitiz opened 4 months ago

KKshitiz commented 4 months ago

I want to add some custom keys while sending the messages in order to integrate it with some other system. Once the message is created with this custom key, it should reflect in the webhook payload as well.

The sendText function should look like this:

 sendText(request: MessageTextRequest) {
    const options: MessageSendOptions = {
      // It's fine to sent just ids instead of Contact object
      mentions: (request.mentions as unknown) as string[],
      extra: {
        my_custom_key: 'some-value',
      },
    };
    return this.whatsapp.sendMessage(
      this.ensureSuffix(request.chatId),
      request.text,
      options,
    );
  }

I checked the MessageSendOptions type in the WAWebJS library and it seems to have an extra param, but it doesn't work:

  /** Options for sending a message */
    export interface MessageSendOptions {
        /** Other keys */
        /** Extra options */
        extra?: any
        /** Other keys */
    }

patron:ADVANCED

devlikepro commented 4 months ago

Let me check if it works the way you described and WhatsApp sends the extra back to us - in that case we could add extra field in the payload as well.

Do you think it's safe to use extra with some custom logic? It can looks suspicious from WA side, but it's up to you.

patron:PRO

KKshitiz commented 4 months ago

Sure, thanks a lot. Here's the related PR: https://github.com/pedroslopez/whatsapp-web.js/pull/600

Since it's supported by the Whatsapp web library itself, it shouldn't be a security concern. Let me know what do you think.

Also, I'd be more than happy to work on this if you can guide me a bit.

allburov commented 2 months ago

It doesn't' work - no my_custom_key gets back in the payload (likely WhatsApp start to cleanup the payload on WhatsApp Web before encrypting it)

patron:PRO

allburov commented 2 months ago

It's possible to do it this way tho

      extra: {
        quotedMsg: {
          my_custom_key: 'some-value',
        },
      },

in that case we get back it in _data

                "quotedMsg": {
                    "my_custom_key": "some-value"
                },

But I'm not sure about "blocking" concerns - changing payload can be detected by end clients pretty easily

I wouldn't suggest to use that feature and stick to original one only, but if you 100% wish to do that - we can do that! With that you'll be able to also add self: "in" in that payload to detect messages from the app (not from other sources) https://github.com/devlikeapro/whatsapp-http-api/issues/304 I'd strongly recommend using extral database for that tho, but it's up to you, we can add it on our side, not a problem!

patron:PRO