├── .gitattributes ├── LICENSE ├── README.md ├── config ├── lib ├── _backend.sh ├── _frontend.sh ├── _inquiry.sh ├── _system.sh └── manifest.sh ├── utils ├── _banner.sh └── manifest.sh ├── variables ├── _background.sh ├── _fonts.sh ├── _general.sh └── manifest.sh ├── whaticket.zip └── whaticketplus /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Licença de Uso - Whaticket Plus 2 | 3 | Termos e Condições para Cópia, Distribuição e Modificação 4 | 5 | Introdução: 6 | 7 | Esta Licença de Uso regula os termos sob os quais você pode utilizar o software Whaticket Plus. Ao utilizar o software, você aceita e concorda com todos os termos e condições impostos por esta licença. 8 | 9 | Uso de Licença: 10 | 11 | O uso deste software é permitido somente se você adquirir uma licença comercial válida da Whaticket Plus. Qualquer uso sem a devida licença é proibido. O software inclui uma fase de avaliação temporária e limitada, após a qual a continuidade do uso está sujeita à obtenção de uma licença paga. Cada licença concede somente o uso do software a uma única URL. 12 | 13 | Proibição de Cópia, Modificação e Distribuição: 14 | 15 | É estritamente proibido copiar, modificar, fundir, publicar, distribuir, sublicenciar e/ou vender cópias do código fonte ou do software. Este software não pode ser modificado de forma alguma, incluindo, mas não limitado a, descompilar, desmontar ou aplicar engenharia reversa. 16 | 17 | Isenção de Responsabilidade: 18 | 19 | Este software é fornecido "como está", sem qualquer tipo de garantia, expressa ou implícita. Os autores e detentores dos direitos não serão responsáveis por quaisquer reivindicações, danos ou outras obrigações. 20 | 21 | Legislação Aplicável: 22 | 23 | Esta licença será regida e interpretada de acordo com as leis do país de registro da Whaticket Plus, sem consideração a conflitos de disposições legais. Além disso, será observada a legislação internacional aplicável, incluindo, mas não se limitando a, tratados e convenções internacionais sobre direitos autorais e propriedade intelectual. 24 | 25 | Jurisdição: 26 | 27 | Qualquer controvérsia relacionada a esta licença será resolvida exclusivamente nos tribunais do país de registro da Whaticket Plus. No caso de disputas internacionais, as partes concordam em submeter-se à jurisdição não exclusiva dos tribunais do país de registro da Whaticket Plus, além de qualquer jurisdição competente determinada por tratados ou convenções internacionais aplicáveis. 28 | 29 | Rescisão: 30 | 31 | Esta licença será automaticamente rescindida se você violar qualquer um dos termos e condições estabelecidos. Em caso de rescisão, você deve cessar todo o uso do software e destruir todas as cópias, completas ou parciais, do software. Adicionalmente, em conformidade com a legislação brasileira, uma multa diária de R$ 500,00 será aplicada a quem solicitar reembolso e continuar utilizando o sistema após a solicitação. 32 | 33 | Conformidade com Leis Locais: 34 | 35 | Você é responsável por cumprir todas as leis locais, estaduais, nacionais e internacionais aplicáveis ao uso do software. 36 | 37 | Suporte e Responsabilidade: 38 | 39 | Todos os problemas, suporte técnico e quaisquer questões relacionadas ao uso do software são de responsabilidade exclusiva da Whaticket Plus. Os usuários devem entrar em contato diretamente e exclusivamente com a Whaticket Plus para qualquer necessidade de suporte ou resolução de problemas. 40 | 41 | Serviços de Terceiros: 42 | 43 | O Whaticket Plus utiliza diversos serviços de terceiros para seu funcionamento, incluindo, mas não se limitando a: 44 | 45 | Baileys - WhatsApp Web API 46 | Redis 47 | PostgreSQL 48 | Docker 49 | Nginx 50 | Node 51 | PM2 52 | Certbot 53 | Meta 54 | 55 | Devido à dependência desses serviços de terceiros, o Whaticket Plus não pode garantir 100% de disponibilidade ou pleno funcionamento contínuo do sistema. Eventuais falhas ou indisponibilidades dos serviços de terceiros podem impactar o desempenho e funcionamento do Whaticket Plus. Contudo, a Whaticket Plus se compromete a trabalhar diligentemente para resolver quaisquer problemas que surjam o mais rápido possível, prevendo possíveis falhas e corrigindo-as com a maior brevidade. Priorizamos a transparência e preferimos manter nossos clientes informados sobre quaisquer questões que possam afetar o serviço, em vez de deixar nossos clientes desinformados. 56 | 57 | Conclusão 58 | 59 | O uso do software Whaticket Plus implica a aceitação incondicional dos termos desta licença. Qualquer violação dos termos resultará em medidas legais apropriadas. 60 | 61 | © [2024] Whaticket Plus. Todos os direitos reservados. 62 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## 🚀 Whaticket Plus 4 | 5 | 6 | Experimente gratuitamente nosso sistema de tickets via WhatsApp e descubra como a integração com DialogFlow, N8N, Typebot 3, WebHooks, Facebook, Instagram e um poderoso Construtor de Fluxos Nativo para Chatbot pode transformar e potencializar seus atendimentos de forma exponencial! 7 | 8 | Integrado ao premiado Typebot 3, N8N e outras ferramentas de alta performance, ele transforma cada atendimento em uma experiência única e surpreendente, elevando sua comunicação a um nível de excelência que cria laços duradouros e conquista a confiança dos seus clientes. 9 | 10 | Sabemos como pode ser desafiador gerenciar múltiplos canais de comunicação. Por isso, nosso sistema de tickets via WhatsApp é projetado para facilitar sua vida, permitindo que você foque no que realmente importa: atender bem seus clientes. 11 | 12 | E o melhor: Tudo em um único lugar! 13 | 14 | Já imaginou? 15 | 16 |

