Categoria Sem categoria

Typebot Saudação por Períodos do dia.

Segue um template para saudação baseado em períodos do dia.

Salvar arquivo como json e importar no Typebot.

  • Amanhã
  • Tarde
  • Noite
  • Madrugada
{
    "version": "5",
    "id": "clnr7unnr0001qi1p151cyf0k",
    "name": "Saudação",
    "groups": [
        {
            "id": "gil4ln85tcyfr5n5p3utqbvd",
            "title": "Start",
            "graphCoordinates": {
                "x": -22,
                "y": 208
            },
            "blocks": [
                {
                    "id": "f1hwzp3exgim7i8j04re4s4l",
                    "groupId": "gil4ln85tcyfr5n5p3utqbvd",
                    "outgoingEdgeId": "i2zi8k5z6awaiwuuepsfnu4g",
                    "type": "start",
                    "label": "Start"
                }
            ]
        },
        {
            "id": "c1saf3c4himwxy8lnh1v49y1",
            "title": "Script",
            "graphCoordinates": {
                "x": 371,
                "y": 100
            },
            "blocks": [
                {
                    "id": "zvnvff3rmbsh8b3wyb372dzh",
                    "groupId": "c1saf3c4himwxy8lnh1v49y1",
                    "outgoingEdgeId": "ft18i9oqkp6pusm8vsk7r9qs",
                    "type": "Set variable",
                    "options": {
                        "variableId": "vp8od10kng0salkymug9wufam",
                        "expressionToEvaluate": "// Obter a data atual como objeto Date\nlet dataAtual = new Date();\n\n// Configurar o fuso horário\ndataAtual = new Date(dataAtual.toLocaleString('en-US', { timeZone: 'America/Recife' }));\n\n// Obter o horário atual\nlet horaAtual = dataAtual.getHours();\n\n// Determinar a saudação adequada baseada na hora do dia\nlet saudacao;\nif (horaAtual >= 5 && horaAtual < 12) {\n    saudacao = \"Bom dia\";\n} else if (horaAtual >= 12 && horaAtual < 18) {\n    saudacao = \"Boa tarde\";\n} else if (horaAtual >= 18 && horaAtual <= 23) {\n    saudacao = \"Boa noite\";\n} else {\n    saudacao = \"Boa madrugada\";\n}\n\n// Exibir a saudação\nreturn saudacao",
                        "isExecutedOnClient": true
                    }
                }
            ]
        },
        {
            "id": "ycv3zgly0spaovtsckykcom9",
            "title": "Fluxo",
            "graphCoordinates": {
                "x": 762,
                "y": 192
            },
            "blocks": [
                {
                    "id": "fo02bybce2ca3uwwxl9t1i15",
                    "groupId": "ycv3zgly0spaovtsckykcom9",
                    "type": "text",
                    "content": {
                        "richText": [
                            {
                                "type": "p",
                                "children": [
                                    {
                                        "text": "{{saudacao}}"
                                    }
                                ]
                            }
                        ]
                    }
                },
                {
                    "id": "y0l7indhnw5y5wjrvwfmxr7e",
                    "groupId": "ycv3zgly0spaovtsckykcom9",
                    "type": "text",
                    "content": {
                        "richText": [
                            {
                                "type": "p",
                                "children": [
                                    {
                                        "text": "Esculte uma boa música"
                                    }
                                ]
                            }
                        ]
                    }
                },
                {
                    "id": "fa7rjjdp8etlczt75nt92byw",
                    "groupId": "ycv3zgly0spaovtsckykcom9",
                    "type": "text",
                    "content": {
                        "richText": [
                            {
                                "type": "p",
                                "children": [
                                    {
                                        "text": "╔════════════════╗"
                                    }
                                ]
                            },
                            {
                                "type": "p",
                                "children": [
                                    {
                                        "text": "┃ ▁▂▃▅▆▇ 100%           |"
                                    }
                                ]
                            },
                            {
                                "type": "p",
                                "children": [
                                    {
                                        "text": "╚════════════════╝"
                                    }
                                ]
                            },
                            {
                                "type": "p",
                                "children": [
                                    {
                                        "text": "SONG: 𝙱𝚕𝖺𝚌𝚔𝚂𝚝𝗈𝚛𝚖𝚂𝚝𝚍.𝚁𝚎𝚖𝚒𝚡 𝟼𝙼♫"
                                    }
                                ]
                            },
                            {
                                "type": "p",
                                "children": [
                                    {
                                        "text": "CREATOR: 𝙱𝚕𝚊𝚌𝚔𝚂𝚝𝚘𝚛𝚖 𝚂𝚝𝚞𝚍𝚒𝚘𝚜™®"
                                    }
                                ]
                            },
                            {
                                "type": "p",
                                "children": [
                                    {
                                        "text": "0:35 ━❍──────── -5:25"
                                    }
                                ]
                            },
                            {
                                "type": "p",
                                "children": [
                                    {
                                        "text": "↻     ⊲  Ⅱ  ⊳     ↺"
                                    }
                                ]
                            }
                        ]
                    }
                }
            ]
        }
    ],
    "edges": [
        {
            "id": "i2zi8k5z6awaiwuuepsfnu4g",
            "from": {
                "groupId": "gil4ln85tcyfr5n5p3utqbvd",
                "blockId": "f1hwzp3exgim7i8j04re4s4l"
            },
            "to": {
                "groupId": "c1saf3c4himwxy8lnh1v49y1"
            }
        },
        {
            "id": "ft18i9oqkp6pusm8vsk7r9qs",
            "from": {
                "groupId": "c1saf3c4himwxy8lnh1v49y1",
                "blockId": "zvnvff3rmbsh8b3wyb372dzh"
            },
            "to": {
                "groupId": "ycv3zgly0spaovtsckykcom9"
            }
        }
    ],
    "variables": [
        {
            "id": "vz86mn60nk870kdefhbvrov3r",
            "name": "data"
        },
        {
            "id": "vp8od10kng0salkymug9wufam",
            "name": "saudacao"
        }
    ],
    "theme": {
        "general": {
            "font": "Open Sans",
            "background": {
                "type": "Color",
                "content": "#ffffff"
            }
        },
        "chat": {
            "hostAvatar": {
                "isEnabled": true
            },
            "hostBubbles": {
                "backgroundColor": "#F7F8FF",
                "color": "#303235"
            },
            "guestBubbles": {
                "backgroundColor": "#FF8E21",
                "color": "#FFFFFF"
            },
            "buttons": {
                "backgroundColor": "#0042DA",
                "color": "#FFFFFF"
            },
            "inputs": {
                "backgroundColor": "#FFFFFF",
                "color": "#303235",
                "placeholderColor": "#9095A0"
            }
        }
    },
    "selectedThemeTemplateId": null,
    "settings": {
        "general": {
            "isBrandingEnabled": false,
            "isInputPrefillEnabled": true,
            "isHideQueryParamsEnabled": true,
            "rememberUser": {
                "isEnabled": false
            }
        },
        "typingEmulation": {
            "enabled": true,
            "speed": 300,
            "maxDelay": 1.5
        },
        "metadata": {
            "description": "Build beautiful conversational forms and embed them directly in your applications without a line of code. Triple your response rate and collect answers that has more value compared to a traditional form."
        }
    },
    "createdAt": "2023-10-15T08:40:14.151Z",
    "updatedAt": "2023-10-15T22:24:28.641Z",
    "icon": null,
    "folderId": null,
    "publicId": "saudacao",
    "customDomain": null,
    "workspaceId": "clnr64nj00001n21oaw5nat15",
    "resultsTablePreferences": null,
    "isArchived": false,
    "isClosed": false,
    "whatsAppCredentialsId": null
}

 

