Skip to content

Commit

Permalink
Merge pull request #179 from akloeckner/fix/HA-doc
Browse files Browse the repository at this point in the history
Improve HOMEASSISTANT.md
  • Loading branch information
Bernhard B authored Nov 10, 2021
2 parents f8f601a + e3bd6e1 commit 7b9c5a3
Showing 1 changed file with 110 additions and 33 deletions.
143 changes: 110 additions & 33 deletions doc/HOMEASSISTANT.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,33 @@

This document describes how to use the Signal Messenger REST API together with Home Assistant.

prerequisites:
This document covers the following topics:
* [Installation](#installation)
* [Set up a phone number](#set-up-a-phone-number)
* [Sending messages to Signal Messenger groups](#sending-messages-to-signal-messenger-groups)

* docker + docker-compose
See also the [documentation of the Home Assistant integration](https://www.home-assistant.io/integrations/signal_messenger/).

-or-
## Installation

* ability to install Home Assistant add-ons
### Prerequisites:

* a phone number to send signal notifications
* infrastructure to run this container on:
* alternative 1: Docker (+ Docker Compose for ease of configuration)
* alternative 2: ability to install Home Assistant add-ons
* a phone number to send signal notifications from

## Set up the docker container
### Alternative 1: Set up the Docker container

* Create a `docker-compose.yml` file with the following contents:

```sh
```yaml
version: "3"
services:
signal-cli-rest-api:
image: bbernhard/signal-cli-rest-api:latest
environment:
- MODE=json-rpc #supported modes: json-rpc, native, normal. json-prc is recommended for speed
ports:
- "8080:8080" # map docker port 8080 to host port 8080.
volumes:
Expand All @@ -29,74 +37,143 @@ services:
* start the docker container with `docker-compose up`

## Or Install Home Assistant Add-on
### Alternative 2: Install Home Assistant Add-on

Add this repository to your Home Assistant Add-on Store reposity list:
Add this repository to your Home Assistant Add-on Store repository list:

[https://github.com/haberda/hassio_addons](https://github.com/haberda/hassio_addons)

Then install and start the add-on.

## Register phone number
## Set up a phone number
You will need to set up the phone number(s) to send notifications from using `REST` request. (You can set up multiple numbers.) In order to do so, make sure, you have `curl` installed on your system. You can then issue the commands shown below from the command line. We use the example server `127.0.0.1` on port `8080`. If you have set up a different server, you will have to change this in the commands.

For trouble shooting of common problems during setup, see below.

### Alternatives

* You can use a new phone number. This is recommended, as it enables full feature support. Land-line numbers are supported.
* You can link `signal-cli-rest-api` as a secondary device to an existing account on your mobile phone.

### Alternative 1: Register a new phone number
1. In order to send signal messages to other users, you first need to register your phone number. This can be done via REST requests with:

**Note**: If you want to register a land-line number, set the `use_voice` parameter to `true`. Signal will then call you on your number and speak the token to you instead of sending an SMS.

```sh
curl -X POST -H "Content-Type: application/json" --data '{"use_voice": false}' 'http://<ip>:<port>/v1/register/<number>'
```

**Example**: The following command registers the number `+431212131491291` to the Signal network.

```sh
curl -X POST -H "Content-Type: application/json" --data '{"use_voice": false}' 'http://127.0.0.1:8080/v1/register/+431212131491291'
```

2. After you've sent the registration request, you will receive a token via SMS (or it will be spoken to you) for verfication.

3. In order to complete the registration process, you need to send the verification token back via the following REST request:

In order to send signal messages to other users, you first need to register your phone number. This can be done via REST requests with:
```sh
curl -X POST -H "Content-Type: application/json" 'http://<ip>:<port>/v1/register/<number>/verify/<verification code>'
```

`curl -X POST -H "Content-Type: application/json" 'http://<ip>:<port>/v1/register/<number>'`
**Example**: The following will send a verification code for the previous example number.

e.g:
```sh
curl -X POST -H "Content-Type: application/json" 'http://127.0.0.1:8080/v1/register/+431212131491291/verify/123-456'
```

This registers the number `+431212131491291` to the Signal network.
### Alternative 2: Use your existing mobile phone number
It is recommended to use a fresh number. Some things might not work as expected, if you only link the REST API to an existing number. For example, if you send a notification to a group including yourself, you will not be notified. This is, because the notification is sent by yourself. Therefore, consider registering your land-line number for connecting your home to Signal.

`curl -X POST -H "Content-Type: application/json" 'http://127.0.0.1:8080/v1/register/+431212131491291'`
1. To link the REST API as a new device to an existing account on your mobile phone, send the following command:

After you've sent the registration request, you will receive a token via SMS for verfication. In order to complete the registration process you need to send the verification token back via the following REST request:
```sh
curl -X GET -H "Content-Type: application/json" 'http://127.0.0.1:8080/v1/qrcodelink?device_name=<device name>'
```

`curl -X POST -H "Content-Type: application/json" 'http://<ip>:<port>/v1/register/<number>/verify/<verification code>'`
**Example**:

e.g:
```sh
curl -X GET -H "Content-Type: application/json" 'http://127.0.0.1:8080/v1/qrcodelink?device_name=HomeAssistant'
```

`curl -X POST -H "Content-Type: application/json" 'http://127.0.0.1:8080/v1/register/+431212131491291/verify/123-456'`
2. This provides a QR-Code image. In case of an error a JSON object will be returned.

If you are trying to verify a number that has PIN assigned to it you will get an error message saying: "Verification failed! This number is locked with a pin". You can provide the PIN using "--data '{"pin": "your registration lock pin"}'" to the curl verification call:
Due to security reason of Signal, the provided QR-Code will change with each request.

3. Scan the QR-Code with your main Signal app.

`curl -X POST -H "Content-Type: application/json" --data '{"pin": "your registration lock pin"}' 'http://127.0.0.1:8080/v1/register/+431212131491291/verify/123-456'`
4. The REST API will be linked to your main account. You can use it then to send message on your own personal behalf.

### Trouble shooting: Number is locked with a PIN
If you are trying to verify a number that has a PIN assigned to it, you will get an error message saying: "Verification failed! This number is locked with a pin". You can provide the PIN using "--data '{"pin": "your registration lock pin"}'" to the `curl` verification call:

When you try to register a number, if you receive a response like `{"error":"Captcha required for verification (null)\n"}` then Signal is requiring a captcha. To register the number you must do the following (in Mozilla Firefox):
```sh
curl -X POST -H "Content-Type: application/json" --data '{"pin": "your registration lock pin"}' 'http://127.0.0.1:8080/v1/register/+431212131491291/verify/123-456'
```

### Trouble shooting: A captcha is required
If, in step 1 above, you receive a response like `{"error":"Captcha required for verification (null)\n"}` then Signal is requiring a captcha. To register the number you must do the following (in Mozilla Firefox):
1. Go to [https://signalcaptchas.org/registration/generate.html](https://signalcaptchas.org/registration/generate.html)
2. Open the developer console
3. Answer the captcha
3. On the developer console, find the line that looks like this: `Prevented navigation to “signalcaptcha://{captcha value}” due to an unknown protocol.` Copy the captcha value
4. Use it to make the registration call like this:

`curl -X POST -H "Content-Type: application/json" -d '{"captcha":"captcha value"}' 'http://127.0.0.1:8080/v1/register/<number>`
```sh
curl -X POST -H "Content-Type: application/json" -d '{"captcha":"captcha value", "use_voice": false}' 'http://127.0.0.1:8080/v1/register/<number>'
```

## Sending messages to Signal Messenger groups

The `signal-cli-rest-api` docker container is also capable of sending messages to a Signal Messenger group.

Requirements:
For trouble shooting of common problems during setup, see below.

### Requirements

* Home Assistant Version >= 0.110
* signal-cli-rest-api build-nr >= 2
* `signal-cli-rest-api` build-nr >= 2
The build number can be checked with: `curl -X GET -H "Content-Type: application/json" 'http://127.0.0.1:8080/v1/about'`
* your phone number needs to be properly registered (see the "Register phone number" section above on how to do that)

A new Signal Messenger group can be created with the following REST API request:
### Create a new group

1. A new Signal Messenger group can be created with the following REST API request:

```sh
curl -X POST -H "Content-Type: application/json" -d '{"name": "<name of the group>", "members": ["<member1>", "<member2>"]}' 'http://127.0.0.1:8080/v1/groups/<number>'
```

**Example**: The following creates a new Signal Messenger group called `my group` with the members `+4354546464654` and `+4912812812121`.

```sh
curl -X POST -H "Content-Type: application/json" -d '{"name": "my group", "members": ["+4354546464654", "+4912812812121"]}' 'http://127.0.0.1:8080/v1/groups/+431212131491291'
```

2. Next, use the following endpoint to obtain the `group_id`:

```curl -X POST -H "Content-Type: application/json" -d '{"name": "<name of the group>", "members": ["<member1>", "<member2>"]}' 'http://127.0.0.1:8080/v1/groups/<number>'```
```sh
curl -X GET -H "Content-Type: application/json" 'http://127.0.0.1:8080/v1/groups/<number>'
```

e.g:
3. The `group_id` then needs to be added to the Signal Messenger's `recipients` list in the `configuration.yaml`. (see [here](https://www.home-assistant.io/integrations/signal_messenger/) for details)

This creates a new Signal Messenger group called `my group` with the members `+4354546464654` and `+4912812812121`.
### Trouble shooting: If you receive an empty group list

```curl -X POST -H "Content-Type: application/json" -d '{"name": "my group", "members": ["+4354546464654", "+4912812812121"]}' 'http://127.0.0.1:8080/v1/groups/+431212131491291'```
In order for groups to show up in the `groups` list, try the following steps:

Next, use the following endpoint to obtain the group id:
* Use the JSON-RPC mode. This might already solve your issue.
* You might need to first `receive` data from the Signal servers. (See https://github.com/AsamK/signal-cli/issues/82.)

```curl -X GET -H "Content-Type: application/json" 'http://127.0.0.1:8080/v1/groups/<number>'```
To do so, use the following REST request:

```sh
curl -X GET -H "Content-Type: application/json" 'http://127.0.0.1:8080/v1/receive/<number>'
```

The group id then needs to be added to the Signal Messenger's `recipients` list in the `configuration.yaml`. (see [here](https://www.home-assistant.io/integrations/signal_messenger/) for details)

## API details

Expand Down

0 comments on commit 7b9c5a3

Please sign in to comment.