Skip to main content

Signal messaging integration plugin for elizaOS agents

Project description

@elizaos/plugin-signal

Signal messaging integration plugin for elizaOS agents with end-to-end encryption support.

Features

  • Secure Messaging: End-to-end encrypted communication via Signal protocol
  • Direct Messages: Send and receive direct messages with contacts
  • Group Chats: Participate in Signal group conversations
  • Reactions: Add emoji reactions to messages
  • Contacts: List and manage Signal contacts
  • Groups: List and interact with Signal groups
  • Typing Indicators: Send typing status notifications

Installation

npm install @elizaos/plugin-signal
# or
bun add @elizaos/plugin-signal

Prerequisites

This plugin requires a running Signal CLI REST API server or direct access to signal-cli.

Option 1: Signal CLI REST API (Recommended)

Run the Signal CLI REST API server using Docker:

docker run -d --name signal-api -p 8080:8080 \
  -v signal-cli-config:/home/.local/share/signal-cli \
  bbernhard/signal-cli-rest-api

Then register or link your Signal account:

# Register a new number
curl -X POST "http://localhost:8080/v1/register/+1234567890"

# Or link to existing Signal account
curl -X GET "http://localhost:8080/v1/qrcodelink?device_name=elizaOS"

Option 2: Signal CLI Direct

Install signal-cli:

# macOS
brew install signal-cli

# Linux
wget https://github.com/AsamK/signal-cli/releases/latest/download/signal-cli-X.X.X.tar.gz
tar xf signal-cli-*.tar.gz -C /opt

Register your phone number with Signal.

Configuration

Required Environment Variables

# Your Signal phone number in E.164 format
SIGNAL_ACCOUNT_NUMBER=+1234567890

Optional Environment Variables

# Signal CLI REST API URL (if using HTTP API)
SIGNAL_HTTP_URL=http://localhost:8080

# Path to signal-cli executable (if using CLI directly)
SIGNAL_CLI_PATH=/usr/local/bin/signal-cli

# Ignore group messages (only respond to DMs)
SIGNAL_SHOULD_IGNORE_GROUP_MESSAGES=false

Usage

Add to your agent configuration

import signalPlugin from "@elizaos/plugin-signal";

const agent = {
  // ... other configuration
  plugins: [signalPlugin],
};

Character file configuration

{
  "name": "MyAgent",
  "clients": ["signal"],
  "settings": {
    "signal": {
      "shouldIgnoreGroupMessages": false
    }
  }
}

Actions

Action Description
SIGNAL_SEND_MESSAGE Send a message to a contact or group
SIGNAL_SEND_REACTION React to a message with an emoji
SIGNAL_LIST_CONTACTS List Signal contacts
SIGNAL_LIST_GROUPS List Signal groups

Providers

Provider Description
signalConversationState Current conversation context and metadata

Events

The plugin emits the following events:

  • SIGNAL_MESSAGE_RECEIVED - When a message is received
  • SIGNAL_MESSAGE_SENT - When a message is sent
  • SIGNAL_REACTION_RECEIVED - When a reaction is received
  • SIGNAL_GROUP_JOINED - When joining a group
  • SIGNAL_GROUP_LEFT - When leaving a group

API Reference

SignalService

The main service class providing direct access to Signal functionality:

import { SignalService, SIGNAL_SERVICE_NAME } from "@elizaos/plugin-signal";

// Get service from runtime
const signalService = runtime.getService(SIGNAL_SERVICE_NAME) as SignalService;

// Send a message
await signalService.sendMessage("+1234567890", "Hello!");

// Send a group message
await signalService.sendGroupMessage(groupId, "Hello everyone!");

// Add a reaction
await signalService.sendReaction(
  "+1234567890",
  "👍",
  messageTimestamp,
  authorNumber
);

// Get contacts
const contacts = await signalService.getContacts();

// Get groups
const groups = await signalService.getGroups();

Security Considerations

  • Signal provides end-to-end encryption for all messages
  • Your Signal account credentials are stored locally
  • The HTTP API should only be accessible from trusted networks
  • Consider using HTTPS and authentication for production deployments

Troubleshooting

Bot not receiving messages

  1. Verify Signal CLI REST API is running and accessible
  2. Check that your account number is correctly formatted (E.164)
  3. Ensure the account is properly registered/linked with Signal

Messages not sending

  1. Verify the recipient number is in E.164 format
  2. Check that you have an active internet connection
  3. Ensure Signal servers are reachable

Registration issues

  1. Use a phone number that can receive SMS
  2. Wait for the verification code
  3. Complete the verification process before starting the bot

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

elizaos_plugin_signal-2.0.0a5.tar.gz (22.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

elizaos_plugin_signal-2.0.0a5-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

Details for the file elizaos_plugin_signal-2.0.0a5.tar.gz.

File metadata

  • Download URL: elizaos_plugin_signal-2.0.0a5.tar.gz
  • Upload date:
  • Size: 22.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for elizaos_plugin_signal-2.0.0a5.tar.gz
Algorithm Hash digest
SHA256 cd1bb28ac4680f3c20c3cf4811639d7637f04d6d858e16c0b0ba94cd3aa88ab5
MD5 5d24c1d43096e61cf54b2ca3ee6e390f
BLAKE2b-256 0b9bbafd9bcdc77865f09eb75971be6280e97e6a910b3362cb7dd7c02049dc02

See more details on using hashes here.

File details

Details for the file elizaos_plugin_signal-2.0.0a5-py3-none-any.whl.

File metadata

File hashes

Hashes for elizaos_plugin_signal-2.0.0a5-py3-none-any.whl
Algorithm Hash digest
SHA256 4ed188e275c34d3bcf38b7ff8bff719e1a360a7517fd7a5d13781c2c716fb801
MD5 b7a263bead5f0bd5aa8a20bd45be68d0
BLAKE2b-256 a756ca644f5fad27007af4161c23436b09db5c5f63a25d5566ad3c45bb82622e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page