Deploy de Aplicação em Django com uWSGI e Nginx

Nesse tutorial iremos realizar o deploy de uma aplicação em Django com uWSGI e Nginx

1 – Realizar o update do apt

apt-get update
apt-get upgrade

2 – Instalar dependências

apt install git gcc nginx certbot python3-dev python3.11-venv

3 – Criar diretório do projeto

mkdir /videoaula
cd /videoaula

4 – Criar e ativar o ambiente virtual

python3 -m venv venv
source venv/bin/activate

5 – Instalar os  pacotes

pip install django uwsgi

6 – Iniciar o projeto

python3 -m django --version
django-admin startproject videoaula .
python3 manage.py runserver 0.0.0.0:8000
  • Acesse o host no porta 8000 verifique se aplicação django esta presente.

7 – Ajustar o setting.py

  • Configurar o allowed hosts e a static url
  • Aproveite para checar a aplicação
  • python3 manage.py runserver 0.0.0.0:8000
vim videoaula/settings.py
import os

ALLOWED_HOSTS = ['*']

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static/")

8 – Testando manualmente o uWSGI

  • Crie um arquivo teste.py com o seguinte conteúdo.
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World!"]
  • uwsgi –http :8000 –wsgi-file teste.py

Acesse o host na porta 8000 e confirme se o Hello World foi redenrizado.

