OpenClaw

Canal Signal de OpenClaw

Mensajería
Difícil

Conecta OpenClaw a Signal usando signal-cli — una interfaz de línea de comandos de código abierto de terceros para el protocolo Signal. Esta integración proporciona mensajería de IA con privacidad como prioridad y cifrado de extremo a extremo completo. OpenClaw se comunica con un daemon de signal-cli a través de HTTP JSON-RPC y Server-Sent Events, permitiendo que tu asistente de IA envíe y reciba mensajes en Signal. Se requiere un número de teléfono dedicado para la cuenta del bot.

Info rápida
DificultadDifícil
CategoríaMensajería
Funciones compatibles4 / 6

Signal Funciones compatibles

Mensajes de texto

Compatible

Medios y archivos

Compatible

Reacciones

Compatible

Hilos

No compatible

Mensajes de voz

No compatible

Chat grupal

Compatible

Signal Requisitos previos

  • Un número de teléfono dedicado para la cuenta del bot de Signal (separado de tu número personal)
  • Java Runtime Environment (JRE 25+) instalado en tu servidor
  • signal-cli instalado y accesible en tu PATH
  • OpenClaw Gateway en funcionamiento y configurado
  • Una cuenta de Signal existente para vincular el bot (o un nuevo registro)

Signal Configuración rápida

1

Instalar signal-cli

Descarga e instala signal-cli desde el repositorio oficial de GitHub. Requiere Java 25 o posterior. Verifica la instalación ejecutando 'signal-cli --version' en tu terminal.

2

Vincular o registrar una cuenta de Signal

Vincula signal-cli a una cuenta de Signal existente ejecutando 'signal-cli link -n "OpenClaw"' y escaneando el código QR desde otro dispositivo. Alternativamente, registra una nueva cuenta con 'signal-cli -a +15551234567 register'. Usa un número dedicado — ejecutarlo en tu cuenta personal causará bucles de auto-mensajes.

3

Agregar configuración del canal Signal

Agrega la configuración del canal Signal a ~/.openclaw/openclaw.json. Establece el campo 'account' con el número de teléfono de tu bot en formato E.164 y configura la dmPolicy (pairing, allowlist u open) para controlar quién puede enviar mensajes a tu asistente.

4

Iniciar Gateway y enviar un mensaje de prueba

Inicia el proceso Gateway. OpenClaw iniciará automáticamente el daemon de signal-cli. Envía un mensaje al número del bot desde otra cuenta de Signal. Si usas la política pairing por defecto, aprueba al remitente mediante 'openclaw pairing approve signal <code>'.

Signal Ejemplo de configuración

config.json
{
  "channels": {
    "signal": {
      "enabled": true,
      "account": "+15551234567",
      "dmPolicy": "pairing"
    }
  }
}

Signal Documentación Detallada

Descripción general de la arquitectura

OpenClaw se conecta a Signal a través de signal-cli — un cliente de línea de comandos basado en Java que implementa el protocolo Signal. La arquitectura utiliza una interfaz HTTP JSON-RPC con Server-Sent Events (SSE) para la entrega de mensajes en tiempo real. Por defecto, OpenClaw inicia automáticamente un proceso daemon de signal-cli al arrancar el Gateway. El daemon maneja todas las operaciones del protocolo Signal (cifrado, intercambio de claves, envío/recepción de mensajes), mientras que OpenClaw se comunica con él a través de una API HTTP local. Esto mantiene la capa del protocolo Signal completamente separada de la lógica de IA. Alternativamente, puedes ejecutar signal-cli como un daemon externo y apuntar OpenClaw a él mediante la configuración httpUrl — útil para gestionar signal-cli de forma independiente o ejecutarlo en un host diferente.
El daemon auto-iniciado se vincula a 127.0.0.1:8080 por defecto. Cambia httpHost y httpPort si necesitas una dirección diferente.
Ejecutar signal-cli externamente te da más control sobre actualizaciones y gestión del ciclo de vida. Establece httpUrl a la URL completa del daemon para deshabilitar el inicio automático.

Configuración de la cuenta de Signal

