Sync Client V2

O Sync Client pode ser usado para transferir todas as atualizações de contatos para um banco de dados SQL ou para um serviço web.

Ativação

Para usar o Sync Client, ative o conector correspondente nas configurações da campanha.
Após a ativação bem-sucedida, um token será exibido abaixo do conector – esse token é necessário para utilizar o cliente.
O token é visível apenas para o usuário que ativou o conector.

Como obter o token do dbsync2

Instalação

Baixar a Última Versão do Binário

Baixar e Compilar o Código Fonte

Instalar Git:

sudo apt-get install git

Instalar Google Go:

sudo apt-get install golang-go

Para os próximos passos, certifique-se de que a variável de ambiente GOPATH esteja configurada.
Uma descrição de como configurar o GOPATH pode ser encontrada aqui.

Clonar o repositório:

go get bitbucket.org/modima/dbsync2

Instalar todas as dependências:

cd $GOPATH/src/bitbucket.org/modima/dbsync && godep restore

Compilar o Código Fonte

  • Plataforma alvo Linux:
    cd $GOPATH/src/bitbucket.org/modima/dbsync2/ && go build
    
  • Plataforma alvo Windows:
    cd $GOPATH/src/bitbucket.org/modima/dbsync2/ && GOOS=windows GOARCH=amd64 go build -o dbsync2.exe
    
  • Plataforma alvo Mac:
    cd $GOPATH/src/bitbucket.org/modima/dbsync2/ && GOOS=darwin GOARCH=amd64 go build -o dbsync2_mac
    

Implantação com Docker Compose

Para os usuários que preferem uma implantação em contêiner, é fornecido um arquivo docker-compose.yml pré-configurado.
Este arquivo suporta todos os modos (PostgreSQL, MySQL/MariaDB, SQL Server e Webhook), permitindo que você execute o dbsync2 sem modificar o código fonte – basta atualizar um único arquivo .env.

Pré-requisitos

Configuração

Crie um arquivo .env no mesmo diretório que o seu docker-compose.yml com o seguinte conteúdo (ajuste os valores conforme necessário):

# Configurações da campanha
CAMPAIGN_ID=my_campaign_id
CAMPAIGN_TOKEN=my_campaign_token

# Configurações do PostgreSQL
POSTGRES_DB=mydb
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mypassword

# Configurações do MySQL
MYSQL_DB=mydb
MYSQL_USER=myuser
MYSQL_PASSWORD=mypassword
MYSQL_ROOT_PASSWORD=myrootpassword

# Configurações do SQL Server
SA_PASSWORD=YourStrong!Passw0rd
SQLSERVER_DB=mydb

# Configurações do Webhook
WEBHOOK_URL=https://example.com/api/transactions/

docker-compose.yml

A seguir, um exemplo de arquivo docker-compose.yml que utiliza nossa imagem do Docker Hub (dialfire/dbsync2:latest) e lê todas as informações de conexão a partir do arquivo .env:

version: "3.8"