9 – Testando o projeto vídeo aula com uWSGI usando o IP Socket

  1. Acesse a aplicação via uWSGI para simples conferência.
uwsgi --http :8000 --module videoaula.wsgi

10 – Configurando o Nginx para acessar aplicação via Unix Socket

  • Crie o arquivo .conf dentro de vim /etc/nginx/sites-available/videoaula.conf
  • Preencha com seguinte conteúdo.
# Configuração do Servidor

upstream django {
    server unix:///videoaula/videoaula.sock;
    }


server {
    listen      80;
    server_name videoaula.cuidadodigital.com.br;
    charset     utf-8;
    
    # max upload size
    client_max_body_size 75M;
    
    # Django media and static files
    location /media  {
        alias /videoaula/media;
    }
    #Django static
    location /static {
        alias /videoaula/static;
    }
    # Send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /videoaula/uwsgi_params;
    }
}
  • Crei o uwsgi_params dentro de /video/aula
  • vim /videoaula/uwsgi_params
uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;
uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;
uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;
  • Crie um Link Simbólico do videoaula.conf de sites-availabe para sites-enable
ln -s /etc/nginx/sites-available/videoaula.conf /etc/nginx/sites-enabled/
  • Cheque as configurações do ngnix: # ngnix -t
  • Habilite o nginx: # systemct enable nginx
  • Reinicie o nginx: # systemct restart nginx

11 –  Testando aplicação via Unix Socket

uwsgi --socket videoaula.sock --module videoaula.wsgi --chmod-socket=666 --uid www-data
  • Nessa etapa a aplicação ja deve estar funcionando, poém como aplicação e não como serviço

12 – Crei o arquivo de configuração que o demom irá utilizar para chamar uWSGI com serviço

  • vim /videoaula/videoaula_uwsgi.ini
[uwsgi]
# full path to Django project's root directory
chdir = /videoaula
# Django's wsgi file
module = videoaula.wsgi
# full path to python virtual env
home = /videoaula/venv
# enable uwsgi master process
master = true
# maximum number of worker processes
processes = 10
# the socket (use the full path to be safe
socket = /videoaula/videoaula.sock
# socket permissions
chmod-socket = 666
# User ID
uid = www-data
# Group ID
gid = www-data
# clear environment on exit
vacuum = true
# daemonize uwsgi and write messages into given log
daemonize = /videoaula/uwsgi-emperor.log

13 – Testando a aplicação com paramentros de inicialização

uwsgi --ini videoaula_uwsgi.ini

15 – Configurando o vassals

mkdir -p /videoaula/venv/vassals
ln -s /videoaula/videoaula_uwsgi.ini /videoaula/venv/vassals/

16 – Teste final. Realizado teste em modo Emperador do uWSGI emperor mode

