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 has hecho, te recomendamos que configures una instancia única del cliente de la API de WhatsApp Business en una máquina de desarrollador. Para ello, sigue las instrucciones de la documentación Configuración del desarrollador: instancia única a fin de probar la configuración antes de seguir este documento para configurar el cliente de la API de WhatsApp Business en producción.

Antes de empezar

Si ya has ejecutado una configuración de desarrollador y quieres volver a utilizar el número de teléfono en producción, consulta la guía de migración antes de continuar con el resto de este documento.

Para el contenido de este documento, se supone que realizarás una instalación nueva con un nuevo número de teléfono.

Necesitarás lo siguiente:

Se necesita MySQL 5.7.xx o PostgreSQL 10.6/9.6.x/9.5.x.

La contraseña de la base de datos no debe contener ninguno de los caracteres siguientes: ?{}&~!()^=.

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

También existe un problema de compatibilidad conocido con MySQL 8. Evita utilizar la más reciente por ahora. Estamos trabajando en una corrección.

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

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

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

mkdir ~/biz; cd ~/biz;

Paso 2: obtener 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 Installation del repositorio de GitHub WhatsApp-Business-API-Setup-Scripts al directorio ~/biz que has creado en el Paso 1.

Paso 3: definir la variable de entorno WA_API_VERSION

La variable de entorno WA_API_VERSION debe establecerse en la versión actual con el comando siguiente:

export WA_API_VERSION=current-whatsapp-version

Paso 4: definir las variables de entorno de la base de datos

Cambia las variables de entorno de la base de datos en el archivo db.env del directorio ~/biz para que reflejen la 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: configurar el volumen local de contenido multimedia

El volumen local de contenido multimedia (whatsappMedia:/usr/local/wamedia de forma predeterminada) definido en el archivo prod-docker-compose.yml se utiliza para almacenar archivos multimedia. De forma predeterminada, el volumen se monta en un directorio de la máquina con Docker. También puedes optar por montar el volumen de contenido multimedia en un directorio host. Para cambiar el punto de montaje del volumen de contenido multimedia, modifica la definición del volumen dentro de la sección services de whatsappMedia por la ruta de acceso del directorio host que utilices.

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

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

Para iniciar el cliente de la API de WhatsApp Business con un contenedor de aplicación web y uno de aplicación principal, ejecuta el siguiente comando:

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

La respuesta resultante debería tener el aspecto siguiente:

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

Paso 7: verificar que los contenedores se están ejecutando

Para comprobar que todos los contenedores tienen el estado ACTIVADO, ejecuta el comando siguiente:

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

La respuesta resultante debería tener el aspecto siguiente:

     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 forma predeterminada, el contenedor de la aplicación web se ejecutará en el puerto 9090.

Paso 8: realizar 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 usar la línea de comandos.

Para realizar una comprobación de estado en el cliente de la API de WhatsApp Business, haz una llamada a la API al nodo health.

La respuesta resultante debería tener el aspecto siguiente:

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

La respuesta muestra gateway_status como unregistered para gateway_status porque todavía no se ha registrado el cliente de la API de WhatsApp Business.

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

Para registrar el cliente de la API de WhatsApp Business, haz una llamada a la API al nodo account.

Paso 10: realizar una segunda comprobación de estado

Para realizar otra comprobación de estado en el cliente de la API de WhatsApp Business, haz una llamada a la API al nodo health después de completar el registro.

La respuesta resultante debería tener el aspecto siguiente:

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

Si gateway_status es connected, significa que el contenedor de la aplicación principal puede conectarse al servidor de WhatsApp para consultar contactos y enviar mensajes.

Te recomendamos que configures la supervisión para el cliente de la API de WhatsApp Business de producción.

Actualización del cliente de la API de WhatsApp Business

Se producirá un tiempo de inactividad durante el proceso de actualización.

