¿Por qué Chatwoot responde 401 Unauthorized a los webhooks de WhatsApp?

En resumen: desde la versión 4.14, Chatwoot verifica el X-Hub-Signature-256 de las entregas de WhatsApp Cloud con el app_secret de la bandeja de entrada correspondiente. Un 401 significa una de dos cosas: ninguna bandeja de entrada coincide con el número, o su app_secret no es la clave que firmó la entrega. Las dos se corrigen en la bandeja de entrada, con la API de Chatwoot.

ZapClaw conecta tu número a la API oficial de WhatsApp, firma cada entrega a Chatwoot y te muestra el comando de la bandeja de entrada de cada número con los datos del número.

Empieza gratis

Las dos causas

WHATSAPP_APP_SECRET en el entorno no sirve. Chatwoot lee ese valor de la configuración de la instalación, que db:chatwoot_prepare crea vacía en una instalación estándar, así que el valor del entorno nunca se usa. Puedes quitar la variable.

Cómo corregirlo

  1. Abre la entrega que falló en Registros de ZapClaw: ahí ves el estado y la respuesta sin procesar que devolvió Chatwoot. Un 401 con Cuerpo de la respuesta vacío viene de esta verificación de firma.
  2. Corrige la bandeja de entrada con la API de Chatwoot. Un número que todavía no tiene bandeja la obtiene con el comando que el panel de ZapClaw muestra para él. En una bandeja que ya existe, envía todo el provider_config, con app_secret y source: manual_setup_v2: Chatwoot reemplaza el objeto en lugar de fusionarlo, y uno parcial se rechaza con Provider config Invalid Credentials. Si el número también está mal, agrega phone_number a channel en la misma llamada.

    curl -X PATCH "https://chatwoot.your-domain.com/api/v1/accounts/<ACCOUNT_ID>/inboxes/<INBOX_ID>" \
      -H "api_access_token: <CHATWOOT_ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -d '{
        "channel": {
          "provider_config": {
            "api_key": "zc_live_xxx",
            "phone_number_id": "<PHONE_NUMBER_ID>",
            "business_account_id": "<WABA_ID>",
            "source": "manual_setup_v2",
            "app_secret": "<CHATWOOT_SIGNING_SECRET>"
          }
        }
      }'

    El app_secret es la Clave de firma de la sección de Chatwoot en ZapClaw. El ID de la bandeja de entrada es el número después de /settings/inboxes/ cuando abres su configuración. La consola de Rails también funciona: mira la guía (en inglés).

  3. Haz clic en Enviar evento de prueba en la sección de Chatwoot de ZapClaw. Si sale bien, Chatwoot encontró la bandeja de entrada y aceptó la firma. La prueba va a tu primer número conectado, así que ese número también necesita una bandeja. Luego reenvía desde Registros las entregas que fallaron.

Directo desde Meta, sin ZapClaw

Un 404, Invalid OAuth access token y las respuestas que nunca salen de Chatwoot tienen su propia solución en la solución de problemas de Chatwoot (en inglés).

Chatwoot self-hosted en la API oficial de WhatsApp

ZapClaw conecta tu número por Coexistencia, así que sigue funcionando en la app de WhatsApp Business, y el propio canal de WhatsApp Cloud de Chatwoot habla con ZapClaw en lugar de Meta. No necesitas una app propia en Meta ni App Review.

El panel muestra el comando de la bandeja de entrada de cada número con los datos del número, y Registros guarda cada entrega con la respuesta de Chatwoot, lista para reenviar.

Empieza gratis Por qué usar Chatwoot con ZapClaw