uwsgi --emperor /videoaula/venv/vassals --uid www-data --gid www-data

17 – Criando serviço no linux Daemon

  • Crie o arquivo videoaula-uwsgi-emperor.service
  • vim /etc/systemd/system/videoaula-uwsgi-emperor.service
  • Preencha com as seguintes configurações
[Unit]
Description=App Django - Video Aula
After=network.target

[Service]
User=admin
Restart=always
ExecStart=/videoaula/venv/bin/uwsgi --emperor /videoaula/venv/vassals --uid www-data --gid www-data

[Install]
WantedBy=multi-user.target
  • Para habilitar o serviço : systemctl enable videoaula-uwsgi-emperor.service
  • Para iniciar o serviço: systemctl start videoaula-uwsgi-emperor.service

Inpirado em: https://tonyteaches.tech/django-nginx-uwsgi-tutorial/

Integração Typebot com Chatwoot via N8N

Roteiro para criação de chatbot.

Pré requisitos
  • Ter instaldo e configurado o n8n.
  • Ter instaldo e configurado o TypeBot.
  • Ter instaldo e configurado o EvolutionAPI.

Passo 1 – Criar instância com EvolutionAPI

curl -X POST http://127.0.0.1:8081/instance/create \
-H "Content-Type: application/json" \
-H "apikey: Lqxb8hZvimasdfadsfIqQEYikZEmN5gYg3LKiHT" \
-d '{
    "instanceName": "TypeBot",
    "token": "",
    "qrcode": true,
    "number": "55629841xxxx6"
}'

Passo 2 – Configurar instância criada para conectar com TypeBot

curl -X POST http://127.0.0.1:8081/typebot/set/TypeBot \
-H "Content-Type: application/json" \
-H "apikey: Lqxb8hZvimZi2L0OXOxdfgsdfgdsgIqQEYikZEmN5gYg3LKiHT" \
-d '{
    "enabled": true,
    "url": "https://bot.meutypebot.com.br",
    "typebot":  "NomeDoFlowDoTypeBot",
    "expire": 20,
    "keyword_finish": "#SAIR",
    "delay_message": 1000,
    "unknown_message": "Mensagem não reconhecida",
    "listening_from_me": false
}'

Passo 3 – Ao concluir fluxo do TypeBot redirecionar conversa para o ChatWoot via N8N

  • Criar variável remoteJid para pegar o número do remetente.
  • Criar variável numeroLimpo para remover sufixo.
  • Após construir todo fluxo criar um Webhook com as seguintes variáveis
    • URL do Webhook – https://n8n.minhaempresa.com.br/webhook-test/typebot
    • Method POST
    • Body:
      {
        "number": "{{numeroLimpo}}",
        "name": "{{name}}"
      }

Passo 4- Configurar N8N para receber o webhook e enviar para Chatwoot

  • Fazer downlaod do flow n8n
  • Em Infobase1 Configurar
    • Token (Chatwoot)
    • Url Chatwoot
    • ID Conta
    • ID Caixa
    • NomeContato
      • TypeBot Minha Empresa
    • MensagemEnvio
      • ” Contato recebido via TypeBot “

Basicamente é isso.

Como instalar Chatwoot via Docker + Codechat + API Whatsapp

Passo 1  – Instalação Docker

  • Remover possíveis versões anteriores
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
  • Add Docker’s official GPG key
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
  • Add the repository to Apt sources
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

  • Instalação docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
curl -SL https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

Passo 2 – Instalação do Chatwoot via Docker Compose

  • Download the env file template
  • Download the Docker compose template
  • Rename .env file
cd /root
mkdir chatwoot
wget -O .env https://raw.githubusercontent.com/chatwoot/chatwoot/develop/.env.example
wget -O docker-compose.yaml https://raw.githubusercontent.com/chatwoot/chatwoot/develop/docker-compose.production.yaml
  • Ajustando o .env file
  • Atenção para senha do postgres