Tu bot necesita una cuenta de Signal dedicada. No uses tu número personal — Signal ignora los mensajes enviados a uno mismo, y ejecutar cuentas personal y de bot en el mismo número crea conflictos de enrutamiento. Dos opciones para la configuración de la cuenta: • Vincular a dispositivo existente — Ejecuta 'signal-cli link -n "OpenClaw"' para generar un URI de enlace de dispositivo. Escanea el código QR desde la aplicación principal de Signal. Este es el enfoque recomendado por ser el más sencillo. • Registro nuevo — Ejecuta 'signal-cli -a +15551234567 register' para registrar una nueva cuenta de Signal directamente. Necesitarás verificar el número mediante SMS o llamada de voz. Una vez vinculado o registrado, signal-cli almacena sus credenciales y claves localmente. Estas persisten entre reinicios.
openclaw.json
{
  "channels": {
    "signal": {
      "account": "+15551234567",
      "cliPath": "/usr/local/bin/signal-cli"
    }
  }
}
Evita ejecutar el bot en tu número personal de Signal. La protección contra auto-mensajes de Signal ignorará los mensajes enviados a ti mismo, y el bot no funcionará correctamente.

Modo daemon externo

Para despliegues avanzados, puedes ejecutar signal-cli como un proceso daemon independiente fuera de OpenClaw. Esto es útil cuando deseas gestionar las actualizaciones de signal-cli de forma independiente, ejecutarlo en una máquina separada, o compartir un único daemon entre múltiples servicios. Inicia el daemon manualmente con: signal-cli -a +15551234567 daemon --http=127.0.0.1:8080 Luego apunta OpenClaw a él estableciendo httpUrl. Cuando httpUrl está configurado, OpenClaw omite el inicio automático del daemon y se conecta al proceso existente.
openclaw.json
{
  "channels": {
    "signal": {
      "account": "+15551234567",
      "httpUrl": "http://127.0.0.1:8080/api/v1/rpc"
    }
  }
}
Cuando uses un daemon externo, asegúrate de que esté iniciado antes del Gateway. OpenClaw esperará hasta startupTimeoutMs (máximo 120 segundos) a que el daemon esté disponible.

Políticas de DM

