Configuración de producción: instancia única

En este documento, se muestra cómo configurar una instancia única del cliente de la API de WhatsApp Business en producción.

Si todavía no lo hiciste, te recomendamos que configures una instancia única del cliente de la API de WhatsApp Business en una máquina de desarrollo. Para ello, sigue las instrucciones indicadas en Configuración de desarrollador: instancia única para probar tu configuración, Luego, puedes seguir este documento para configurar el cliente de la API de WhatsApp Business en producción.

Para completar la configuración inicial, consulta nuestros requisitos y sigue estos pasos:

  1. Crea un directorio biz para almacenar los scripts de configuración
  2. Obtén los archivos de configuración del cliente de la API de WhatsApp Business
  3. Configura la variable de entorno WA_API_VERSION
  4. Configura las variables del entorno de la base de datos
  5. Configura el volumen del contenido multimedia local
  6. Inicia el cliente de la API de WhatsApp Business
  7. Comprueba que los contenedores se estén ejecutando
  8. Ejecuta una comprobación de estado
  9. Registra el cliente de la API de WhatsApp Business
  10. Ejecuta otra comprobación de estado

Una vez que hayas configurado por completo tu instancia, podrás optar por actualizarla. Para desinstalar el cliente, sigue estos pasos.

Antes de empezar

Si ya ejecutaste una configuración de desarrollador y quieres reutilizar el número de teléfono durante la producción, consulta la Guía de migración antes de continuar con el resto de este documento.

El contenido de este documento se basa en la suposición de que se realizará una instalación desde cero con un nuevo número de teléfono.

Necesitarás lo siguiente:

Se requiere MySQL 5.7.xx o PostgreSQL 13.x/12.x/11.x.

La contraseña de tu base de datos no debe contener ninguno de estos caracteres: ?{}&~!()^=

Si se incumplen estas condiciones, es posible que la configuración no se complete correctamente.

También existe un problema conocido de compatibilidad con MySQL 8. Evita usar esta versión por ahora hasta que encontremos una solución.

Install Docker Desktop

To install Docker Desktop on your developer machine:

  1. Navigate to the Docker website.
  2. If you do not have an existing Docker account, create one by clicking on Sign Up.
  3. After you have created your account, you will be directed to the Docker download page.
  4. Download Docker Desktop based on your OS (This should be automatically detected and presented as the default option).

The remaining steps are based on macOS and should be very similar for Linux or Windows 10.

To install Docker using macOS:

  1. Install the package (docker.dmg for macOS).
  2. After extraction, Finder will pop-up and you will be presented with a dialog that instructs you to drag the Docker icon to Applications. Drag Docker icon to the Application folder in Finder.
  3. In Applications launch Docker and then click the Open button.
  4. You may be prompted to enter your password Docker needs priviledged/administrator access.
  5. Docker will present you with a tutorial, you can click Start to launch a tutorial or you can click Skip Tutorial to start using Docker.

Verify Docker Compose is installed

Docker Compose is a plugin that is bundled with Docker Desktop and should have installed automatically. For more information about using or Docker Compose, see Overview of Docker Compose. If for some reason Docker Compose was not installed, you can install it by following the instructions located at Install Docker Compose.

Configuración inicial del cliente de la API de WhatsApp Business

Paso 1: Crea un directorio biz para almacenar los scripts de configuración

Ejecuta el siguiente código en tu ubicación preferida para el cliente de la API de WhatsApp Business:

mkdir ~/biz; cd ~/biz;

Paso 2: Obtén los archivos de configuración del cliente de la API de WhatsApp Business

Clona los archivos de configuración prod-docker-compose.yml y db.env del directorio Instalación del repositorio de GitHub WhatsApp-Business-API-Setup-Scripts al directorio ~/biz que creaste en el paso 1.

Paso 3: Configura la variable de entorno WA_API_VERSION

La variable de entorno WA_API_VERSION debería configurarse con la versión actual mediante lo siguiente:

export WA_API_VERSION=current-whatsapp-version

Paso 4: Configura las variables del entorno de la base de datos

Cambia las variables de entorno de la base de datos en el archivo db.env, en el directorio ~/biz, de modo que reflejen tu configuración de MySQL/PostgreSQL.

WA_DB_ENGINE=MYSQL | PGSQL
WA_DB_HOSTNAME=your-database-server
WA_DB_PORT=your-database-server-port
WA_DB_USERNAME=your-database-username
WA_DB_PASSWORD=your-database-password