Main
SECRET_KEY_BASE - criar senha segura
FRONTEND_URL=https://app.sacbr.com.br
DEFAULT_LOCALE=pt_BR

Postgres
    POSTGRES_HOST=postgres
    POSTGRES_USERNAME=postgres
    POSTGRES_PASSWORD=908AS7DF89ASIUAFSDAS89034K
    RAILS_ENV=development
Mail
    MAILER_SENDER_EMAIL=SacBR <app@sacbr.com.br>
    SMTP_DOMAIN=smtp.gmail.com
    SMTP_ADDRESS=smtp.gmail.com
    SMTP_PORT=465
    SMTP_USERNAME=sacbr{at}sacbr.com.br
    SMTP_PASSWORD=Senha123
    SMTP_AUTHENTICATION=plain
    SMTP_ENABLE_STARTTLS_AUTO=true
    SMTP_OPENSSL_VERIFY_MODE=peer
    SMTP_SSL=true
  • Ajustando o docker-compose.yml
  • Atenção para senha do postgres
version: '3'
services:
  base: &base
    image: chatwoot/chatwoot:latest
    env_file: .env ## Change this file for customized env variables
    volumes:
      - ./data/storage:/app/storage

  rails:
    <<: *base
    depends_on:
      - postgres
      - redis
    ports:
      - '127.0.0.1:3000:3000'
    environment:
      - NODE_ENV=production
      - RAILS_ENV=production
      - INSTALLATION_ENV=docker
    entrypoint: docker/entrypoints/rails.sh
    command: ['bundle', 'exec', 'rails', 's', '-p', '3000', '-b', '0.0.0.0']

  sidekiq:
    <<: *base
    depends_on:
      - postgres
      - redis
    environment:
      - NODE_ENV=production
      - RAILS_ENV=production
      - INSTALLATION_ENV=docker
    command: ['bundle', 'exec', 'sidekiq', '-C', 'config/sidekiq.yml']

  postgres:
    image: postgres:12
    restart: always
    ports:
      - '5432:5432'
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=chatwoot
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=SENHA SUPER SEGURA AQUI

  redis:
    image: redis:alpine
    restart: always
    command: ["sh", "-c", "redis-server --requirepass \"$REDIS_PASSWORD\""]
    env_file: .env
    volumes:
      - ./data/redis:/data
    ports:
      - '127.0.0.1:6379:6379'
  • Preparar banco de dados
docker compose run --rm rails bundle exec rails db:chatwoot_prepare
  • Levantando o serviço
docker compose up -d
  • Instalando Nginx e Configurando Proxy Reverso
sudo apt-get install nginx
cd /etc/nginx/sites-enabled
vim yourdomain.com.conf
  • Configurando Virtual Host
  • Em server name: chatwoot.minhaempresa.com.br
server {
  server_name <yourdomain.com>;

  # Point upstream to Chatwoot App Server
  set $upstream 127.0.0.1:3000;

  # Nginx strips out underscore in headers by default
  # Chatwoot relies on underscore in headers for API
  # Make sure that the config is set to on.
  underscores_in_headers on;
  location /.well-known {
    alias /var/www/ssl-proof/chatwoot/.well-known;
  }

  location / {
    proxy_pass_header Authorization;
    proxy_pass http://$upstream;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Ssl on; # Optional

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_http_version 1.1;
    proxy_set_header Connection “”;
    proxy_buffering off;

    client_max_body_size 0;
    proxy_read_timeout 36000s;
    proxy_redirect off;
  }
  listen 80;
}
  • Checando as configurações
nginx -t
systemctl reload nginx
  • Instalando Certbot e gerando certififcado
apt  install certbot
apt install python3-certbot-nginx
mkdir -p /var/www/ssl-proof/chatwoot/.well-known
certbot --webroot -w /var/www/ssl-proof/chatwoot/ -d yourdomain.com -i nginx
  • Ao chegar nessa etapa do processo de instalação do Chatwoot deverá estar rodando na porta 3000.
  • O nginx deverá estar rodando nas portas 80 e 443.
  • Proxy reverso deverá estar funcional e buscando chatwoot no localhost.
  • Crie sua conta.
  • Faça Login para seguir adiante.