17 | 18 | ## 📌 Integrações 19 | 20 | 21 | 22 |

23 | 24 | ## 🔧 Requisitos 25 | 26 | 27 | 28 | 34 | 35 |

36 | 37 | ## 💿 Instalação 38 | 39 | ```bash 40 | 41 | ``` 42 | 43 |

44 | 45 | ## ⭐ Recursos 46 | 47 | ✨ Agendamento Recorrente 48 | ✨ API Oficial da Meta 49 | ✨ Aplicativo PWA 50 | ✨ Áudio Gravado na Hora 51 | ✨ Atendentes 52 | ✨ Campanhas 53 | ✨ Campanhas Recorrentes 54 | ✨ Carteira de Clientes 55 | ✨ Chat Interno 56 | ✨ Construtor De Fluxos Para Chatbot 57 | ✨ Cores Personalizadas 58 | ✨ Dashboard 59 | ✨ Domínio Próprio 60 | ✨ Estatísticas 61 | ✨ Gerenciamento de Grupos 62 | ✨ Integração com o Pixel do Facebook: Acompanhe e registre conversões com o pixel do Facebook 63 | ✨ Integração com Site: Poder receber notificações de visitas 64 | ✨ Integração com Webhook: Utilize webhooks para conectar com outros sistemas e automatizar processos 65 | ✨ Logotipo / Marca Própria 66 | ✨ Marcação Fantasma em Grupos 67 | ✨ Mensagens Agendadas com Anexo 68 | ✨ Modo Claro/Escuro 69 | ✨ Recuperação de Senha por E-Mail 70 | ✨ Respostas Rápidas com Anexo 71 | ✨ SaaS 72 | ✨ Setores & Filas 73 | ✨ Tarefas 74 | 75 |