Paso 5: Configura el volumen del contenido multimedia local

El volumen del contenido multimedia local (de manera predeterminada, whatsappMedia:/usr/local/wamedia) definido en el archivo prod-docker-compose.yml se utiliza para almacenar archivos multimedia. De manera predeterminada, el volumen se monta en un directorio de la máquina Docker. Como alternativa, puedes montarlo en un directorio de host. Para cambiar el punto de montaje del volumen del contenido multimedia, modifica la definición del volumen dentro de la sección services, de whatsappMedia a la ruta del directorio host que estás utilizando.

services:
  wacore:
    ...
    volumes:
      - /your-local-media-volume-path:/usr/local/wamedia
    ...          
  waweb:
    ...
    volumes:
      - /your-local-media-volume-path:/usr/local/wamedia
    ... 

Paso 6: Inicia el cliente de la API de WhatsApp Business

Para iniciar el cliente de la API de WhatsApp Business con 1 contenedor de app web y 1 contenedor de app principal, ejecuta lo siguiente:

docker-compose -f prod-docker-compose.yml up -d

El resultado se verá como en el siguiente ejemplo:

Creating biz_wacore_1 ... done
Creating biz_waweb_1  ... done

Paso 7: Verifica que los contenedores se estén ejecutando

Para comprobar si todos los contenedores tienen el estado UP, ejecuta lo siguiente:

docker-compose -f prod-docker-compose.yml  ps

El resultado se verá como en el siguiente ejemplo:

     Name                    Command               State                   Ports
-------------------------------------------------------------------------------------------------
biz_wacore_1   /opt/whatsapp/bin/wait_on_ ...   Up      6250/tcp, 6251/tcp, 6252/tcp, 6253/tcp
biz_waweb_1    /opt/whatsapp/bin/wait_on_ ...   Up      0.0.0.0:9090->443/tcp

De manera predeterminada, el contenedor de la aplicación web se ejecutará en el puerto 9090.

Paso 8: Ejecuta una comprobación de estado

Puedes descargar y configurar nuestra colección de Postman para interactuar con la API de WhatsApp Business si no quieres utilizar la línea de comandos.

Puedes ejecutar una comprobación de estado en el cliente de la API de WhatsApp Business mediante una llamada a la API enviada al nodo health.

El resultado se verá como en el siguiente ejemplo:

{
    "health": {
        "gateway_status": "unregistered"
    }
}

La respuesta muestra un gateway_status de unregistered como gateway_status porque el cliente de la API de WhatsApp Business aún no está registrado.

Paso 9: Registra el cliente de la API de WhatsApp Business

Puedes registrar tu cliente de la API de WhatsApp Business mediante una llamada a la API enviada al nodo account.

Paso 10: Ejecuta una segunda comprobación de estado

Ejecuta otra comprobación de estado en el cliente de la API de WhatsApp Business mediante una llamada a la API enviada al nodo health después de completar el proceso de registro.

El resultado se verá como en el siguiente ejemplo:

{
    "health": {
        "gateway_status": "connected"
    }
}

El estado gateway_status de connected significa que el contenedor de la app principal puede conectarse al servidor de WhatsApp para verificar contactos y enviar mensajes.

Te recomendamos configurar la supervisión del cliente de la API de WhatsApp Business de producción.

Actualización del cliente de la API de WhatsApp Business

Habrá tiempo de inactividad durante el proceso de actualización.

Se recomienda crear una copia de seguridad de la configuración actual de la app antes de actualizarla; eso te permitirá asegurarte de que puedas volver a ponerte en marcha rápidamente. Sigue los pasos de la documentación sobre copias de seguridad y restauración.

Se recomienda siempre realizar las actualizaciones durante las horas de menos actividad.

Paso 1: Cambia la variable de entorno WA_API_VERSION por la nueva versión

La variable de entorno WA_API_VERSION debe actualizarse a la nueva versión mediante lo siguiente:

export WA_API_VERSION=new-whatsapp-version

Paso 2: Reinicia los contenedores Docker

Reinicia los contenedores Docker ejecutando lo siguiente:

docker-compose -f prod-docker-compose.yml up -d

Para usuarios de la base de datos MySQL que actualizan a la versión v2.23.x o a una superior

Ahora puedes utilizar un servicio de actualización de versión de base de datos que te permite actualizar la base de datos con la app en ejecución y así evitar tiempo de inactividad.

Paso 1: Descarga los archivos de configuración

El archivo dbupgrade-compose.yml tiene campos que indican la versión del contenedor.