Passo 3 – Instalando NodeJS versão 16 (Obrigatório)

–> Adicionar repositório

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

–> Instalar versão 16

NODE_MAJOR=16
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

Passo 4 – Instalar Codechat

git clone https://github.com/w3nder/chatwoot-codechat.git
mv chatwoot-codechat/ codechat
cd codechat
mv .env.example .env

–> Pegar token do usuário dentro do Chatwoot e atualizar
–> Gerar uma chave particular e colocar no CODECHAT_API_KEY Ex: ” 301803677cd97069a55a79038fb0a2ebd4be1e49 ”
–> Se desejar assinar as mensagens como o nome de usuário mude para TOSIGN=true
–> Se desejar receber mensagens enviadas fora do chatwoot mude para IMPORT_MESSAGES_SENT=false

####################################  EXEMPLO ############################
        PORT = 1234
        CHATWOOT_TOKEN = wV7yJG7q28h3RdQY7m4sDzVM
        CHATWOOT_BASE_URL = http://localhost:3000
        CODECHAT_BASE_URL = http://localhost:8080
        CODECHAT_API_KEY = 301803677cd97069a55a79038fb0a2ebd4be1e49
        TOSIGN=true
        IMPORT_MESSAGES_SENT=true
####################################  EXEMPLO ############################

Explicando em sequência:

  • Instalar dependências
  • Construir aplicação (bildar)
  • Rodar aplicação, o prompt ficará preso, assim poderá acompanhar os logs.
npm install
npm run build 
npm start

Passo 5 – Instalar API

  • Baixando API
  • Renomeando dev-env.yml para env.yml
cd
git clone https://github.com/code-chat-br/whatsapp-api.git
cd whatsapp-api
mv src/dev-env.yml src/env.yml
  • Ajustar Server Port
  • Ajustar Server URL
  • Habilitar Webhook
  • Ajustar Client
  • Usar chave de acesso configurada no Codechat
vim src/env.yml

Server Port 8080 http
Webhook --> URL: Colocar o link da url webhook: http://0.0.0.0:1234/webhook/codechat
Webhook Enabled: True

Client: Sac BR
--> Autehtication ( PEGAR A CHAVE DO CODECHAT EM cat /root/codechat/.env )
  • Explicando em sequência:

    • Instalar dependências
    • Construir aplicação (bildar)
    • Rodar aplicação, o prompt ficará preso, assim poderá acompanhar os logs.
npm install
npm run build
npm run start

Passo 6 – Instalar PM2

  • Instalar PM2
  • Configurar Codechat como Serviço
  • Configurar API como Serviço
npm install pm2 -g

cd /root/codechat
pm2 start dist/app.js --name codechat

cd /root/whatsapp-api
pm2 start 'npm run start prod' --name whatsapp-api

Passo 7 – Criando caixa de entrada no Chatwoot

  • Configurações
  • Caixa de Entrada
  • Adicionar Caixa de Entrada
  • API
URL: http://192.168.0.254:1234/webhook/chatwoot

PS. Usar endereço IP do Host. Não Usar Localhost - Não Usar 127.0.0.1
  • Criar contato para chamar o bot
  • Contatos
  • Novo Contato
    • Nome: Bot
    • Número: +123456
  • Abrir contato
    • Nova Mensagem
    • Caixa de Entrada: Whatsapp
    • Mensagem: /iniciar

 

  • Comandos do Code Chat
    • /iniciar
      • Este comando irá criar uma nova instância e gerar um QR code
    • /status
      • Este comando irá verificar o status da instância
    • /desconectar
      • Este comando irá desconectar o WhatsApp da instância

Passo 7 – Liberando personalização do chatwoot

  • Instalar PostgreSQL Client