Te recomendamos encarecidamente que realices una copia de seguridad de la configuración actual de la aplicación antes de actualizarla para asegurarte de que puedas volver a trabajar rápidamente. Sigue la documentación Copia de seguridad y restauración.

Se recomienda siempre llevar a cabo las actualizaciones durante las horas de menor actividad.

Paso 1: cambiar la variable de entorno WA_API_VERSION a la nueva versión

La variable de entorno WA_API_VERSION debe actualizarse al número de la nueva versión mediante el comando siguiente:

export WA_API_VERSION=new-whatsapp-version

Paso 2: reiniciar los contenedores de Docker

Reinicia los contenedores de Docker ejecutando el comando siguiente:

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

Para los usuarios de la base de datos MySQL que realizarán la actualización v2.23.x y posteriores

Ahora puedes utilizar un servicio de actualización de bases de datos que te permitirá actualizar la base de datos mientras la aplicación continúa ejecutándose. De este modo, evitarás el tiempo de inactividad.

Paso 1: descargar el archivo de configuración

El archivo dbupgrade-compose.yml contiene campos en los que se indica la versión del contenedor.

Ejemplo:

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

Paso 2: iniciar el contenedor

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

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

Nota: Si vas a utilizar una orquestación que reinicie el contenedor al cerrarlo (independientemente del código de salida), inicia el servicio con la variable de entorno EXIT_ON_SUCCESS establecida en FALSE para evitar que el contenedor se cierre cuando el código de salida sea 0.

Paso 3: esperar a que la actualización finalice

Si la actualización de la base de datos se realiza correctamente, el contenedor se cerrará con el código 0. Puedes utilizar el siguiente comando de Docker para hacer un seguimiento del estado:

docker wait your-database-upgrade-container-name

Este comando devolverá el código de salida del contenedor dbupgrade-service.

Paso 4: reiniciar los contenedores de la aplicación principal y la aplicación web

Reinicia los contenedores de Docker de la aplicación principal y la aplicación web con la variable de entorno WA_API_VERSION establecida en la versión más reciente:

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

Para los usuarios del cliente de la API de WhatsApp Business que realizarán la actualización a la versión 2.29.3 y posteriores

Si realizas la actualización desde la versión v2.29.1 o v2.29.2o encontraste problemas durante la actualización a esas versiones y tuviste que volver a una versión anterior por motivos de estabilidad, te recomendamos que actualices a la versión v2.29.3 y que ejecutes el comando siguiente en el contenedor de 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 de contenido multimedia predeterminado es /usr/local/wamedia.

Nota:

  • Dado que este comando puede tardar un rato en completarse en función del tamaño del volumen de contenido multimedia preexistente, recomendamos iniciarlo lo antes posible al realizar 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 (no supone ningún impacto ni tiempo de inactividad para las operaciones con contenido multimedia ni en la latencia ni el rendimiento mientras se ejecuta).
  • Es una ruta de actualización que debe seguirse solo una vez para corregir los problemas de retrocompatibilidad de las versiones v2.29.1 y v2.29.2.

Desinstalación del cliente de la API de WhatsApp Business

Se recomienda realizar una copia de seguridad de la configuración actual de la aplicación antes de desinstalarla. Sigue la documentación de Copia de seguridad y restauración.

Si necesitas restablecer tu entorno de desarrollo mediante la eliminación de todos los contenedores, ejecuta el siguiente comando desde el directorio que contiene el archivo prod-docker-compose.yml:

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

La respuesta resultante debería tener el aspecto siguiente:

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

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

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

Solución de problemas

Recomendamos utilizar WADebug para solucionar problemas de una forma más efectiva. WADebug es una herramienta de línea de comandos que ayuda a detectar problemas potenciales con la configuración de la API de WhatsApp Business y mejora la eficacia al pedir ayuda al servicio de asistencia de WhatsApp.

En los casos en que no se puede usar WADebug o se obtienen errores al ejecutar la herramienta, ejecuta el comando siguiente para recopilar los 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, añade 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 del directorio actual.


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