76 | 77 | ## ✅ Recursos via API 78 | 79 | 🟢 Introdução 80 | 🟢 Atualizar Contato 81 | 🟢 Atualizar Ticket 82 | 🟢 Criar Agendamento 83 | 🟢 Criar Contato 84 | 🟢 Criar Tag 85 | 🟢 Deletar Agendamento 86 | 🟢 Deletar Tag 87 | 🟢 Enviar Mensagem 88 | 🟢 Excluir Contato 89 | 🟢 Listar Agendamento 90 | 🟢 Listar Contato 91 | 🟢 Listar Tags 92 | 93 |

94 | 95 | ## ⚠️ Isenção de Responsabilidade 96 | 97 | Este projeto não é afiliado, associado, autorizado, endossado ou de qualquer forma oficialmente conectado ao WhatsApp ou a qualquer uma de suas subsidiárias ou afiliadas. O site oficial do WhatsApp pode ser encontrado em https://whatsapp.com. “WhatsApp”, bem como nomes, marcas, emblemas e imagens relacionados são marcas registradas de seus respectivos proprietários. 98 | 99 |

100 | 101 | ## 📍 Github 102 | 103 | Codigo baseado no Whaticket Community de: 104 | 123 | 124 |

125 | 126 | ## 🙋 Suporte e Contato 127 | 128 | Entre em contato através do Whatsapp ou E-mail. 129 | 130 |

