├── .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 |
29 |
30 | Subdomínio para Frontend: https://app.nomedoseudominio.com
31 | Subdomínio para API (Backend): https://api.nomedoseudominio.com
32 |
33 |
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 |
105 |
122 |
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 | [](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 <