EvolutionAPI / evolution-api

Evolution API is an open-source WhatsApp integration API
https://evolution-api.com
GNU General Public License v3.0
938 stars 484 forks source link

[PT][BUG] Fila Rabbit #500

Closed renatocoeli closed 1 month ago

renatocoeli commented 3 months ago

Ao ativar o rabbit é criada uma fila chamada group.participants.update [ com o . ]

Porém os eventos seguintes chegam uma fila chamada group-participants.update [ com o - ]

TiagoGouvea commented 3 months ago

Tentando entender outro problema achei essa issue... mas no código da Evolution, nem existe group.participants.update, apenas group-participants.update.

Mas, estou enfrentando justamente a situação de que não consigo receber a notificação quando sou incluido/removido de grupos.. talvez esteja ligado a isso ai.

TiagoGouvea commented 3 months ago

Fiz um teste agora, escutando todos os eventos, e ao incluir/remover a conta de um grupo não recebi nenhum evento, nem mesmo ao receber mensagens no grupo.

Ao enviar mensagem direta, recebi o evento certinho.

Minhas configurações no manager (todas opções disponíveis marcadas):

2024-04-01_17-52-57

Código usado (praticamente o mesmo da documentação:


import amqp from 'amqplib';

class RabbitMQConsumer {
    constructor(instanceName) {
        this.instanceName = instanceName;
        this.connection = null;
        this.channel = null;
    }

    async init() {
        try {
            this.connection = await amqp.connect(process.env.RABBITMQ_URI);
            this.channel = await this.connection.createChannel();

            await this.setupExchangesAndQueues();
        } catch (error) {
            console.log(`Error initializing RabbitMQConsumer: ${error}`);
        }
    }

    async setupExchangesAndQueues() {
        let queueBindings = this.getQueueBindings();

        for (let { queueName, bindingKey } of queueBindings) {
            await this.createQueue(queueName, bindingKey);
            this.consumeQueue(queueName);
        }
    }

    getQueueBindings() {
        return [
            // {
            //     queueName: `${instanceName}.state.instance`,
            //     bindingKey: "state.instance"
            // },
            {
                queueName: `${instanceName}.connection.update`,
                bindingKey: "state.instance"
            },
            {
                queueName: `${instanceName}.qrcode.update`,
                bindingKey: "qrcode.update"
            },
            {
                queueName: `${instanceName}.chats.upsert`,
                bindingKey: "chats.upsert"
            },
            {
                queueName: `${instanceName}.contacts.upsert`,
                bindingKey: "contacts.upsert"
            },
            {
                queueName: `${instanceName}.contacts.update`,
                bindingKey: "contacts.update"
            },
            {
                queueName: `${instanceName}.chats.set`,
                bindingKey: "chats.set"
            },
            {
                queueName: `${instanceName}.messages.set`,
                bindingKey: "messages.set"
            },
            {
                queueName: `${instanceName}.messages.upsert`,
                bindingKey: "messages.upsert"
            },
            {
                queueName: `${instanceName}.messages.update`,
                bindingKey: "messages.update"
            },
            {
                queueName: `${instanceName}.groups.upsert`,
                bindingKey: "groups.upsert"
            },       
            {
                queueName: `${instanceName}.group.update`,
                bindingKey: "groups.upsert"
            },
            {
                queueName: `${instanceName}.group.participants.update`,
                bindingKey: "groups.upsert"
            },
            {
                queueName: `${instanceName}.qrcode.updated`,
                bindingKey: "qrcode.updated"
            },
            {
                queueName: `${instanceName}.connection.update`,
                bindingKey: "connection.update"
            },
            {
                queueName: `${instanceName}.messages.upsert`,
                bindingKey: "messages.upsert"
            },
            {
                queueName: `${instanceName}.send.message`,
                bindingKey: "send.message"
            },
            // {
            //     queueName: `${instanceName}.messages.update`,
            //     bindingKey: "messages.update"
            // },
            // {
            //     queueName: `${instanceName}.messages.delete`,
            //     bindingKey: "messages.delete"
            // }
        ];
    }

    async createQueue(queueName, bindingKey) {
        const options = {
            durable: true,
            arguments: { 'x-queue-type': 'quorum' } // Adicione esta linha para definir o tipo da fila como 'quorum'
        };
        await this.channel.assertQueue(queueName, options);
        // await this.channel.assertQueue(queueName, { durable: true });
        // await this.channel.bindQueue(queueName, instanceName, bindingKey);
    }

    consumeQueue(queueName) {
        this.channel.consume(queueName, message => {
            if (message !== null) {
                console.log(`Received message from ${queueName}: ${message.content.toString()}`);
                this.channel.ack(message);
            }
        });
    }
}

// Uso
const rabbitMQConsumer = new RabbitMQConsumer(instanceName);
rabbitMQConsumer.init();
TiagoGouvea commented 3 months ago

Olhando as filas no rabbit..

sudo rabbitmqctl list_queues name
Listing queues for vhost / ...
name
tiago-dev.groups.upsert
tiago-dev.chats.upsert
tiago-dev.chats.set
tiago-dev.qrcode.updated
tiago-dev.chats.update
tiago-dev.group-participants.update
tiago-dev.messages.set
tiago-dev.contacts.upsert
tiago-dev.contacts.set
tiago-dev.messages.update
tiago-dev.connection.update
tiago-dev.group.update
tiago-dev.state.instance
tiago-dev.presence.update
tiago-dev.group.participants.update
tiago-dev.call
tiago-dev.send.message
tiago-dev.messages.upsert
tiago-dev.contacts.update
tiago-dev.qrcode.update
tiago-dev.application.startup
tiago-dev.chats.delete
tiago-dev.new.jwt.token
tiago-dev.messages.delete

Confirmam que existem as filas:

tiago-dev.groups.upsert
tiago-dev.group-participants.update
tiago-dev.group.update
tiago-dev.group.participants.update

E, mesmo escutando estas 4, não recebi nenhum evento.

Se alguém puder dar uma luz, agradeço!

TiagoGouvea commented 2 months ago

Se você também passa por isso, comenta ai.

Do nada o Rabbit para de receber eventos... dai vou lá reinicio tudo, desconecto, conecto novamente.. dai volta (não sei exatamente depois do que).

Agora mesmo, não estou conseguindo fazer voltar a funcionar.... envio mensagem pro numero, e não entra nenhum item novo na queue (olhando pelo RabbitMQ Management).

DavidsonGomes commented 1 month ago

Ja foi corrigido nas novas versões