signal-bot/readme.md

214 lines
5.9 KiB
Markdown
Raw Permalink Normal View History

2024-06-24 12:19:18 +02:00
# Signal CLI REST API Integration Guide
2024-06-23 23:47:46 +02:00
2024-06-24 12:19:18 +02:00
This guide will help you set up and run a Signal bot using the Signal CLI REST API. For more details, refer to the [signal cli rest api examples](https://bbernhard.github.io/signal-cli-rest-api/).
2024-06-23 23:47:46 +02:00
## Quick Start (Recommended)
The easiest way to get started is using the deployment script:
```sh
git clone https://github.com/kuhyx/signal-bot
cd signal-bot
cp .env.sample .env
# Edit .env with your configuration
./run.sh
```
The `run.sh` script will:
- Create a Python virtual environment if needed
- Install all dependencies
- Load environment variables from `.env`
- Show configuration status and any missing settings
- Start the server with live reload enabled
## Features
- **Live Reload**: Changes to Python files automatically restart the server
- **Debug Mode**: Test the bot locally using "note to self" messages
- **Automatic Deployment**: GitHub Actions workflow deploys to your server on push to main
- **Unit Tests**: Comprehensive test suite for bot functionality
## Debug Mode
Set `MODE=DBG` in your `.env` file to enable debug mode. In this mode:
- Commands are received from your own "note to self" conversation
- Responses are sent back to yourself instead of to a group
- Perfect for testing without affecting real groups
Set `MODE=PRD` for production mode to process group messages normally.
## Configuration
Create a `.env` file (or copy from `.env.sample`) with the following:
```sh
# Your Signal phone number (linked via QR code)
PHONE_NUMBER="+1234567890"
# Group ID where bot receives messages (not needed in debug mode)
GROUP_ID="your-group-id"
# Group ID where bot sends responses (not needed in debug mode)
GROUP_ID_SEND="your-group-id"
# Optional: The Cat API key
CAT_API=""
# DBG for debug mode, PRD for production
MODE=DBG
```
## Automatic Deployment
The repository includes a GitHub Actions workflow (`.github/workflows/deploy.yml`) that automatically deploys to your server when you push to the `main` branch.
### Setting Up Automatic Deployment
Add the following secrets to your GitHub repository (Settings → Secrets and variables → Actions):
- `DEPLOY_HOST`: Your server's hostname or IP
- `DEPLOY_USER`: SSH username
- `DEPLOY_SSH_KEY`: Private SSH key for authentication
- `DEPLOY_PORT`: SSH port (optional, defaults to 22)
- `DEPLOY_PATH`: Path to the bot on your server (optional, defaults to `~/signal-bot`)
## Running Tests
```sh
./run.sh # This will set up the environment
source venv/bin/activate
pytest tests/ -v
```
2024-06-24 12:19:18 +02:00
## Message Formats
### Message Sent from the Same Account as the Bot
```json
2024-06-23 23:47:46 +02:00
{
"envelope": {
"source": "NAME",
"sourceNumber": "PHONE_NUMBER",
"sourceUuid": "SOURCE_ID",
"sourceName": "USER_DEFINED_NAME",
"sourceDevice": 69,
"timestamp": 1719177728639,
"syncMessage": {
"sentMessage": {
"destination": "DEST_NAME",
"destinationNumber": "DEST_PHONE_NUMBER",
"destinationUuid": "DEST_SEND_MESSAGE",
"timestamp": 1719177728639,
"message": "MESSAGE_CONTENT",
"expiresInSeconds": 0,
2024-10-05 10:53:23 +02:00
"viewOnce": false,
"sticker": {
"packId": "166dd1b5b060200035a533bbb0d118ff",
"stickerId": 6
}
2024-06-23 23:47:46 +02:00
}
}
},
"account": "BOT_ACCOUNT_PHONE_NUMBER"
}
2024-06-24 12:19:18 +02:00
```
2024-06-23 23:47:46 +02:00
2024-06-24 12:19:18 +02:00
### Message Sent from Another Account
```json
2024-06-23 23:47:46 +02:00
{
"envelope": {
"source": "NAME",
"sourceNumber": "PHONE_NUMBER",
"sourceUuid": "SOURCE_ID",
"sourceName": "USER_DEFINED_NAME",
"sourceDevice": 69,
"timestamp": 1719177917717,
"dataMessage": {
"timestamp": 1719177917717,
"message": "MESSAGE_CONTENT",
"expiresInSeconds": 0,
"viewOnce": false,
"sticker": {
"packId": "166dd1b5b060200035a533bbb0d118ff",
"stickerId": 6
2024-10-05 10:53:23 +02:00
},
2024-06-23 23:47:46 +02:00
"groupInfo": {
"groupId": "ID_OF_GROUP_SEND_TO",
"type": "DELIVER"
}
}
},
"account": "BOT_ACCOUNT_PHONE_NUMBER"
2024-06-24 12:19:18 +02:00
}
```
## Setting Up Signal CLI REST API
2024-06-24 12:19:18 +02:00
1. Follow the instructions on the [Signal CLI REST API GitHub page](https://github.com/bbernhard/signal-cli-rest-api#getting-started).
The main steps are summarized below:
```sh
sudo docker run -d --name signal-api --restart=always -p 9922:8080 \
-v /home/user/signal-api:/home/.local/share/signal-cli \
-e 'MODE=json-rpc' bbernhard/signal-cli-rest-api:0.167-dev
2024-06-24 12:19:18 +02:00
```
Pay attention to `:0.167-dev`! Try to upgrade if there is a new one as you can see errors connected with connecting your signal account otherwise.
2024-09-24 22:38:10 +02:00
Double check if you are using correct version using: [http://localhost:9922/v1/about](http://localhost:9922/v1/about)
2. Access the Signal CLI setup page:
2024-06-24 12:19:18 +02:00
```sh
http://localhost:9922/v1/qrcodelink?device_name=signal-api
```
3. Scan the QR code to complete the Signal CLI setup.
## Manual Setup (Alternative)
If you prefer to set up manually instead of using `run.sh`:
2024-06-24 12:19:18 +02:00
### Clone the Repository
```sh
git clone https://github.com/kuhyx/signal-bot
```
### Initialize the Python Virtual Environment
```sh
python -m venv venv
source venv/bin/activate
2024-06-24 12:19:18 +02:00
```
### Add Environment Variables
2024-06-24 12:19:18 +02:00
Create a `.env` file or add to `venv/bin/activate`:
2024-06-24 12:19:18 +02:00
```sh
export PHONE_NUMBER="+69YOURPHONENUMBER"
export CAT_API="CAN_LEAVE_BLANK"
export GROUP_ID="MESSAGES_SEND_HERE_WILL_TRIGGER_COMMANDS"
export GROUP_ID_SEND="TRIGGERED_COMMANDS_WILL_SEND_DATA_HERE"
export MODE="DBG" # or PRD for production
2024-06-24 12:19:18 +02:00
```
2024-06-24 12:19:18 +02:00
### Install Required Python Packages
```sh
pip install -r requirements.txt
```
### Run the Server
```sh
# With live reload (recommended for development)
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# Or simply
./run.sh
2024-06-24 12:19:18 +02:00
```
Now your Signal bot should be up and running, ready to send and receive messages via the Signal CLI REST API.