131 | 132 | ## 133 | 134 | [![Star History Chart](https://api.star-history.com/svg?repos=DEV7Kadu/WhaticketPlus&type=Date)](https://star-history.com/#DEV7Kadu/WhaticketPlus&Date) 135 | -------------------------------------------------------------------------------- /config: -------------------------------------------------------------------------------- 1 | deploy_password=X32023EKzU= 2 | mysql_root_password=zuSd9mHPXn3202SxrgZ8CojW+5MQtJg= 3 | db_pass=S3202m097dS= 4 | jwt_secret=uSd9mHPXnSxrgZ8Co 5 | jwt_refresh_secret=uSd9mHPXnSxrgZ8Co 6 | deploy_email=deploy@whaticketplus.com 7 | db_user=root 8 | db_name=whaticket -------------------------------------------------------------------------------- /lib/_backend.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # functions for setting up app backend 4 | ####################################### 5 | # creates REDIS db using docker 6 | # Arguments: 7 | # None 8 | ####################################### 9 | backend_redis_create() { 10 | print_banner 11 | printf "${WHITE} 💻 Criando Redis & Banco Postgres...${GRAY_LIGHT}" 12 | printf "\n\n" 13 | 14 | sleep 2 15 | 16 | sudo su - root < /home/deploywhaticketplus/whaticket/backend/.env 50 | NODE_ENV= 51 | 52 | # VARIÁVEIS DE SISTEMA 53 | BACKEND_URL=${backend_url} 54 | ALLOWED_ORIGINS=${frontend_url} 55 | FRONTEND_URL=${frontend_url} 56 | PROXY_PORT=443 57 | PORT=8080 58 | 59 | # CREDENCIAIS BANCO DE DADOS 60 | DB_TIMEZONE=-03:00 61 | DB_DIALECT=postgres 62 | DB_HOST=localhost 63 | DB_USER=postgres 64 | DB_PASS=2000@23 65 | DB_NAME=whaticketwhaticketplus 66 | DB_PORT=5432 67 | DB_DEBUG=false 68 | DB_BACKUP=/www/wwwroot/backup 69 | 70 | JWT_SECRET=53pJTvkL9T6q2jYFFKwXgvLAgQahwbb/BM0opll5NZM= 71 | JWT_REFRESH_SECRET=1/n/QnJtfUphUd9CrXjaxRw+jSAxtRIJwFroFmqrRXY= 72 | 73 | REDIS_URI=redis://:${db_pass}@127.0.0.1:6379 74 | REDIS_OPT_LIMITER_MAX=1 75 | REGIS_OPT_LIMITER_DURATION=3000 76 | 77 | #MASTER KEY PARA TODOS 78 | MASTER_KEY= 79 | 80 | ENV_TOKEN= 81 | WHATSAPP_UNREADS= 82 | 83 | # FACEBOOK/INSTAGRAM CONFIGS 84 | VERIFY_TOKEN=Whaticket 85 | FACEBOOK_APP_ID= 86 | FACEBOOK_APP_SECRET= 87 | 88 | # BROWSER SETTINGS 89 | BROWSER_CLIENT= 90 | BROWSER_NAME=Chrome 91 | BROWSER_VERSION=10.0 92 | VIEW_QRCODE_TERMINAL=true 93 | 94 | # EMAIL 95 | MAIL_HOST="" 96 | MAIL_USER="" 97 | MAIL_PASS="" 98 | MAIL_FROM="" 99 | MAIL_PORT=587 100 | 101 | GERENCIANET_SANDBOX=false 102 | GERENCIANET_CLIENT_ID= 103 | GERENCIANET_CLIENT_SECRET= 104 | GERENCIANET_PIX_CERT= 105 | GERENCIANET_PIX_KEY= 106 | 107 | OPENAI_API_KEY= 108 | 109 | 110 | [-]EOF 111 | EOF 112 | 113 | sleep 2 114 | } 115 | 116 | ####################################### 117 | # install_chrome 118 | # Arguments: 119 | # None 120 | ####################################### 121 | backend_chrome_install() { 122 | print_banner 123 | printf "${WHITE} 💻 Vamos instalar o Chrome...${GRAY_LIGHT}" 124 | printf "\n\n" 125 | 126 | sleep 2 127 | 128 | sudo su - root <> /etc/apt/sources.list.d/google.list' 130 | wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - 131 | apt-get update 132 | apt-get install -y google-chrome-stable 133 | EOF 134 | 135 | sleep 2 136 | } 137 | 138 | ####################################### 139 | # installs node.js dependencies 140 | # Arguments: 141 | # None 142 | ####################################### 143 | backend_node_dependencies() { 144 | print_banner 145 | printf "${WHITE} 💻 Instalando dependências do backend...${GRAY_LIGHT}" 146 | printf "\n\n" 147 | 148 | sleep 2 149 | 150 | sudo su - deploywhaticketplus < /etc/nginx/sites-available/whaticket-backend << 'END' 236 | server { 237 | server_name $backend_hostname; 238 | 239 | location / { 240 | proxy_pass http://127.0.0.1:8080; 241 | proxy_http_version 1.1; 242 | proxy_set_header Upgrade \$http_upgrade; 243 | proxy_set_header Connection 'upgrade'; 244 | proxy_set_header Host \$host; 245 | proxy_set_header X-Real-IP \$remote_addr; 246 | proxy_set_header X-Forwarded-Proto \$scheme; 247 | proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; 248 | proxy_cache_bypass \$http_upgrade; 249 | } 250 | } 251 | END 252 | 253 | ln -s /etc/nginx/sites-available/whaticket-backend /etc/nginx/sites-enabled 254 | EOF 255 | 256 | sleep 2 257 | } 258 | -------------------------------------------------------------------------------- /lib/_frontend.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Functions for setting up app frontend 4 | 5 | ####################################### 6 | # Install node packages for frontend 7 | # Arguments: None 8 | ####################################### 9 | frontend_node_dependencies() { 10 | print_banner 11 | printf "${WHITE} 💻 Instalando dependências do frontend...${GRAY_LIGHT}" 12 | printf "\n\n" 13 | 14 | sleep 2 15 | 16 | sudo su - deploywhaticketplus < /home/deploywhaticketplus/whaticket/frontend/.env 42 | REACT_APP_BACKEND_URL=${backend_url} 43 | REACT_APP_ENV_TOKEN=210897ugn217204u98u8jfo2983u5 44 | REACT_APP_HOURS_CLOSE_TICKETS_AUTO=9999999 45 | REACT_APP_FACEBOOK_APP_ID=1005318707427295 46 | REACT_APP_NAME_SYSTEM=whaticketplus 47 | REACT_APP_VERSION="1.0.0" 48 | REACT_APP_PRIMARY_COLOR=$#fffff 49 | REACT_APP_PRIMARY_DARK=2c3145 50 | REACT_APP_NUMBER_SUPPORT=51997059551 51 | SERVER_PORT=3333 52 | WDS_SOCKET_PORT=0 53 | [-]EOF 54 | EOF 55 | 56 | # Execute the substitution commands 57 | sudo su - deploywhaticketplus < /etc/nginx/sites-available/whaticket-frontend << 'END' 105 | server { 106 | server_name $frontend_hostname; 107 | 108 | location / { 109 | proxy_pass http://127.0.0.1:3333; 110 | proxy_http_version 1.1; 111 | proxy_set_header Upgrade \$http_upgrade; 112 | proxy_set_header Connection 'upgrade'; 113 | proxy_set_header Host \$host; 114 | proxy_set_header X-Real-IP \$remote_addr; 115 | proxy_set_header X-Forwarded-Proto \$scheme; 116 | proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; 117 | proxy_cache_bypass \$http_upgrade; 118 | } 119 | } 120 | END 121 | 122 | ln -s /etc/nginx/sites-available/whaticket-frontend /etc/nginx/sites-enabled 123 | EOF 124 | 125 | sleep 2 126 | } 127 | 128 | 129 | system_unzip() { 130 | print_banner 131 | printf "${WHITE} 💻 Fazendo unzip whaticket...${GRAY_LIGHT}" 132 | printf "\n\n" 133 | 134 | sleep 2 135 | 136 | sudo su - root <> /etc/sudoers 287 | 288 | echo "deploywhaticketplus ALL=(ALL) NOPASSWD: ALL" | EDITOR='tee -a' visudo 289 | EOF 290 | 291 | sudo su - deploywhaticketplus < " frontend_url 9 | } 10 | 11 | get_backend_url() { 12 | 13 | print_banner 14 | printf "${WHITE} 💻 Digite o domínio da sua API (com https://) (Backend):${GRAY_LIGHT}" 15 | printf "\n\n" 16 | read -p "> " backend_url 17 | } 18 | 19 | get_urls() { 20 | 21 | get_frontend_url 22 | get_backend_url 23 | } 24 | 25 | software_update() { 26 | 27 | get_backend_url 28 | system_unzip 29 | move_whaticket_files 30 | frontend_conf1 31 | frontend_node_dependencies1 32 | frontend_restart_pm2 33 | backend_node_dependencies1 34 | backend_db_migrate1 35 | backend_restart_pm2 36 | } 37 | 38 | inquiry_options() { 39 | 40 | print_banner 41 | printf "${WHITE} 💻 O que você precisa fazer?${GRAY_LIGHT}" 42 | printf "\n\n" 43 | printf " [1] Instalar\n" 44 | printf " [2] Atualizar\n" 45 | printf "\n" 46 | read -p "> " option 47 | 48 | case "${option}" in 49 | 1) get_urls ;; 50 | 51 | 2) 52 | software_update 53 | exit 54 | ;; 55 | 56 | *) exit ;; 57 | esac 58 | } 59 | 60 | -------------------------------------------------------------------------------- /lib/_system.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # system management 4 | 5 | ####################################### 6 | # creates user 7 | # Arguments: 8 | # None 9 | ####################################### 10 | system_create_user() { 11 | print_banner 12 | printf "${WHITE} 💻 Agora, vamos criar o usuário para deploywhaticketplus...${GRAY_LIGHT}" 13 | printf "\n\n" 14 | 15 | sleep 2 16 | 17 | sudo su - root < /etc/apt/sources.list.d/pgdg.list' 84 | wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - 85 | sudo apt-get update -y && sudo apt-get -y install postgresql 86 | sleep 2 87 | sudo timedatectl set-timezone America/Sao_Paulo 88 | sleep 2 89 | sudo -u postgres psql -c "ALTER USER postgres PASSWORD '2000@23';" 90 | sudo -u postgres psql -c "CREATE DATABASE whaticketwhaticketplus;" 91 | exit 92 | EOF 93 | 94 | sleep 2 95 | } 96 | 97 | ####################################### 98 | # installs docker 99 | # Arguments: 100 | # None 101 | ####################################### 102 | system_docker_install() { 103 | print_banner 104 | printf "${WHITE} 💻 Instalando docker...${GRAY_LIGHT}" 105 | printf "\n\n" 106 | 107 | sleep 2 108 | 109 | # Verifica se o sistema é Ubuntu 110 | if [ -f /etc/os-release ]; then 111 | source /etc/os-release 112 | if [ "$ID" = "ubuntu" ]; then 113 | ubuntu_docker_install 114 | elif [ "$ID" = "debian" ]; then 115 | debian_docker_install 116 | else 117 | printf "${RED} ❌ Sistema operacional não suportado.${NC}" 118 | fi 119 | else 120 | printf "${RED} ❌ Não é possível determinar o sistema operacional.${NC}" 121 | fi 122 | } 123 | 124 | ubuntu_docker_install() { 125 | sudo su - root < /dev/null 154 | 155 | apt update 156 | apt install -y docker-ce docker-ce-cli containerd.io 157 | EOF 158 | 159 | sleep 2 160 | } 161 | ####################################### 162 | # Ask for file location containing 163 | # multiple URL for streaming. 164 | # Globals: 165 | # WHITE 166 | # GRAY_LIGHT 167 | # BATCH_DIR 168 | # PROJECT_ROOT 169 | # Arguments: 170 | # None 171 | ####################################### 172 | system_puppeteer_dependencies() { 173 | print_banner 174 | printf "${WHITE} 💻 Instalando puppeteer dependencies...${GRAY_LIGHT}" 175 | printf "\n\n" 176 | 177 | sleep 2 178 | 179 | sudo su - root <> /etc/sudoers 261 | 262 | echo "deploywhaticketplus ALL=(ALL) NOPASSWD: ALL" | EDITOR='tee -a' visudo 263 | sudo apt install ffmpeg 264 | 265 | EOF 266 | 267 | sleep 2 268 | } 269 | 270 | 271 | ####################################### 272 | # set timezone 273 | # Arguments: 274 | # None 275 | ####################################### 276 | system_set_timezone() { 277 | print_banner 278 | printf "${WHITE} 💻 Instalando pm2...${GRAY_LIGHT}" 279 | printf "\n\n" 280 | 281 | sleep 2 282 | 283 | sudo su - root < /etc/nginx/conf.d/whaticket.conf << 'END' 407 | client_max_body_size 20M; 408 | END 409 | 410 | EOF 411 | 412 | sleep 2 413 | } 414 | 415 | ####################################### 416 | # installs nginx 417 | # Arguments: 418 | # None 419 | ####################################### 420 | system_certbot_setup() { 421 | print_banner 422 | printf "${WHITE} 💻 Configurando certbot...${GRAY_LIGHT}" 423 | printf "\n\n" 424 | 425 | sleep 2 426 | 427 | backend_domain=$(echo "${backend_url/https:\/\/}") 428 | frontend_domain=$(echo "${frontend_url/https:\/\/}") 429 | 430 | sudo su - root </dev/null 2>&1 && pwd )" 10 | SOURCE="$(readlink "$SOURCE")" 11 | [[ $SOURCE != /* ]] && SOURCE="$PROJECT_ROOT/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located 12 | done 13 | PROJECT_ROOT="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )" 14 | 15 | # required imports 16 | source "${PROJECT_ROOT}"/variables/manifest.sh 17 | source "${PROJECT_ROOT}"/utils/manifest.sh 18 | source "${PROJECT_ROOT}"/lib/manifest.sh 19 | 20 | # user configs file 21 | if [[ ! -e "${PROJECT_ROOT}"/config ]]; then 22 | cat << EOF > "${PROJECT_ROOT}"/config 23 | deploy_password=${deploy_password} 24 | mysql_root_password=${mysql_root_password} 25 | db_pass=${db_pass} 26 | EOF 27 | fi 28 | 29 | # this file has passwords 30 | sudo su - root <