Skip to content
This page was generated and translated with the assistance of AI. If you spot any inaccuracies, feel free to help improve it. Edit on GitHub

Signal

Connect PRX to Signal using the signal-cli daemon's JSON-RPC and SSE API for encrypted messaging in DMs and groups.

Prerequisites

  • A phone number registered with Signal
  • signal-cli installed and registered
  • signal-cli running in daemon mode with HTTP API enabled

Quick Setup

1. Install and Register signal-cli

bash
# Install signal-cli (see https://github.com/AsamK/signal-cli for latest)
# Register your phone number
signal-cli -u +1234567890 register
signal-cli -u +1234567890 verify <verification-code>

2. Start the signal-cli Daemon

bash
signal-cli -u +1234567890 daemon --http localhost:8686

3. Configure

toml
[channels_config.signal]
http_url = "http://127.0.0.1:8686"
account = "+1234567890"
allowed_from = ["+1987654321", "*"]

4. Verify

bash
prx channel doctor signal

Configuration Reference

FieldTypeDefaultDescription
http_urlStringrequiredBase URL for the signal-cli HTTP daemon (e.g., "http://127.0.0.1:8686")
accountStringrequiredE.164 phone number of the signal-cli account (e.g., "+1234567890")
group_idStringnullFilter messages by group. null = accept all (DMs and groups). "dm" = only accept DMs. Specific group ID = only that group
allowed_from[String][]Allowed sender phone numbers in E.164 format. "*" = allow all
ignore_attachmentsboolfalseSkip messages that are attachment-only (no text body)
ignore_storiesboolfalseSkip incoming story messages

Features

  • End-to-end encryption -- all messages are encrypted via the Signal Protocol
  • DM and group support -- handle both direct messages and group conversations
  • SSE event stream -- listens via Server-Sent Events at /api/v1/events for real-time delivery
  • JSON-RPC sending -- sends replies via JSON-RPC at /api/v1/rpc
  • Flexible group filtering -- accept all messages, DMs only, or a specific group
  • Attachment handling -- optionally process or skip attachment-only messages

Limitations

  • Requires signal-cli to be running as a separate daemon process
  • signal-cli must be registered and verified with a valid phone number
  • One signal-cli instance supports one phone number
  • Group message sending requires the signal-cli account to be a member of the group
  • signal-cli is a Java application with its own resource requirements

Troubleshooting

Cannot connect to signal-cli

  • Verify signal-cli daemon is running: curl http://127.0.0.1:8686/api/v1/about
  • Check the http_url matches the daemon's bind address and port
  • Ensure no firewall rules are blocking the connection

Messages from groups are ignored

  • Check the group_id filter -- if set to "dm", group messages are excluded
  • If set to a specific group ID, only messages from that group are accepted
  • Set group_id to null (or omit it) to accept all messages

Attachment-only messages are skipped

  • This is the expected behavior when ignore_attachments = true
  • Set ignore_attachments = false to process attachment-only messages

Released under the Apache-2.0 License.