Sync Client V2

El Sync Client se puede utilizar para transferir todas las actualizaciones de contactos a una base de datos SQL o a un servicio web.

Activación

Para utilizar el Sync Client, active el conector correspondiente en la configuración de la campaña.
Después de una activación exitosa, se mostrará un token debajo del conector; este token es necesario para usar el cliente.
El token solo es visible para el usuario que activó el conector.

Cómo obtener el token de dbsync2

Instalación

Descargar la Última Versión del Binario

Descargar y Compilar el Código Fuente

Instalar Git:

sudo apt-get install git

Instalar Google Go:

sudo apt-get install golang-go

Para los siguientes pasos, asegúrese de que la variable de entorno GOPATH esté configurada.
Una descripción sobre cómo configurar GOPATH se puede encontrar aquí.

Clonar el repositorio:

go get bitbucket.org/modima/dbsync2

Instalar todas las dependencias:

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

Compilar el Código Fuente

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

Despliegue con Docker Compose

Para los usuarios que prefieren un despliegue en contenedores, se proporciona un archivo docker-compose.yml preconfigurado.
Este archivo soporta todos los modos (PostgreSQL, MySQL/MariaDB, SQL Server y Webhook), de modo que puede ejecutar dbsync2 sin modificar el código fuente, simplemente actualizando un único archivo .env.

Requisitos Previos

Configuración

Cree un archivo .env en el mismo directorio que su docker-compose.yml con el siguiente contenido (ajuste los valores según sea necesario):

# Configuración de la campaña
CAMPAIGN_ID=my_campaign_id
CAMPAIGN_TOKEN=my_campaign_token

# Configuración de PostgreSQL
POSTGRES_DB=mydb
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mypassword

# Configuración de MySQL
MYSQL_DB=mydb
MYSQL_USER=myuser
MYSQL_PASSWORD=mypassword
MYSQL_ROOT_PASSWORD=myrootpassword

# Configuración de SQL Server
SA_PASSWORD=YourStrong!Passw0rd
SQLSERVER_DB=mydb

# Configuración de Webhook
WEBHOOK_URL=https://example.com/api/transactions/

docker-compose.yml

A continuación se muestra un ejemplo de archivo docker-compose.yml que utiliza nuestra imagen de Docker Hub (dialfire/dbsync2:latest) y lee toda la información de conexión desde el archivo .env:

version: "3.8"

services:
  #############################
  # Ejemplo 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

  #############################
  # Ejemplo 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

  #############################
  # Ejemplo 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}

  #############################
  # Ejemplo 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: {}

Ejecutar con Docker Compose

Una vez configurados el archivo .env y docker-compose.yml, simplemente ejecute:

docker-compose up -d

Docker Compose descargará la imagen preconstruida dialfire/dbsync2:latest y iniciará todos los servicios según su configuración.

Cómo Funciona

Todas las actualizaciones de contactos se obtienen cada minuto y se transfieren directamente al servicio web o a la base de datos SQL configurada (consulte Uso).

Uso

Base de Datos SQL

El cliente es compatible con los siguientes sistemas de gestión de bases de datos:

  • MySQL / MariaDB
  • PostgreSQL
  • Microsoft SQL Server

Antes de utilizar el cliente, asegúrese de que la base de datos correspondiente ya exista. El cliente creará en dicha base de datos las siguientes tablas:

  • contacts
    Contiene todos los campos $ y los primeros 100 campos personalizados de la campaña.
  • transactions
    Contiene todas las transacciones junto con la clave foránea contact_id que hace referencia al contacto correspondiente.
  • connections
    Contiene todas las conexiones de las transacciones, con la clave foránea transaction_id.
  • recordings
    Contiene todas las grabaciones de llamadas asociadas a las conexiones, con la clave foránea connection_id.
  • inbound_calls
    Contiene todas las llamadas entrantes con la clave foránea contact_id.

Estructura de las tablas de la base de datos

Esquema de la URL de Conexión a la Base de Datos

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

Ejemplo

Transfiera todas las transacciones a partir del 01 de febrero de 2018 de la campaña MY_CAMPAIGN a una instancia local de Microsoft SQL Server, filtrando únicamente aquellas actualizaciones que comiencen con los prefijos 'fc_' o 'qc_' y que hayan sido realizadas por un usuario:

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

Servicio Web

Alternativamente, las transacciones pueden enviarse a un servicio web.
El servicio web debe aceptar solicitudes POST y responder con un código de estado entre 200 y 299 en caso de éxito (de lo contrario, se reintentará el envío hasta 10 veces).

La carga útil se envía en formato JSON:

{
    "contact": ...,      
    "transaction": ...,  
    "state": ...
}
  • contact: Contiene la información del contacto.
  • transaction: Contiene la transacción correspondiente.
  • state:
    • new para una nueva transacción
    • updated cuando una transacción se actualiza (por ejemplo, cuando se agregan datos de conexión).

Ejemplo

Envía todas las transacciones futuras de la campaña MY_CAMPAIGN a un servicio web:

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

Protocolo de (Error)

  • Todos los mensajes de error se muestran directamente en la consola (stdout).
  • Todos los mensajes de log se escriben en:
    /var/log/dbsync/{MY_CAMPAIGN_ID}_{MODE}_{TIMESTAMP}.log
  • Si el directorio /var/log/ no es accesible para escritura, los logs aparecerán en:
    $HOME/.dbsync/logs/{MY_CAMPAIGN_ID}_{MODE}_{TIMESTAMP}.log

Opciones de la Línea de Comandos

Puede obtener una vista general de todas las opciones ejecutando:

dbsync2 --help