mirror of
https://github.com/rodtanci/Disparador-de-Campanha-Chatwoot-Evolution.git
synced 2025-07-14 01:41:25 -06:00
Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d9044bdc37 | ||
![]() |
717ce79419 | ||
![]() |
14f8521c6c | ||
![]() |
adcf030101 | ||
![]() |
c0025d3ded | ||
![]() |
b4b671064f | ||
![]() |
4a4b358e29 | ||
![]() |
76e1069526 | ||
![]() |
e73e06f7e6 | ||
![]() |
53538fa5ce | ||
![]() |
b79a277c39 | ||
![]() |
d0bf8a2bec | ||
![]() |
0939984466 | ||
![]() |
347b6ae2cb | ||
![]() |
74f30681da | ||
![]() |
052f3efbcd | ||
![]() |
92455835c4 | ||
![]() |
bed5e8d960 | ||
![]() |
6b7b57fce1 | ||
![]() |
a705291045 | ||
![]() |
81127e1059 | ||
![]() |
f4cdf8bd2d |
File diff suppressed because it is too large
Load Diff
396
README-descontinuado.md
Normal file
396
README-descontinuado.md
Normal file
@ -0,0 +1,396 @@
|
|||||||
|
# 🚀 Disparador de Campanhas via WhatsApp 🚀
|
||||||
|
|
||||||
|
## 🌟 Introdução 🌟
|
||||||
|
|
||||||
|
O disparador de campanhas oferece uma forma eficiente e eficaz de gerenciar e enviar mensagens de campanha utilizando o ChatWoot. Esta solução é projetada para facilitar a comunicação com seus clientes, permitindo agendamento de campanhas, envio de mensagens personalizadas e acompanhamento de desempenho.
|
||||||
|
|
||||||
|
## Funcionalidades
|
||||||
|
|
||||||
|
### 📱 Campanhas dentro do ChatWoot
|
||||||
|
|
||||||
|
Integração completa com o ChatWoot para gerenciar suas campanhas diretamente dentro da plataforma.
|
||||||
|
|
||||||
|
### ⏰ Agendamento e Disparo Imediato
|
||||||
|
|
||||||
|
- Agende suas campanhas para uma data e hora específicas.
|
||||||
|
- Opção para disparo imediato, permitindo envios em tempo real.
|
||||||
|
|
||||||
|
### 🖼️ Envio de Imagem
|
||||||
|
|
||||||
|
- Possibilidade de incluir imagens nas mensagens da campanha.
|
||||||
|
- Suporte para múltiplos formatos de imagem (JPEG e PNG).
|
||||||
|
- Usar a variavel &img=linkdaimagem.jpg
|
||||||
|
|
||||||
|
### 📝 Envio de PDF
|
||||||
|
|
||||||
|
- Possibilidade de incluir PDF junto com uma mensagem.
|
||||||
|
- Usar a variavel &doc=linkdopdf.pdf
|
||||||
|
|
||||||
|
### 🎬 Envio de Video
|
||||||
|
|
||||||
|
- Possibilidade de incluir video nas mensagens da campanha.
|
||||||
|
- Usar a variavel &vid=linkdovideo.mp4
|
||||||
|
|
||||||
|
### 🔊 Envio de Audio
|
||||||
|
|
||||||
|
- Possibilidade de incluir audio nas mensagens da campanha.
|
||||||
|
- Usar a variavel &audio=linkdoaudio.mp3
|
||||||
|
|
||||||
|
### 📊 Limitador de Envios Diário por Empresa
|
||||||
|
|
||||||
|
- Defina um limite diário de envios para cada empresa.
|
||||||
|
- Evite sobrecarregar a utilização da VPS com o alto fluxo de mensagens.
|
||||||
|
|
||||||
|
### ⏳ Temporizador Randômico entre os Envios
|
||||||
|
|
||||||
|
- Adicione um temporizador randômico entre os envios para evitar detecção como spam e bloquear o número.
|
||||||
|
- (Lembrando que isso não é uma garantia de que você não possa perder seu número e sim uma solução para reduzir os riscos.)
|
||||||
|
|
||||||
|
### 🔄 Contador de Envios e Falhas
|
||||||
|
|
||||||
|
- Conta número de envios ✅.
|
||||||
|
- Conta número de falhas ❌.
|
||||||
|
|
||||||
|
### 🚫 Mensagem de Excesso de Limite Diário
|
||||||
|
|
||||||
|
- Envio automático de uma mensagem quando o limite diário de envios for excedido.
|
||||||
|
- Mantenha os administradores informados sobre o status das campanhas.
|
||||||
|
|
||||||
|
### 📋 Mensagem de Relatório da Campanha
|
||||||
|
|
||||||
|
- Receba uma mensagem avisando que o disparo da campanha foi iniciado.
|
||||||
|
- Receba um relatório detalhado ao final de cada campanha.
|
||||||
|
- Inclui número total de envios e falhas.
|
||||||
|
- Inclui número de disparos que restam no dia.
|
||||||
|
- Inclui os números que não enviaram com o nome do contato.
|
||||||
|
|
||||||
|
### 📝 Personalização com Nome e Email do Contato
|
||||||
|
|
||||||
|
- Use a variável (&nome) para personalizar as mensagens com o nome do contato.
|
||||||
|
- Use a variável (&email) para personalizar as mensagens com o email do contato.
|
||||||
|
- Aumente a personalização e eficácia das suas mensagens de campanha.
|
||||||
|
|
||||||
|
### 🏷️ Disparos através das Etiquetas dos Contatos
|
||||||
|
|
||||||
|
- Utilize as etiquetas dos contatos para segmentar e direcionar suas campanhas de maneira eficiente.
|
||||||
|
- Agrupe contatos com base em características específicas e envie mensagens direcionadas.
|
||||||
|
|
||||||
|
## 🎉 Benefícios 🎉
|
||||||
|
|
||||||
|
- **Automatização**: Reduza o trabalho manual com a automação de campanhas. 🤖
|
||||||
|
- **Personalização**: Melhore a experiência do cliente com mensagens personalizadas. 🎯
|
||||||
|
- **Eficiência**: Acompanhe o desempenho em tempo real e otimize suas campanhas. 📊
|
||||||
|
- **Integração**: Dispare campanhas diretamente pelo ChatWoot sem precisar abrir outro sistema, otimizando tempo e recursos. 🚀
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📘 Tutorial de Automação de Disparo de Campanhas
|
||||||
|
|
||||||
|
Vamos começar o tutorial para fazer a automação do sistema de disparo de campanhas usando o n8n e a Evolution API junto ao ChatWoot.
|
||||||
|
|
||||||
|
Antes de iniciar, certifique-se de que você já tem instalado:
|
||||||
|
|
||||||
|
- ChatWoot
|
||||||
|
- n8n
|
||||||
|
- Evolution API
|
||||||
|
- pgAdmin ou outro de sua preferência para acessar o banco de dados do Postgres
|
||||||
|
|
||||||
|
### Passo 1: Criar uma Caixa de Entrada de Canal SMS do Tipo Bandwidth
|
||||||
|
|
||||||
|
1. **Acesse o ChatWoot**: Faça login na sua conta do ChatWoot.
|
||||||
|
2. **Configurações**: Vá para a seção de configurações.
|
||||||
|
3. **Caixas de Entrada**: Selecione "Caixas de Entrada" no menu.
|
||||||
|
4. **Adicionar Nova Caixa de Entrada**: Clique no botão "Adicionar Nova Caixa de Entrada".
|
||||||
|
5. **Escolher Tipo de Canal**: Selecione "SMS" e escolha "Bandwidth" como o tipo de canal.
|
||||||
|
6. **Configurar Detalhes do Canal**:
|
||||||
|
- Nome da Caixa de Entrada: Disparador (ou o nome que preferir).
|
||||||
|
- Número de telefone: +741963
|
||||||
|
- ID da Conta: 741963
|
||||||
|
- ID da aplicação: 741963
|
||||||
|
- Chave API: 741963
|
||||||
|
- Chave secreta API: 741963
|
||||||
|
7. **Salvar Configurações**: Clique em "Criar canal Bandwidth" para criar a nova caixa de entrada.
|
||||||
|
|
||||||
|
### Passo 2: Adicionar Colunas no Banco de Dados do ChatWoot
|
||||||
|
|
||||||
|
1. **Acesse o Banco de Dados**: Use o pgAdmin ou outro software de sua preferência para acessar o banco de dados do ChatWoot.
|
||||||
|
2. **Adicionar Coluna na Tabela Accounts**:
|
||||||
|
- Execute o seguinte comando SQL para adicionar a coluna `limite_disparo`:
|
||||||
|
```sql
|
||||||
|
ALTER TABLE accounts
|
||||||
|
ADD COLUMN limite_disparo INTEGER NOT NULL DEFAULT 100;
|
||||||
|
```
|
||||||
|
3. **Adicionar Colunas na Tabela Campaigns**:
|
||||||
|
- Execute os seguintes comandos SQL para adicionar as colunas `status_envia`, `enviou` e `falhou`:
|
||||||
|
```sql
|
||||||
|
ALTER TABLE campaigns
|
||||||
|
ADD COLUMN status_envia INTEGER NOT NULL DEFAULT 0;
|
||||||
|
|
||||||
|
ALTER TABLE campaigns
|
||||||
|
ADD COLUMN enviou INTEGER NOT NULL DEFAULT 0;
|
||||||
|
|
||||||
|
ALTER TABLE campaigns
|
||||||
|
ADD COLUMN falhou INTEGER NOT NULL DEFAULT 0;
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Adicionar nova Tabela para guardar os envios que falharem**:
|
||||||
|
- Execute o seguinte comando SQL para adicionar a tabela campaigns_failled:
|
||||||
|
```sql
|
||||||
|
-- Cria a sequência
|
||||||
|
CREATE SEQUENCE campaigns_failled_id_seq;
|
||||||
|
|
||||||
|
-- Cria a tabela com a coluna `id` usando a sequência criada
|
||||||
|
CREATE TABLE campaigns_failled (
|
||||||
|
id BIGINT PRIMARY KEY NOT NULL DEFAULT nextval('campaigns_failled_id_seq'::regclass),
|
||||||
|
nomecontato TEXT NOT NULL,
|
||||||
|
telefone CHARACTER VARYING NOT NULL,
|
||||||
|
id_campanha INTEGER NOT NULL
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🛠️ OBRIGATORIO ❗ - 🚨 CORREÇÃO NO BANCO DE DADOS DO CHATWOOT ⚠️
|
||||||
|
### Após aplicar esta correção é recomendavel recriar as etiquetas (marcadores).
|
||||||
|
|
||||||
|
- Foi notado que os ID da tabela "labels" não condizia com os id ta tabela "tags" sendo assim criei algumas funções e triggers que corrigem esse problema.
|
||||||
|
|
||||||
|
5. **Criação das Funções de Replicação, Exclusão e Atualização**
|
||||||
|
|
||||||
|
***Cria na raiz do banco de dados***
|
||||||
|
|
||||||
|
**Função para replicar inserções:**
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE OR REPLACE FUNCTION replicate_labels_to_tags()
|
||||||
|
RETURNS TRIGGER AS $$
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO tags (id, name)
|
||||||
|
VALUES (NEW.id, NEW.title);
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
```
|
||||||
|
|
||||||
|
**Função para replicar exclusões:**
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE OR REPLACE FUNCTION delete_labels_from_tags_and_taggings()
|
||||||
|
RETURNS TRIGGER AS $$
|
||||||
|
BEGIN
|
||||||
|
-- Exclui da tabela tags
|
||||||
|
DELETE FROM tags WHERE id = OLD.id;
|
||||||
|
-- Exclui da tabela taggings
|
||||||
|
DELETE FROM taggings WHERE tag_id = OLD.id;
|
||||||
|
RETURN OLD;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
```
|
||||||
|
|
||||||
|
**Função para replicar atualizações:**
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE OR REPLACE FUNCTION update_labels_to_tags()
|
||||||
|
RETURNS TRIGGER AS $$
|
||||||
|
BEGIN
|
||||||
|
UPDATE tags
|
||||||
|
SET name = NEW.title
|
||||||
|
WHERE id = NEW.id;
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **Criação dos Triggers**
|
||||||
|
|
||||||
|
***Criar na tabela labels***
|
||||||
|
|
||||||
|
**Trigger para inserções:**
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TRIGGER after_insert_labels
|
||||||
|
AFTER INSERT ON labels
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION replicate_labels_to_tags();
|
||||||
|
```
|
||||||
|
|
||||||
|
**Trigger para exclusões:**
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TRIGGER after_delete_labels
|
||||||
|
AFTER DELETE ON labels
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION delete_labels_from_tags_and_taggings();
|
||||||
|
```
|
||||||
|
|
||||||
|
**Trigger para atualizações:**
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TRIGGER after_update_labels
|
||||||
|
AFTER UPDATE ON labels
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION update_labels_to_tags();
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Passo 3: Importar Workflows no n8n
|
||||||
|
|
||||||
|
1. **Acesse o n8n**: Faça login na sua instância do n8n.
|
||||||
|
2. **Adicionar Novo Workflow**:
|
||||||
|
- Clique em "Add Workflow".
|
||||||
|
3. **Importar Workflow**:
|
||||||
|
- Clique nos três pontinhos no canto superior direito.
|
||||||
|
- Selecione "Import from File".
|
||||||
|
4. **Importar o Fluxo Disparador**:
|
||||||
|
- Importe o arquivo de workflow disparador.json.
|
||||||
|
5. **Importar o Fluxo Reset-Limite-Campanhas**:
|
||||||
|
- Repita os passos acima e importe o reset-limite-campanha.json.
|
||||||
|
|
||||||
|
### Passo 4: Editar o Workflow Disparador no n8n
|
||||||
|
|
||||||
|
1. **Acesse o Workflow Disparador**: No n8n, abra o workflow Disparador que você importou.
|
||||||
|
2. **Editar Nó Info_Base**:
|
||||||
|
- Preencha os seguintes campos com suas informações:
|
||||||
|
- **URL do ChatWoot**
|
||||||
|
- **URL da Evolution API**
|
||||||
|
- **Token de acesso da conta do ChatWoot**
|
||||||
|
- **Global API KEY da Evolution API**
|
||||||
|
- **Nome da Caixa de Entrada cadastrada na Evolution API que vai disparar as mensagens**
|
||||||
|
- **ID da conta do ChatWoot**
|
||||||
|
- **Email que vai receber o relatório**
|
||||||
|
- **Número do WhatsApp que vai receber o relatório**
|
||||||
|
3. **Editar Nó Buscar campanhas**:
|
||||||
|
- Edite "account_id" pelo id da instancia do ChatWoot.
|
||||||
|
- Edite "inbox_id" pelo id da caixa de entrada do disparador que voce crio no **Passo 1**.
|
||||||
|
4. **Conectar Nós do Postgres ao Banco de Dados do ChatWoot**:
|
||||||
|
- Conecte todos os nós do Postgres ao banco de dados do ChatWoot, garantindo que as informações fluam corretamente entre os sistemas.
|
||||||
|
|
||||||
|
### Passo 5: Editar o Workflow reset-limite-campanha no n8n
|
||||||
|
|
||||||
|
1. **Acesse o Workflow reset-limite-campanha**: No n8n, abra o workflow reset-limite-campanha que você importou.
|
||||||
|
2. **Conectar Nós do Postgres ao Banco de Dados do ChatWoot**:
|
||||||
|
- Conecte todos os nós do Postgres ao banco de dados do ChatWoot, garantindo que as informações sejam atualizadas corretamente para resetar o limite de disparo diário.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Agora que os workflows foram importados, configurados e editados, sua automação de disparo de campanhas está pronta para funcionar!
|
||||||
|
|
||||||
|
## 📢 Cadastro de uma Nova Campanha no ChatWoot
|
||||||
|
|
||||||
|
Para criar uma campanha, siga os passos abaixo:
|
||||||
|
|
||||||
|
1. **Clique em Campanhas**: Acesse a seção de Campanhas no ChatWoot.
|
||||||
|
2. **Clique em Única**: Selecione a opção "Única".
|
||||||
|
3. **Clique em Criar uma campanha única**: Adicione as informações da sua campanha.
|
||||||
|
- **Título**: Insira o título da campanha.
|
||||||
|
- **Mensagem**: Digite a mensagem que quer enviar na campanha.
|
||||||
|
- Para adicionar o nome do contato à mensagem, digite `&nome`.
|
||||||
|
- Para adicionar o email do contato à mensagem, digite `&email`.
|
||||||
|
- Para adicionar uma imagem, digite `&img=urldaimagemaqui.jpg`.
|
||||||
|
- Para adicionar um video, digite `&vid=urldovideo.mp4`.
|
||||||
|
- Para adicionar um pdf, digite `&doc=urldopdf.pdf`.
|
||||||
|
|
||||||
|
### Exemplo de uso imagem:
|
||||||
|
|
||||||
|
"_Olá &nome, tudo bem?_
|
||||||
|
_Você já viu esta bela paisagem?_
|
||||||
|
|
||||||
|
_&img=https://img.freepik.com/fotos-gratis/paisagem-de-nevoeiro-matinal-e-montanhas-com-baloes-de-ar-quente-ao-nascer-do-sol_335224-794.jpg_"
|
||||||
|
|
||||||
|
### Exemplo de uso pdf:
|
||||||
|
|
||||||
|
"_Olá &nome, tudo bem?_
|
||||||
|
_Segue o nosso catalogo em PDF?_
|
||||||
|
|
||||||
|
_&doc=https://evolution-api.com/files/evolution-api.pdf_"
|
||||||
|
|
||||||
|
### Exemplo de uso video:
|
||||||
|
|
||||||
|
"_Olá &nome, tudo bem?_
|
||||||
|
Você já viu esse vídeo??_
|
||||||
|
|
||||||
|
_&vid=https://evolution-api.com/files/video.mp4_"
|
||||||
|
|
||||||
|
4. **Selecionar Caixa de Entrada**: No campo "Selecionar caixa de entrada", selecione a caixa de SMS que você criou no início do tutorial.
|
||||||
|
5. **Público**: Selecione a etiqueta que está atribuída aos contatos que quer disparar a campanha.
|
||||||
|
6. **Horário Agendado**: Selecione o dia e a hora que quer disparar a campanha. Caso queira disparar a campanha na mesma hora, selecione a data e a hora atual.
|
||||||
|
7. **Clique em Criar**: Finalize a criação da campanha.
|
||||||
|
|
||||||
|
Agora tudo está pronto para enviar a sua campanha!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📅 Roadmap do Projeto
|
||||||
|
|
||||||
|
### Versão 1.1 🚀
|
||||||
|
|
||||||
|
**Mensagem de Início de Disparo**
|
||||||
|
- Implementar uma mensagem que indique o início do disparo da campanha para notificar os usuários sobre o processo inicial.
|
||||||
|
|
||||||
|
**Correção no limitador**
|
||||||
|
- Correção no limitador de disparo, foi encontrado um erro que ele rouba 1 limite da conta quando chega em 1.
|
||||||
|
|
||||||
|
### Versão 1.2 💡
|
||||||
|
|
||||||
|
**Relatório de Finalização por Email**
|
||||||
|
- Adicionar funcionalidade para enviar um relatório por email ao final da campanha, detalhando métricas e resultados.
|
||||||
|
|
||||||
|
**Inclusão do Limite de Disparos Diários no Relatório**
|
||||||
|
- Introduzir no relatório o número restante de disparos diários disponíveis, fornecendo transparência sobre os limites e uso.
|
||||||
|
|
||||||
|
### Versão 1.3 📊
|
||||||
|
|
||||||
|
**Adicionando variável**
|
||||||
|
- Vamos adicionar a variável &email para conseguir personalizar mais ainda a mensagem.
|
||||||
|
|
||||||
|
### Versão 1.4 🚨
|
||||||
|
|
||||||
|
**Relatório de Falhas de Envio**
|
||||||
|
- Desenvolver um relatório específico que liste os contatos que falharam no envio, incluindo nome e telefone, para análise e correção.
|
||||||
|
|
||||||
|
### Versão 1.5 📑
|
||||||
|
|
||||||
|
**Envio de PDF**
|
||||||
|
- Incluir a inserção de um arquivo pdf dentro da campanha.
|
||||||
|
|
||||||
|
### Versão 1.6 🎬
|
||||||
|
|
||||||
|
**Envio de VIDEO**
|
||||||
|
- Incluir a inserção de video dentro da campanha.
|
||||||
|
|
||||||
|
### Versão 1.7 🔊
|
||||||
|
|
||||||
|
**Envio de AUDIO**
|
||||||
|
- Incluir a inserção de audio dentro da campanha.
|
||||||
|
|
||||||
|
### Versão 1.8 🏷️🏷️
|
||||||
|
|
||||||
|
**Multiplas etiquetas**
|
||||||
|
- Disparar campanha para mais de uma etiqueta.
|
||||||
|
|
||||||
|
### Versão 1.9 📇💬 (Já disponível)
|
||||||
|
|
||||||
|
**Buscar etiquetas na conversa**
|
||||||
|
- Agora alem de buscar a etiqueta do contato ele busca nas conversas.
|
||||||
|
**Envia campanha para grupos**
|
||||||
|
- Agora suas campanhas tambem serão enviadas para grupos do whatsapp.
|
||||||
|
|
||||||
|
### Versão 2.0 🌟
|
||||||
|
|
||||||
|
**Envio de Mensagens Dinâmicas**
|
||||||
|
- Possibilidade de cadastrar mais de uma mensagem dentro do template para disparar de forma aleatória, evitando bloqueio do número.
|
||||||
|
|
||||||
|
**Disparo por Múltiplos Números de WhatsApp**
|
||||||
|
- Permitir o disparo de campanhas através de mais de um número de WhatsApp, melhorando a capacidade de gestão e distribuição das mensagens.
|
||||||
|
|
||||||
|
### Considerações Finais 🛠️
|
||||||
|
- Este roadmap pode ser ajustado conforme novas ideias surjam ou prioridades se alterem durante o desenvolvimento. Cada etapa visa melhorar a funcionalidade e a eficiência do disparador de campanhas, proporcionando uma experiência mais completa e eficaz aos usuários.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Apoio ao Projeto
|
||||||
|
|
||||||
|
Quem quiser apoiar o projeto com dicas de melhorias e reportar alguma falha pode me acionar pelo grupo do WhatsApp.
|
||||||
|
|
||||||
|
_https://chat.whatsapp.com/H2as2v9yHre8U2gjNaCWRc_
|
||||||
|
|
||||||
|
Caso alguém queira contribuir de forma monetária, o chave PIX aleatoria: **a0db6d5c-625b-4846-ba9a-3e06ccc6b1d4**
|
172
README.md
172
README.md
@ -1,4 +1,4 @@
|
|||||||
# 🚀 Disparador de Campanhas via WhatsApp 🚀
|
# 🚀 Disparador de Campanhas via WhatsApp [SAAS]🚀
|
||||||
|
|
||||||
## 🌟 Introdução 🌟
|
## 🌟 Introdução 🌟
|
||||||
|
|
||||||
@ -31,6 +31,11 @@ Integração completa com o ChatWoot para gerenciar suas campanhas diretamente d
|
|||||||
- Possibilidade de incluir video nas mensagens da campanha.
|
- Possibilidade de incluir video nas mensagens da campanha.
|
||||||
- Usar a variavel &vid=linkdovideo.mp4
|
- Usar a variavel &vid=linkdovideo.mp4
|
||||||
|
|
||||||
|
### 🔊 Envio de Audio
|
||||||
|
|
||||||
|
- Possibilidade de incluir audio nas mensagens da campanha.
|
||||||
|
- Usar a variavel &audio=linkdoaudio.mp3
|
||||||
|
|
||||||
### 📊 Limitador de Envios Diário por Empresa
|
### 📊 Limitador de Envios Diário por Empresa
|
||||||
|
|
||||||
- Defina um limite diário de envios para cada empresa.
|
- Defina um limite diário de envios para cada empresa.
|
||||||
@ -99,11 +104,11 @@ Antes de iniciar, certifique-se de que você já tem instalado:
|
|||||||
5. **Escolher Tipo de Canal**: Selecione "SMS" e escolha "Bandwidth" como o tipo de canal.
|
5. **Escolher Tipo de Canal**: Selecione "SMS" e escolha "Bandwidth" como o tipo de canal.
|
||||||
6. **Configurar Detalhes do Canal**:
|
6. **Configurar Detalhes do Canal**:
|
||||||
- Nome da Caixa de Entrada: Disparador (ou o nome que preferir).
|
- Nome da Caixa de Entrada: Disparador (ou o nome que preferir).
|
||||||
- Número de telefone: +741963
|
- Número de telefone: +741963 (NUMERAÇÃO ALEATÓRIA)
|
||||||
- ID da Conta: 741963
|
- ID da Conta: 1 (ID DA CAIXA DE ENTRADA CADASTRADA NO CHATWOOT QUE VAI MANDAR AS MENSAGENS)
|
||||||
- ID da aplicação: 741963
|
- ID da aplicação: Instancia (NOME DA INSTACIA NA EVOLUTION)
|
||||||
- Chave API: 741963
|
- Chave API: +5511934849643 (NUMERO DE WHATSAPP PARA RECEBER O RELATORIO)
|
||||||
- Chave secreta API: 741963
|
- Chave secreta API: email@exemplo.com (EMAIL PARA RECEBER O RELATORIO)
|
||||||
7. **Salvar Configurações**: Clique em "Criar canal Bandwidth" para criar a nova caixa de entrada.
|
7. **Salvar Configurações**: Clique em "Criar canal Bandwidth" para criar a nova caixa de entrada.
|
||||||
|
|
||||||
### Passo 2: Adicionar Colunas no Banco de Dados do ChatWoot
|
### Passo 2: Adicionar Colunas no Banco de Dados do ChatWoot
|
||||||
@ -113,10 +118,10 @@ Antes de iniciar, certifique-se de que você já tem instalado:
|
|||||||
- Execute o seguinte comando SQL para adicionar a coluna `limite_disparo`:
|
- Execute o seguinte comando SQL para adicionar a coluna `limite_disparo`:
|
||||||
```sql
|
```sql
|
||||||
ALTER TABLE accounts
|
ALTER TABLE accounts
|
||||||
ADD COLUMN limite_disparo INTEGER NOT NULL DEFAULT 100;
|
ADD COLUMN limite_disparo INTEGER NOT NULL DEFAULT 500;
|
||||||
```
|
```
|
||||||
3. **Adicionar Colunas na Tabela Campaigns**:
|
3. **Adicionar Colunas na Tabela campaigns**:
|
||||||
- Execute os seguintes comandos SQL para adicionar as colunas `status_envia`, `enviou` e `falhou`:
|
- Execute os seguintes comandos SQL para adicionar as colunas status_envia, enviou e falhou na tabela campaigns:
|
||||||
```sql
|
```sql
|
||||||
ALTER TABLE campaigns
|
ALTER TABLE campaigns
|
||||||
ADD COLUMN status_envia INTEGER NOT NULL DEFAULT 0;
|
ADD COLUMN status_envia INTEGER NOT NULL DEFAULT 0;
|
||||||
@ -127,7 +132,6 @@ Antes de iniciar, certifique-se de que você já tem instalado:
|
|||||||
ALTER TABLE campaigns
|
ALTER TABLE campaigns
|
||||||
ADD COLUMN falhou INTEGER NOT NULL DEFAULT 0;
|
ADD COLUMN falhou INTEGER NOT NULL DEFAULT 0;
|
||||||
```
|
```
|
||||||
|
|
||||||
4. **Adicionar nova Tabela para guardar os envios que falharem**:
|
4. **Adicionar nova Tabela para guardar os envios que falharem**:
|
||||||
- Execute o seguinte comando SQL para adicionar a tabela campaigns_failled:
|
- Execute o seguinte comando SQL para adicionar a tabela campaigns_failled:
|
||||||
```sql
|
```sql
|
||||||
@ -143,88 +147,6 @@ Antes de iniciar, certifique-se de que você já tem instalado:
|
|||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🛠️ OBRIGATORIO ❗ - 🚨 CORREÇÃO NO BANCO DE DADOS DO CHATWOOT ⚠️
|
|
||||||
### Após aplicar esta correção é recomendavel recriar as etiquetas (marcadores).
|
|
||||||
|
|
||||||
- Foi notado que os ID da tabela "labels" não condizia com os id ta tabela "tags" sendo assim criei algumas funções e triggers que corrigem esse problema.
|
|
||||||
|
|
||||||
5. **Criação das Funções de Replicação, Exclusão e Atualização**
|
|
||||||
|
|
||||||
***Cria na raiz do banco de dados***
|
|
||||||
|
|
||||||
**Função para replicar inserções:**
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE OR REPLACE FUNCTION replicate_labels_to_tags()
|
|
||||||
RETURNS TRIGGER AS $$
|
|
||||||
BEGIN
|
|
||||||
INSERT INTO tags (id, name)
|
|
||||||
VALUES (NEW.id, NEW.title);
|
|
||||||
RETURN NEW;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql;
|
|
||||||
```
|
|
||||||
|
|
||||||
**Função para replicar exclusões:**
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE OR REPLACE FUNCTION delete_labels_from_tags_and_taggings()
|
|
||||||
RETURNS TRIGGER AS $$
|
|
||||||
BEGIN
|
|
||||||
-- Exclui da tabela tags
|
|
||||||
DELETE FROM tags WHERE id = OLD.id;
|
|
||||||
-- Exclui da tabela taggings
|
|
||||||
DELETE FROM taggings WHERE tag_id = OLD.id;
|
|
||||||
RETURN OLD;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql;
|
|
||||||
```
|
|
||||||
|
|
||||||
**Função para replicar atualizações:**
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE OR REPLACE FUNCTION update_labels_to_tags()
|
|
||||||
RETURNS TRIGGER AS $$
|
|
||||||
BEGIN
|
|
||||||
UPDATE tags
|
|
||||||
SET name = NEW.title
|
|
||||||
WHERE id = NEW.id;
|
|
||||||
RETURN NEW;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql;
|
|
||||||
```
|
|
||||||
|
|
||||||
6. **Criação dos Triggers**
|
|
||||||
|
|
||||||
***Criar na tabela labels***
|
|
||||||
|
|
||||||
**Trigger para inserções:**
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE TRIGGER after_insert_labels
|
|
||||||
AFTER INSERT ON labels
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION replicate_labels_to_tags();
|
|
||||||
```
|
|
||||||
|
|
||||||
**Trigger para exclusões:**
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE TRIGGER after_delete_labels
|
|
||||||
AFTER DELETE ON labels
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION delete_labels_from_tags_and_taggings();
|
|
||||||
```
|
|
||||||
|
|
||||||
**Trigger para atualizações:**
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE TRIGGER after_update_labels
|
|
||||||
AFTER UPDATE ON labels
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION update_labels_to_tags();
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Passo 3: Importar Workflows no n8n
|
### Passo 3: Importar Workflows no n8n
|
||||||
@ -243,20 +165,18 @@ Antes de iniciar, certifique-se de que você já tem instalado:
|
|||||||
### Passo 4: Editar o Workflow Disparador no n8n
|
### Passo 4: Editar o Workflow Disparador no n8n
|
||||||
|
|
||||||
1. **Acesse o Workflow Disparador**: No n8n, abra o workflow Disparador que você importou.
|
1. **Acesse o Workflow Disparador**: No n8n, abra o workflow Disparador que você importou.
|
||||||
2. **Editar Nó Info_Base**:
|
2. **Editar o primeiro nó do postgres Buscar campanhas**
|
||||||
|
- Alterar na linha "select * from campaigns c where campaign_type = 1 and status_envia = 0 and account_id = 1"
|
||||||
|
- altere o valor e account_id para o ID da conta do chatwoot.
|
||||||
|
4. **Editar Nó Info_Base**:
|
||||||
- Preencha os seguintes campos com suas informações:
|
- Preencha os seguintes campos com suas informações:
|
||||||
- **URL do ChatWoot**
|
- **URL do ChatWoot**
|
||||||
- **URL da Evolution API**
|
- **URL da Evolution API**
|
||||||
|
- **URL do view Typebot**
|
||||||
- **Token de acesso da conta do ChatWoot**
|
- **Token de acesso da conta do ChatWoot**
|
||||||
- **Global API KEY da Evolution API**
|
- **Global API KEY da Evolution API**
|
||||||
- **Nome da Caixa de Entrada cadastrada na Evolution API que vai disparar as mensagens**
|
- **Email que vai enviar o relatório**
|
||||||
- **ID da conta do ChatWoot**
|
5. **Conectar Nós do Postgres ao Banco de Dados do ChatWoot**:
|
||||||
- **Email que vai receber o relatório**
|
|
||||||
- **Número do WhatsApp que vai receber o relatório**
|
|
||||||
3. **Editar Nó Buscar campanhas**:
|
|
||||||
- Edite "account_id" pelo id da instancia do ChatWoot.
|
|
||||||
- Edite "inbox_id" pelo id da caixa de entrada do disparador que voce crio no **Passo 1**.
|
|
||||||
4. **Conectar Nós do Postgres ao Banco de Dados do ChatWoot**:
|
|
||||||
- Conecte todos os nós do Postgres ao banco de dados do ChatWoot, garantindo que as informações fluam corretamente entre os sistemas.
|
- Conecte todos os nós do Postgres ao banco de dados do ChatWoot, garantindo que as informações fluam corretamente entre os sistemas.
|
||||||
|
|
||||||
### Passo 5: Editar o Workflow reset-limite-campanha no n8n
|
### Passo 5: Editar o Workflow reset-limite-campanha no n8n
|
||||||
@ -264,6 +184,8 @@ Antes de iniciar, certifique-se de que você já tem instalado:
|
|||||||
1. **Acesse o Workflow reset-limite-campanha**: No n8n, abra o workflow reset-limite-campanha que você importou.
|
1. **Acesse o Workflow reset-limite-campanha**: No n8n, abra o workflow reset-limite-campanha que você importou.
|
||||||
2. **Conectar Nós do Postgres ao Banco de Dados do ChatWoot**:
|
2. **Conectar Nós do Postgres ao Banco de Dados do ChatWoot**:
|
||||||
- Conecte todos os nós do Postgres ao banco de dados do ChatWoot, garantindo que as informações sejam atualizadas corretamente para resetar o limite de disparo diário.
|
- Conecte todos os nós do Postgres ao banco de dados do ChatWoot, garantindo que as informações sejam atualizadas corretamente para resetar o limite de disparo diário.
|
||||||
|
- Se desejar altere o limite de envio diario dentro do nó do postgres.
|
||||||
|
- Recomendação para não sobrecarregar o worflow 500 disparos seguidos.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -305,6 +227,13 @@ Você já viu esse vídeo??_
|
|||||||
|
|
||||||
_&vid=https://evolution-api.com/files/video.mp4_"
|
_&vid=https://evolution-api.com/files/video.mp4_"
|
||||||
|
|
||||||
|
### Exemplo de uso typebot:
|
||||||
|
|
||||||
|
"&typebot=id_da_url_do_fluxo_do_typebot"
|
||||||
|
|
||||||
|
Exemplo url: https://chatbotapi.cubochat.com.br/fluxotypebot
|
||||||
|
Usar: fluxotypebot
|
||||||
|
|
||||||
4. **Selecionar Caixa de Entrada**: No campo "Selecionar caixa de entrada", selecione a caixa de SMS que você criou no início do tutorial.
|
4. **Selecionar Caixa de Entrada**: No campo "Selecionar caixa de entrada", selecione a caixa de SMS que você criou no início do tutorial.
|
||||||
5. **Público**: Selecione a etiqueta que está atribuída aos contatos que quer disparar a campanha.
|
5. **Público**: Selecione a etiqueta que está atribuída aos contatos que quer disparar a campanha.
|
||||||
6. **Horário Agendado**: Selecione o dia e a hora que quer disparar a campanha. Caso queira disparar a campanha na mesma hora, selecione a data e a hora atual.
|
6. **Horário Agendado**: Selecione o dia e a hora que quer disparar a campanha. Caso queira disparar a campanha na mesma hora, selecione a data e a hora atual.
|
||||||
@ -347,18 +276,41 @@ Agora tudo está pronto para enviar a sua campanha!
|
|||||||
**Envio de PDF**
|
**Envio de PDF**
|
||||||
- Incluir a inserção de um arquivo pdf dentro da campanha.
|
- Incluir a inserção de um arquivo pdf dentro da campanha.
|
||||||
|
|
||||||
### Versão 1.6 (Já Disponível) 📑
|
### Versão 1.6 🎬
|
||||||
|
|
||||||
**Envio de PDF**
|
**Envio de VIDEO**
|
||||||
- Incluir a inserção de video dentro da campanha.
|
- Incluir a inserção de video dentro da campanha.
|
||||||
|
|
||||||
### Versão 2.0 🌟
|
### Versão 1.7 🔊
|
||||||
|
|
||||||
**Envio de Mensagens Dinâmicas**
|
**Envio de AUDIO**
|
||||||
- Possibilidade de cadastrar mais de uma mensagem dentro do template para disparar de forma aleatória, evitando bloqueio do número.
|
- Incluir a inserção de audio dentro da campanha.
|
||||||
|
|
||||||
**Disparo por Múltiplos Números de WhatsApp**
|
### Versão 1.8 🏷️🏷️
|
||||||
- Permitir o disparo de campanhas através de mais de um número de WhatsApp, melhorando a capacidade de gestão e distribuição das mensagens.
|
|
||||||
|
**Multiplas etiquetas**
|
||||||
|
- Disparar campanha para mais de uma etiqueta.
|
||||||
|
|
||||||
|
### Versão 1.9 📇💬 (Já disponível)
|
||||||
|
|
||||||
|
**Buscar etiquetas na conversa**
|
||||||
|
- Agora alem de buscar a etiqueta do contato ele busca nas conversas.
|
||||||
|
**Envia campanha para grupos**
|
||||||
|
- Agora suas campanhas tambem serão enviadas para grupos do whatsapp.
|
||||||
|
|
||||||
|
### Versão 2.0 [SAAS] 🌟
|
||||||
|
|
||||||
|
**Apenas um workflow por instancia**
|
||||||
|
- Este workflow foi desenvolvido para funcionar de forma centralizada com toda a instância do Chatwoot, eliminando a necessidade de criar um novo fluxo no n8n para cada caixa de entrada individual.
|
||||||
|
|
||||||
|
- Com esse modelo SaaS, é possível disparar campanhas por todos os números conectados à plataforma de forma unificada. Basta apenas criar as caixas de entrada (SMS) desejadas no Chatwoot, configurar os respectivos disparadores e informar corretamente o Application ID, que deve ser o nome da caixa de entrada cadastrada na Evolution API.
|
||||||
|
|
||||||
|
- Dessa forma, o envio de mensagens é direcionado automaticamente para o número vinculado à caixa de entrada correspondente, garantindo escalabilidade, agilidade e padronização no processo de campanhas.
|
||||||
|
|
||||||
|
### Versão 2.1 🤖 (Já disponível)
|
||||||
|
|
||||||
|
**Envia fluxo de mensagem do typebot**
|
||||||
|
- Agora você pode enviar fluxo de typebot ao invés de mensagem única.
|
||||||
|
|
||||||
### Considerações Finais 🛠️
|
### Considerações Finais 🛠️
|
||||||
- Este roadmap pode ser ajustado conforme novas ideias surjam ou prioridades se alterem durante o desenvolvimento. Cada etapa visa melhorar a funcionalidade e a eficiência do disparador de campanhas, proporcionando uma experiência mais completa e eficaz aos usuários.
|
- Este roadmap pode ser ajustado conforme novas ideias surjam ou prioridades se alterem durante o desenvolvimento. Cada etapa visa melhorar a funcionalidade e a eficiência do disparador de campanhas, proporcionando uma experiência mais completa e eficaz aos usuários.
|
||||||
@ -371,4 +323,6 @@ Quem quiser apoiar o projeto com dicas de melhorias e reportar alguma falha pode
|
|||||||
|
|
||||||
_https://chat.whatsapp.com/H2as2v9yHre8U2gjNaCWRc_
|
_https://chat.whatsapp.com/H2as2v9yHre8U2gjNaCWRc_
|
||||||
|
|
||||||
Caso alguém queira contribuir de forma monetária, o chave PIX aleatoria: **a0db6d5c-625b-4846-ba9a-3e06ccc6b1d4**
|
Canal do Youtube: https://www.youtube.com/@RodrigoTanci
|
||||||
|
|
||||||
|
Caso alguém queira contribuir de forma monetária, o chave PIX CNPJ: **36799434000140**
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -24,7 +24,7 @@
|
|||||||
{
|
{
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"operation": "executeQuery",
|
"operation": "executeQuery",
|
||||||
"query": "UPDATE accounts\nSET limite_disparo = 100",
|
"query": "UPDATE accounts\nSET limite_disparo = 500",
|
||||||
"options": {}
|
"options": {}
|
||||||
},
|
},
|
||||||
"id": "b9b20a59-d5ad-4983-8f97-80174ad3d0c9",
|
"id": "b9b20a59-d5ad-4983-8f97-80174ad3d0c9",
|
||||||
|
1
typebot-modelo.json
Normal file
1
typebot-modelo.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":"6.1","id":"uq9fgipz32gnc7jbu3dc38zc","name":"CAMPANHA (1)","events":[{"id":"jpua3e54x51tlqobmyiudqg1","outgoingEdgeId":"u5e2q4d5dxnqbfsgkytfgtz7","graphCoordinates":{"x":-333.99,"y":-214.66},"type":"start"}],"groups":[{"id":"co2rqdvhmrwz7k0bd7x7m7fd","title":"Group #6","graphCoordinates":{"x":-18.69,"y":-216.84},"blocks":[{"id":"o5m1aabszu0vepempv6zvqcr","type":"Set variable","options":{"variableId":"axbvrx2i2td8tajcgi4cd2rw","type":"Custom","expressionToEvaluate":"{{pushName}}","isCode":true}},{"id":"zd8k7hj6iplvwtjwj46issel","outgoingEdgeId":"husvshc9g61a6hnwf9se3my3","type":"text","content":{"richText":[{"type":"p","children":[{"text":"Olá {{pushName}}, tudo bem??"}]},{"type":"p","children":[{"text":""}]}]}}]},{"id":"vze99luuygwt52d7ijyzh75a","graphCoordinates":{"x":-29.13,"y":37.13},"title":"Group #2","blocks":[{"id":"mvwtd1epmy2o7qn4c4zzu19t","type":"text","content":{"richText":[{"type":"p","children":[{"text":"mensagem 2"}]}]},"outgoingEdgeId":"ye6qtu6vgc9aax7xj0r6q8md"}]},{"id":"z235phvb4gjyh4l8l1oave3k","graphCoordinates":{"x":-25.549523809524675,"y":229.99476190476238},"title":"Group #3","blocks":[{"id":"o5hso6hvmasscdeaqqur8752","type":"text","content":{"richText":[{"type":"p","children":[{"text":"mensagem 3"}]}]}}]}],"edges":[{"id":"u5e2q4d5dxnqbfsgkytfgtz7","from":{"eventId":"jpua3e54x51tlqobmyiudqg1"},"to":{"groupId":"co2rqdvhmrwz7k0bd7x7m7fd"}},{"from":{"blockId":"zd8k7hj6iplvwtjwj46issel"},"to":{"groupId":"vze99luuygwt52d7ijyzh75a"},"id":"husvshc9g61a6hnwf9se3my3"},{"from":{"blockId":"mvwtd1epmy2o7qn4c4zzu19t"},"to":{"groupId":"z235phvb4gjyh4l8l1oave3k"},"id":"ye6qtu6vgc9aax7xj0r6q8md"}],"variables":[{"id":"axbvrx2i2td8tajcgi4cd2rw","name":"pushName","isSessionVariable":true},{"id":"vsg4gfav575x3lzwe3xxjh0s","name":"horaHoje","isSessionVariable":false},{"id":"ricgkhg1lxza1b4arz56xoq1","name":"horaAmanha","isSessionVariable":false}],"theme":{},"selectedThemeTemplateId":null,"settings":{},"createdAt":"2025-05-06T23:17:24.574Z","updatedAt":"2025-05-06T23:17:24.574Z","icon":null,"folderId":"cm8yz6gjs000o13ppx6ffdfql","publicId":null,"customDomain":null,"workspaceId":"cm8yz16sq000k13ppd8dqvxcc","resultsTablePreferences":null,"isArchived":false,"isClosed":false,"whatsAppCredentialsId":null,"riskLevel":null}
|
Loading…
Reference in New Issue
Block a user