Las políticas de DM (Mensaje Directo) controlan quién puede interactuar con tu asistente de IA en chats privados. OpenClaw soporta cuatro políticas: • pairing (por defecto) — Los nuevos contactos reciben un código de emparejamiento aleatorio cuando envían su primer mensaje al bot. El código expira después de 1 hora. Aprueba mediante 'openclaw pairing approve signal <code>' en tu terminal. Una vez aprobados, pueden chatear libremente. • allowlist — Solo los números de teléfono o UUID listados en allowFrom pueden enviar mensajes al bot. Los demás son ignorados silenciosamente. Usa el formato E.164 para números de teléfono o 'uuid:<id>' para contactos solo con UUID. • open — Cualquiera que envíe un mensaje al bot recibe respuesta. Requiere agregar '*' a la lista allowFrom como confirmación de seguridad. Usar con precaución. • disabled — La funcionalidad de DM está completamente desactivada.
openclaw.json
{
  "channels": {
    "signal": {
      "dmPolicy": "allowlist",
      "allowFrom": ["+15551234567", "uuid:a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
    }
  }
}
Los contactos que registraron Signal sin compartir su número de teléfono aparecerán como 'uuid:<id>' en la lista allowFrom. Revisa los logs del Gateway para encontrar su UUID.
Los límites de historial por contacto se pueden establecer mediante dms["<phone_or_uuid>"].historyLimit para anular el dmHistoryLimit global.

Gestión de chats grupales

OpenClaw soporta chats grupales de Signal con control de acceso configurable: • open — Aceptar mensajes de todos los miembros del grupo • allowlist — Solo los remitentes aprobados (mediante groupAllowFrom) pueden activar el bot • disabled — Ignorar todos los mensajes de grupo Las conversaciones de grupo están completamente aisladas de los DMs. Los mensajes se etiquetan como 'agent:<agentId>:signal:group:<groupId>' para mantener contexto e historial separados por grupo. Puedes configurar historyLimit por grupo para controlar cuántos mensajes se incluyen como contexto de IA (por defecto 50, establece 0 para deshabilitar el historial).
openclaw.json
{
  "channels": {
    "signal": {
      "groupPolicy": "open",
      "historyLimit": 50
    }
  }
}

Privacidad y cifrado de extremo a extremo

Signal es el estándar de referencia para mensajería privada. Todos los mensajes entre el bot y los contactos están cifrados de extremo a extremo usando el Protocolo Signal (algoritmo Double Ratchet + acuerdo de claves X3DH). OpenClaw nunca ve mensajes en texto plano en tránsito — el descifrado ocurre localmente dentro del proceso signal-cli en tu servidor. Propiedades clave de privacidad: • Los mensajes se cifran de cliente a cliente — los servidores de Signal no pueden leerlos • signal-cli almacena las claves de cifrado localmente en tu servidor • Ningún dato pasa a través de la infraestructura de Anthropic, OpenAI o cualquier proveedor de IA de terceros (los mensajes se descifran localmente, se procesan por tu Gateway autoalojado, y solo el contexto de la conversación se envía a tu proveedor de IA configurado) • Los eventos de historias se pueden ignorar completamente con ignoreStories: true
Para máxima privacidad, combina Signal con un proveedor de LLM alojado localmente (ej., Ollama) para mantener todos los datos completamente en tu infraestructura.

Reacciones

OpenClaw soporta el envío y recepción de reacciones con emoji en mensajes de Signal. Las reacciones son útiles para confirmación (mostrar al usuario que su mensaje fue recibido) y para comportamientos interactivos del agente. La sintaxis de reacciones usa la herramienta de mensaje con destinos en formato E.164, formato UUID o formato de grupo: • Reacción a DM: target=+15551234567 o target=uuid:<id> • Reacción a grupo: target=signal:group:<groupId> con targetAuthor=uuid:<sender> Configura el comportamiento de reacciones globalmente o por cuenta: • actions.reactions — Habilitar/deshabilitar la capacidad de reacción (por defecto true) • reactionLevel — off/ack (deshabilitado) o minimal/extensive (habilitado con orientación)
openclaw.json
{
  "channels": {
    "signal": {
      "reactionLevel": "minimal"
    }
  }
}

Medios y adjuntos

OpenClaw maneja archivos multimedia en Signal incluyendo imágenes, documentos, audio y video. Los medios se transfieren a través de signal-cli como datos codificados en base64. Los medios entrantes se descargan y procesan automáticamente a menos que ignoreAttachments esté establecido en true. Los medios salientes se obtienen en base64 desde signal-cli antes de ser enviados. El límite de tamaño de archivo por defecto es 8 MB (mediaMaxMb). Signal soporta archivos más grandes, pero la sobrecarga de codificación base64 y el tiempo de procesamiento hacen que 8 MB sea un valor predeterminado práctico.
openclaw.json
{
  "channels": {
    "signal": {
      "mediaMaxMb": 8,
      "ignoreAttachments": false
    }
  }
}

Indicadores de escritura y confirmaciones de lectura

OpenClaw envía indicadores de escritura mientras genera respuestas de IA para mantener una sensación de conversación natural. El Gateway llama al endpoint sendTyping de signal-cli y actualiza el indicador periódicamente durante la generación de respuestas. Las confirmaciones de lectura pueden ser reenviadas para contactos de DM aprobados cuando sendReadReceipts está habilitado. Esto permite a los remitentes saber que su mensaje ha sido procesado. Nota: Las confirmaciones de lectura de grupo no son soportadas por signal-cli.
openclaw.json
{
  "channels": {
    "signal": {
      "sendReadReceipts": true
    }
  }
}

Fragmentación y entrega de texto

Para respuestas largas de IA, OpenClaw divide automáticamente el texto en múltiples mensajes. El tamaño de fragmento por defecto es de 4.000 caracteres por mensaje. Hay dos modos de fragmentación disponibles: • length (por defecto) — División estricta en el límite de caracteres • newline — División en límites de párrafo primero, luego aplica el límite de caracteres Los destinos de entrega usan números de teléfono E.164, UUID o ID de grupo: • DMs: signal:+15551234567 o número E.164 simple • DMs con UUID: uuid:<id> o UUID simple • Grupos: signal:group:<groupId>
openclaw.json
{
  "channels": {
    "signal": {
      "textChunkLimit": 4000,
      "chunkMode": "newline"
    }
  }
}

Signal Referencia de Configuración

enabled
Type: booleanDefault: true

Habilitar o deshabilitar el canal Signal

account
Type: stringDefault: ""

Número de teléfono del bot en formato E.164 (ej., +15551234567). Requerido

cliPath
Type: stringDefault: "signal-cli"

Ruta al ejecutable de signal-cli

httpUrl
Type: stringDefault: ""

URL completa de un daemon externo de signal-cli. Cuando se establece, deshabilita el inicio automático

httpHost
Type: stringDefault: "127.0.0.1"

Dirección de host a la que se vincula el daemon auto-iniciado de signal-cli

httpPort
Type: numberDefault: 8080

Puerto al que se vincula el daemon auto-iniciado de signal-cli

autoStart
Type: booleanDefault: true

Si se inicia automáticamente el daemon de signal-cli al arrancar el Gateway

startupTimeoutMs
Type: numberDefault: 30000

Tiempo máximo (ms) de espera para que el daemon de signal-cli esté disponible. Máximo 120000

dmPolicy
Type: stringDefault: "pairing"

Controla quién puede enviar DMs al bot. Opciones: pairing, allowlist, open, disabled

allowFrom
Type: string[]Default: []

Números de teléfono (E.164) o identificadores uuid:<id> autorizados para enviar mensajes al bot

dmHistoryLimit
Type: numberDefault: 50

Número de mensajes DM recientes a incluir como contexto de IA por conversación

groupPolicy
Type: stringDefault: "disabled"

Política de chat grupal. Opciones: disabled, allowlist, open

groupAllowFrom
Type: string[]Default: []

Números de teléfono o UUID autorizados para activar el bot en grupos (cuando groupPolicy es allowlist)

historyLimit
Type: numberDefault: 50

Máximo de mensajes de grupo incluidos como contexto de IA. Establecer en 0 para deshabilitar

sendReadReceipts
Type: booleanDefault: false

Si se reenvían señales de confirmación de lectura para contactos DM aprobados

textChunkLimit
Type: numberDefault: 4000

Máximo de caracteres por mensaje saliente antes de fragmentar

chunkMode
Type: stringDefault: "length"

Modo de fragmentación de texto. Opciones: length (división estricta), newline (consciente de párrafos)

mediaMaxMb
Type: numberDefault: 8

Tamaño máximo de archivo multimedia en megabytes para adjuntos entrantes/salientes

ignoreAttachments
Type: booleanDefault: false

Omitir la descarga de adjuntos multimedia entrantes

ignoreStories
Type: booleanDefault: false

Ignorar los eventos de historias de Signal completamente

receiveMode
Type: stringDefault: ""

Modo de recepción de mensajes. Opciones: on-start (obtener al iniciar), manual

configWrites
Type: booleanDefault: true

Permitir que los comandos /config modifiquen la configuración del canal en tiempo de ejecución

reactionLevel
Type: stringDefault: "ack"

Capacidad de reacción del bot. Opciones: off, ack, minimal, extensive

Signal Preguntas Frecuentes

Signal Solución de Problemas

signal-cli no inicia con errores de Java

Java no está instalado, o la versión instalada es demasiado antigua. signal-cli requiere Java 25 o posterior.

Instala OpenJDK 25+ en tu servidor. Verifica con 'java --version'. Si hay múltiples versiones de Java instaladas, asegúrate de que la correcta esté en tu PATH o establece JAVA_HOME. También verifica que signal-cli esté instalado correctamente ejecutando 'signal-cli --version'.
El bot no responde a ningún mensaje

El campo account puede ser incorrecto, el daemon de signal-cli puede no estar ejecutándose, o el remitente no ha sido aprobado mediante emparejamiento.

Verifica que el número de cuenta coincida con la cuenta registrada de signal-cli (formato E.164 con código de país). Ejecuta 'openclaw status' y 'openclaw gateway status' para verificar que el daemon está ejecutándose. Si usas la política pairing, verifica los emparejamientos pendientes con 'openclaw pairing list signal' y aprueba al remitente.
Los DMs son ignorados incluso después de la aprobación

El remitente puede no estar en la lista allowFrom (al usar la política allowlist), o el formato del identificador del remitente puede no coincidir.

Revisa los logs del Gateway para ver el identificador del remitente. Algunos usuarios de Signal se registran sin compartir su número de teléfono — aparecerán como 'uuid:<id>' en lugar de un número de teléfono. Agrega el identificador correcto a allowFrom. Ejecuta 'openclaw channels status --probe' para diagnósticos detallados del canal.
No se reciben mensajes de grupo

groupPolicy está establecido en 'disabled' (por defecto), o el grupo no está en la lista de permitidos.

Establece groupPolicy en 'open' para aceptar todos los mensajes de grupo, o usa 'allowlist' y agrega el ID del grupo a groupAllowFrom. Revisa los logs del Gateway para ver el ID del grupo cuando se recibe un mensaje de grupo.
Falla la conexión con el daemon externo (httpUrl no accesible)

El daemon de signal-cli no está ejecutándose, la URL es incorrecta, o un firewall está bloqueando la conexión.

Verifica que el daemon esté ejecutándose y escuchando en el host:puerto esperado. Prueba la conectividad con 'curl http://127.0.0.1:8080/api/v1/rpc'. Revisa las reglas del firewall si estás ejecutando entre máquinas. Asegúrate de que el daemon fue iniciado con el flag --http correcto que coincida con tu configuración de httpUrl.