Ejemplo:

services:
  dbupgrade:
    image: docker.whatsapp.biz/coreapp:v${WA_API_VERSION:-2.21.3}

Paso 2: Inicia el contenedor

Para actualizar la versión de una instalación, inicia el contenedor dbupgrade-service con la variable de entorno WA_API_VERSION configurada con el valor de la versión más reciente:

WA_API_VERSION=new-whatsapp-version docker-compose -f dbupgrade-compose.yml up -d

Nota: Si utilizas una orquestación que reinicia el contenedor al salir, independientemente del código de salida, inicia el servicio con la variable de entorno EXIT_ON_SUCCESS configurada en FALSE para evitar salir del contenedor cuando el código de salida sea 0.

Paso 3: Espera a que la actualización finalice

Si la base de datos se actualiza con éxito, el código del contenedor al salir será 0. Puedes utilizar el siguiente comando Docker para hacer un seguimiento del estado:

docker wait your-database-upgrade-container-name

El resultado devuelto será el código de salida del contenedor dbupgrade-service.

Paso 4: Reinicia los contenedores de la app principal y de la app web

Reinicia el contenedor Docker de la app web y el de la app principal con la variable de entorno WA_API_VERSION configurada con la versión más reciente:

WA_API_VERSION=new-whatsapp-version docker-compose -f prod-docker-compose.yml up -d

Para usuarios del cliente de la API de WhatsApp Business que actualicen a la versión 2.29.3 y versiones posteriores

Si vas a actualizar desde v2.29.1 o v2.29.2, o si tienes problemas durante el proceso de actualización a esas versiones y debiste volver a una versión anterior para mantener la estabilidad, te recomendamos que actualices a v2.29.3 y, luego, ejecutes el siguiente comando en el contenedor Docker de la aplicación web:

chown -R root your-media-directory/incoming your-media-directory/outgoing your-media-directory/shared

A menos que lo hayas cambiado, el directorio predeterminado del contenido es /usr/local/wamedia.

Nota:

  • Debido a que este comando puede demorarse en finalizar en función del tamaño del volumen del contenido multimedia preexistente, te recomendamos que lo inicies no bien realices la actualización, durante el período de mantenimiento.
  • Este comando solo modifica la propiedad de los volúmenes de contenido multimedia en segundo plano (durante la ejecución, no se ven afectadas las operaciones de contenido multimedia y la latencia o el rendimiento, ni hay tiempo de inactividad).
  • Esta es una ruta de actualización que se debe usar por única vez para solucionar problemas de compatibilidad con versiones anteriores en v2.29.1 y v2.29.2.

Cómo desinstalar el cliente de la API de WhatsApp Business

Te recomendamos que, antes de la instalación, realices una copia de seguridad de la configuración actual de tu aplicación. Sigue los pasos de la documentación sobre copias de seguridad y restauración.

Si debes eliminar todos los contenedores para restablecer el entorno de desarrollo, ejecuta el siguiente comando desde el directorio que contiene el archivo prod-docker-compose.yml:

docker-compose -f prod-docker-compose.yml down

El resultado se verá como en el siguiente ejemplo:

Stopping biz_waweb_1  ... done
Stopping biz_wacore_1 ... done
Removing biz_waweb_1  ... done
Removing biz_wacore_1 ... done

Si, además de los contenedores, quieres eliminar todos los volúmenes definidos en el archivo prod-docker-compose.yml, ejecuta el comando down con el parámetro -v:

docker-compose -f prod-docker-compose.yml down -v

Solución de problemas

Para solucionar problemas de forma más eficaz, recomendamos utilizar WADebug. WADebug es una herramienta de línea de comandos que sirve para buscar posibles problemas en la configuración de la API de WhatsApp Business y para pedir ayuda a la asistencia de WhatsApp con mayor facilidad.

En los casos en que no se pueda utilizar WADebug o cuando al ejecutar la herramienta se devuelvan errores, ejecuta el siguiente comando para recopilar registros de todos los contenedores:

docker-compose -f prod-docker-compose.yml logs > debug_output.txt

Para recopilar los registros de un servicio específico, agrega el nombre del servicio (waweb o wacore) al comando docker-compose logs:

docker-compose -f prod-docker-compose.yml logs waweb > debug_output.txt

Puedes encontrar los registros en el archivo debug_output.txt en el directorio actual.


Este software utiliza código de FFmpeg con licencia de LGPLv2.1, y puedes descargar el código fuente aquí.