apt install postgresql-client postgresql-client-common
  • Logar no banco de dados
  • Selecionar o chatwoot_production
  • Atualizar update installation_configs set locked = false;
psql -U postgres -h localhost -w
\c chatwoot_production
update installation_configs set locked = false;
\q

 

Script Backup Robocopy com Relatórios por e-mail

Nesse breve tutorial iremos aprender como configurar um Script de Backup para Windows usando o robocopy em Power Shell com relatório sendo enviado por e-mail.

Ler mais

Tutorial e2guardian com Squid Proxy Autenticando no com SSL e Blacklist no Debian 11

1 – Preparando o Ambiente

Adicionar as repos contrib e non-free no sources.list do apt.

vim /etc/apt/sources.lists
deb http://debian.pop-sc.rnp.br/debian/ bullseye main contrib non-free
deb-src http://debian.pop-sc.rnp.br/debian/ bullseye main contrib non-free

 

2 – Instalar e Testar o Squid

apt install squid

Configurar o squid com essas configurações

auth_param basic program /usr/lib/squid/basic_ldap_auth -R -b "DC=minhaempresa,DC=local" -D "cn=e2guardian,cn=Users,dc=minhaempresa,dc=local" -w "Senha123" -f sAMAccountName=%s -h 192.168.200.3

auth_param basic children 20
auth_param basic realm Autentique-se no proxy para acessar a internet.
auth_param basic credentialsttl 360 minutes

### --> Aqui é o momento quer o squid envia as requisições para o E2guardian

cache_peer 127.0.0.1 parent 8080 0 login=*:password
always_direct deny all
never_direct allow all

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.200.0/24 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 8080
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 8080 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

acl password proxy_auth REQUIRED

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager

http_access allow password localnet

http_access deny localnet
http_access deny localhost
http_access deny all

http_port 3128
cache_mgr contato@cuidadodigital.com.br
coredump_dir /var/spool/squid
access_log /var/log/squid/access.log
error_default_language pt-br
visible_hostname proxy.minhaempresa.local

 

Habilitar e Iniciar os serviços

systemctl enable squid
systemctl start squid

Realizar todos os testes antes de partir para o e2guardian, nesse momento vc ja deve autenticar no AD e navegar livremente com usuário e senha, se for o caso comente as linhas em que o o squid chama o e2guardian na porta 8080.

realize testes de consulta com AD com a seguinte linha de comando.

/usr/lib/squid/basic_ldap_auth -R -b "DC=minhaempresa,DC=local" -D "cn=e2guardian,cn=Users,dc=minhaempresa,dc=local" -w "Senha123" -f sAMAccountName=%s -h 192.168.200.3

Quando a sessão estiver establecida, digite o usuário e senha aperte Enter, uma resposta de OK deve ser apresentada.

3 – Instalando e Configurando o e2guardian

  • Instlar, Habilitar e Iniciar os serviços
apt install e2guardian
systemctl enable e2guardian
systemctl start e2guardian
  • Crie o diretório dos certificados e dê as permissões.
mkdir -p /etc/e2guardian/ssl/generatedcerts
chmod 777 /etc/e2guardian/ssl/generatedcerts
  • Crie o arquivo /etc/e2guardian/ssl/mkcert.sh e o execute:
touch /etc/e2guardian/ssl/mkcert.sh
chmod 777 /etc/e2guardian/ssl/mkcert.sh
  • Crie e execute os seguinte script
#!/bin/bash
openssl genrsa 4096 > ca.key
openssl req -new -x509 -days 3650 -key ca.key -out ca.pem
openssl x509 -in ca.pem -outform DER -out ca.der
openssl genrsa 4096 > cert.key
  • Edite o e2guardian.conf e configure as respectivas diretivas.
enablessl = on
cacertificatepath = '/etc/e2guardian/ssl/ca.pem'
caprivatekeypath = '/etc/e2guardian/ssl/ca.key'
certprivatekeypath = '/etc/e2guardian/ssl/cert.key'
generatedcertpath = '/etc/e2guardian/ssl/generatedcerts/'

