Skip to main content
A Signal messenger bot for Vaquill, built on the unofficial signal-cli-rest-api and the signalbot Python framework. Two Docker containers - signal-cli (handles the Signal protocol) and signal-bot (Python app calling Vaquill) - communicate over a local WebSocket. Source code at github.com/Vaquill-AI/integrations/signal-bot.
Signal does not offer an official bot API. This integration uses the unofficial signal-cli project. Account ban risk exists if Signal’s anti-abuse systems detect bot-like behavior. Keep volume low, use a dedicated phone number, and pin Docker image versions in production.

Features

  • Plain-text Q&A via the Vaquill /ask API
  • Per-chat conversation history
  • Slash-like commands: help, examples, stats, clear
  • Runs entirely inside a local Docker network - no public URL required

Prerequisites

  • Docker and Docker Compose
  • A phone number you control for Signal registration (or an existing Signal account you can link as a secondary device)
  • Vaquill API key (vq_key_...). See Authentication.

Platform setup

You need to either register a fresh phone number with Signal, or link the bot as a secondary device on an existing Signal account.

Option A: Register a fresh number (primary device)

1

Start signal-cli

2

Request a verification code

3

Submit the SMS code

This keeps your existing Signal phone active and avoids re-registering a number:
Open the returned URL (or scan the QR), then in your Signal mobile app go to Settings > Linked Devices > Add a new device and scan it.
The registration is tied to the signal-cli Docker volume. Back it up - losing the volume means re-registering and a new Signal safety number.

Quickstart

1

Clone

2

Configure

Set at minimum:
3

Run

Or, if signal-cli is already up:
4

Verify

Send yourself a test message:
Then DM the bot’s number from another Signal account and ask:

Configuration

See .env.example for the full list.

Commands

Any other text is treated as a legal question and routed to Vaquill.

Deployment

Deploy both services on the same Docker network. The signal-cli service needs a persistent volume mounted at /home/.local/share/signal-cli to retain the registration.

Dokploy / self-hosted

Deploy as two separate applications in the same project:
  1. signal-cli: Docker image bbernhard/signal-cli-rest-api, env MODE=json-rpc, persistent volume on /home/.local/share/signal-cli.
  2. signal-bot: Build from the Dockerfile in signal-bot/, env vars from .env.

Risks to plan for

  • No official Signal bot API - this is an unofficial integration.
  • Account ban risk if Signal detects automated behavior. Keep volume low and ideally use a dedicated number.
  • Protocol breakage - signal-cli updates can break on Signal protocol changes. Pin image versions (bbernhard/signal-cli-rest-api:0.92) in production rather than latest.
  • Volume backups - the phone-number registration is tied to the persistent volume. Back it up regularly.

Troubleshooting

WhatsApp

The official Business API path.

Telegram

Lightest setup, no Docker required.

Chatbots overview

Compare all six platforms.

Authentication

How Vaquill API keys work.