services:
  #############################
  # Exemplo PostgreSQL
  #############################
  postgres:
    image: postgres:16
    container_name: postgres_sync
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-mydb}
      POSTGRES_USER: ${POSTGRES_USER:-myuser}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mypassword}
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  dbsync2_postgres:
    image: dialfire/dbsync2:latest
    container_name: dbsync2_postgres
    restart: unless-stopped
    depends_on:
      - postgres
    environment:
      CAMPAIGN_ID: ${CAMPAIGN_ID}
      CAMPAIGN_TOKEN: ${CAMPAIGN_TOKEN}
      POSTGRES_USER: ${POSTGRES_USER:-myuser}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mypassword}
      POSTGRES_DB: ${POSTGRES_DB:-mydb}
    command: >
      dbsync2 --a db_sync --c ${CAMPAIGN_ID} --ct ${CAMPAIGN_TOKEN} --url postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable

  #############################
  # Exemplo MySQL/MariaDB
  #############################
  mysql:
    image: mysql:8
    container_name: mysql_sync
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: ${MYSQL_DB:-mydb}
      MYSQL_USER: ${MYSQL_USER:-myuser}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-mypassword}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpassword}
    volumes:
      - ./data/mysql:/var/lib/mysql
    ports:
      - "3306:3306"

  dbsync2_mysql:
    image: dialfire/dbsync2:latest
    container_name: dbsync2_mysql
    restart: unless-stopped
    depends_on:
      - mysql
    environment:
      CAMPAIGN_ID: ${CAMPAIGN_ID}
      CAMPAIGN_TOKEN: ${CAMPAIGN_TOKEN}
      MYSQL_USER: ${MYSQL_USER:-myuser}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-mypassword}
      MYSQL_DB: ${MYSQL_DB:-mydb}
    command: >
      dbsync2 --a db_sync --c ${CAMPAIGN_ID} --ct ${CAMPAIGN_TOKEN} --url mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@mysql:3306/${MYSQL_DB}?useSSL=false

  #############################
  # Exemplo SQL Server
  #############################
  sqlserver:
    image: mcr.microsoft.com/mssql/server:2019-latest
    container_name: sqlserver_sync
    restart: unless-stopped
    environment:
      SA_PASSWORD: ${SA_PASSWORD:-YourStrong!Passw0rd}
      ACCEPT_EULA: "Y"
      MSSQL_PID: "Developer"
    ports:
      - "1433:1433"

  dbsync2_sqlserver:
    image: dialfire/dbsync2:latest
    container_name: dbsync2_sqlserver
    restart: unless-stopped
    depends_on:
      - sqlserver
    environment:
      CAMPAIGN_ID: ${CAMPAIGN_ID}
      CAMPAIGN_TOKEN: ${CAMPAIGN_TOKEN}
      SA_PASSWORD: ${SA_PASSWORD:-YourStrong!Passw0rd}
      SQLSERVER_DB: ${SQLSERVER_DB:-mydb}
    command: >
      dbsync2 --a db_sync --c ${CAMPAIGN_ID} --ct ${CAMPAIGN_TOKEN} --url sqlserver://sa:${SA_PASSWORD}@sqlserver:1433/${SQLSERVER_DB}

  #############################
  # Exemplo Webhook
  #############################
  dbsync2_webhook:
    image: dialfire/dbsync2:latest
    container_name: dbsync2_webhook
    restart: unless-stopped
    environment:
      CAMPAIGN_ID: ${CAMPAIGN_ID}
      CAMPAIGN_TOKEN: ${CAMPAIGN_TOKEN}
      WEBHOOK_URL: ${WEBHOOK_URL:-https://example.com/api/transactions/}
    command: >
      dbsync2 --a webhook --c ${CAMPAIGN_ID} --ct ${CAMPAIGN_TOKEN} --url ${WEBHOOK_URL}

networks:
  default: {}

Executando com Docker Compose

Depois de configurar o arquivo .env e o docker-compose.yml, basta executar:

docker-compose up -d

O Docker Compose irá baixar a imagem pré-construída dialfire/dbsync2:latest e iniciar todos os serviços conforme sua configuração.

Como Funciona

Todas as atualizações de contatos são obtidas a cada minuto e transferidas diretamente para o serviço web ou para o banco de dados SQL configurado (consulte Uso).

Uso

Banco de Dados SQL

O cliente suporta os seguintes sistemas de gerenciamento de banco de dados:

  • MySQL / MariaDB
  • PostgreSQL
  • Microsoft SQL Server

Antes de utilizar o cliente, certifique-se de que o banco de dados correspondente já exista. O cliente, então, criará as seguintes tabelas nesse banco de dados:

  • contacts
    Contém todos os campos $ e os 100 primeiros campos personalizados da campanha.
  • transactions
    Contém todas as transações juntamente com a chave estrangeira contact_id, que referencia o contato correspondente.
  • connections
    Contém todas as conexões das transações, com a chave estrangeira transaction_id.
  • recordings
    Contém todas as gravações de chamadas associadas às conexões, com a chave estrangeira connection_id.
  • inbound_calls
    Contém todas as chamadas recebidas com a chave estrangeira contact_id.

Estrutura das Tabelas do Banco de Dados

Esquema da URL de Conexão ao Banco de Dados

MySQL / MariaDB:

mysql://username:password@localhost:3306/database?useSSL=false

PostgreSQL:

postgres://username:password@localhost:5432/database?sslmode=disable

Microsoft SQL Server:

sqlserver://username:password@localhost:1433/instance/database

Exemplo

Transfira todas as transações a partir de 01 de fevereiro de 2018 da campanha MY_CAMPAIGN para uma instância local do Microsoft SQL Server, filtrando apenas as atualizações que comecem com os prefixos 'fc_' ou 'qc_' e que tenham sido realizadas por um usuário:

dbsync2 --a db_sync --fm hi_updates_only --fp 'fc_,qc_' --c MY_CAMPAIGN_ID --ct MY_CAMPAIGN_TOKEN --s 2018-02-01 --url sqlserver://my_user:my_password@localhost:1433/my_database

Serviço Web

Alternativamente, as transações podem ser enviadas para um serviço web.
O serviço web deve aceitar requisições POST e responder com um código de status entre 200 e 299 em caso de sucesso (caso contrário, a transmissão será reexecutada até 10 vezes).

A carga útil é enviada em formato JSON:

{
    "contact": ...,      
    "transaction": ...,  
    "state": ...
}
  • contact: Contém as informações do contato.
  • transaction: Contém a transação correspondente.
  • state:
    • new para uma nova transação
    • updated quando uma transação é atualizada (por exemplo, quando os dados de conexão são adicionados).

Exemplo

Envie todas as transações futuras da campanha MY_CAMPAIGN para um serviço web:

./dbsync2 --a webhook --c MY_CAMPAIGN_ID --ct MY_CAMPAIGN_TOKEN --url 'https://example.com/api/transactions/'

Protocolo de Erro

  • Todas as mensagens de erro são exibidas diretamente no console (stdout).
  • Todas as mensagens de log são gravadas em:
    /var/log/dbsync/{MY_CAMPAIGN_ID}_{MODE}_{TIMESTAMP}.log
  • Se o diretório /var/log/ não tiver permissão de escrita, os logs serão salvos em:
    $HOME/.dbsync/logs/{MY_CAMPAIGN_ID}_{MODE}_{TIMESTAMP}.log

Opções da Linha de Comando

Para obter uma visão geral de todas as opções, execute:

dbsync2 --help