language = 'ptbrazilian'
logfileformat = 3
  • Edite o e2guardianf1.conf e habilite a seguinte diretiva.
sslmitm = on
  • Realize o download da blacklist extraia e salve em
https://www.shallalist.de/Downloads/shallalist.tar.gz

/etc/e2guardian/lists/blacklists/
  • Edite o arquivo bannedsitelist em /etc/e2guardian/lists/ e habilite as categorias desejada
.Include</etc/e2guardian/lists/blacklists/downloads/domains>
.Include</etc/e2guardian/lists/blacklists/aggressive/domains>
.Include</etc/e2guardian/lists/blacklists/fortunetelling/domains>
.Include</etc/e2guardian/lists/blacklists/movies/domains>
.Include</etc/e2guardian/lists/blacklists/radiotv/domains>
.Include</etc/e2guardian/lists/blacklists/chat/domains>
.Include</etc/e2guardian/lists/blacklists/sex/lingerie/domains>
.Include</etc/e2guardian/lists/blacklists/spyware/domains>
.Include</etc/e2guardian/lists/blacklists/dating/domains>
.Include</etc/e2guardian/lists/blacklists/anonvpn/domains>
.Include</etc/e2guardian/lists/blacklists/drugs/domains>
.Include</etc/e2guardian/lists/blacklists/socialnet/domains>
.Include</etc/e2guardian/lists/blacklists/porn/domains>
.Include</etc/e2guardian/lists/blacklists/gamble/domains>
.Include</etc/e2guardian/lists/blacklists/hacking/domains>

 

Obs importante caso ocorra algum erro de digitção ou alguma lista de domínios não for encontrada por daemon, o serviço continuará ativo porém a bannedsitelist desabilitará todas as listas que estão corretas.

 

Imap Sync CentOS7 RPM

Download

  • wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Install

  • yum install ./epel-release-latest-*.noarch.rpm

Fonte

https://www.liquidweb.com/kb/enable-epel-repository/

 

Conectividade Social Caixa Erro no ICP de “Mensagem de erro do certificado”,

Erro ao acessar Conectividade Social

Certificado Revogado

Navegar:

Opções da Internet –> Avançadas –> Verificar Revogação de Certificado do Servidor

Opções da Internet –> Avançadas –> Verificar se há certificados Revogados do Fornecedor

 

[Resolvido] falha: mmc.exe GPOAdmin.dll Application Erro ID 1000

Application Error ID 1000 GPO Admin

Group Police Admin

Nome do aplicativo com falha: mmc.exe, versão: 10.0.14393.3750, carimbo de data/hora: 0x5ed5e019
Nome do módulo com falha: GPOAdmin.dll, versão: 10.0.14393.3986, carimbo de data/hora: 0x5f7800d6
Código de exceção: 0xc0000005
Deslocamento da falha: 0x00000000000be366
ID do processo com falha: 0x1864
Hora de início do aplicativo com falha: 0x01d6be7c97503e4b
Caminho do aplicativo com falha: C:\Windows\system32\mmc.exe
Caminho do módulo com falha: C:\Windows\System32\GPOAdmin.dll
ID do Relatório: 6ff003ed-c126-4199-8ea9-26754a4970d9
Nome completo do pacote com falha:
ID do aplicativo relativo ao pacote com falha:

 

To Clear cache , Just delete the contents of %userprofile%\AppData\Roaming\Microsoft\MMC

A resposta não é um JSON válido – WordPress Permalink Nome do Post

Para corrigir o erro no wordpress A resposta não é um JSON válido ao tentar fazer criar um página com permalink configurado para Nome do Post, proceda com a seguinte configuração.

Dentro de /etc/http/conf/httpd.conf

Dentro da sessão <directory /var/www/html> altere de AllowOverride None para AllowOverride All

 <Directory /var/www/html>
    AllowOverride All
 </Directory>

Então reinicie o apache.
sudo systemctl restart httpd