@@ -32,9 +32,9 @@ Docker image to send and receive messages for the [Signal](https://signal.org/)
32
32
3. Send and receive messages :
33
33
` ` ` sh
34
34
$ mosquitto_sub -v -h broker -t 'signal/#' &
35
- signal/receive /%2B491713920000 Incoming message
36
- $ mosquitto_pub -v -h broker -t signal/send/%2B491713920000 -m 'Outgoing message'
37
- signal/send/%2B491713920000 Outgoing message
35
+ signal/in /%2B491713920000 Incoming message
36
+ $ mosquitto_pub -v -h broker -t signal/out/ send/recipient /%2B491713920000 -m 'Outgoing message'
37
+ signal/out/ send/recipient /%2B491713920000 Outgoing message
38
38
` ` `
39
39
40
40
# # Requirements
@@ -86,64 +86,81 @@ Characters with a special meaning in the context of MQTT, base64 and percent-enc
86
86
87
87
88
88
# ### Send a text message
89
- * Topic: `<TOPIC_PREFIX>/<MQTT_SUBSCRIBE_TOPIC>/<PHONE_NUMBER>`
89
+ * Topic: `<TOPIC_PREFIX>/<MQTT_SUBSCRIBE_TOPIC>/send/recipient/ <PHONE_NUMBER>`
90
90
* Example:
91
91
` ` ` sh
92
- $ mosquitto_pub -h broker -t signal/send/%2B491713920000 -m 'Outgoing message'
92
+ $ mosquitto_pub -h broker -t signal/out/ send/recipient /%2B491713920000 -m 'Outgoing message'
93
93
` ` `
94
94
The text _Outgoing message_ is sent to the phone.
95
95
96
+ # ### Send a text message to a group
97
+ * Topic: `<TOPIC_PREFIX>/<MQTT_SUBSCRIBE_TOPIC>/send/groupId/<GROUP_ID>`
98
+ * Example:
99
+ ` ` ` sh
100
+ $ mosquitto_pub -h broker -t signal/out/send/groupId/LS0%2BYWRtaW5zPz8%2FCg%3D%3D -m 'Outgoing message'
101
+ ` ` `
102
+ The text _Outgoing message_ is sent to the group _Admins_.
103
+
104
+ # ### Send a JSON-RPC command
105
+ * Topic: `<TOPIC_PREFIX>/<MQTT_SUBSCRIBE_TOPIC>/<METHOD>[/PARAM_NAME/PARAM_VALUE]...`
106
+ * Example:
107
+ ` ` ` sh
108
+ $ mosquitto_pub -h broker -t signal/out/send/recipient/%2B491713920000 -m 'Outgoing message'
109
+ ` ` `
110
+ The text _Outgoing message_ is sent to the phone.
111
+ * Example:
112
+ ` ` ` sh
113
+ $ mosquitto_pub -h broker -t signal/out/send/recipient/%2B491713920000/quoteAuthor/%2B491713920000/quoteTimestamp/1577882096000 -m 'Outgoing message'
114
+ ` ` `
115
+ The text _Outgoing message_ is sent to the phone quoting a message sent from the phone at timestamp 1577882096000.
116
+
117
+ # ### Send a JSON-RPC message
118
+ * Topic: `<TOPIC_PREFIX>/<MQTT_SUBSCRIBE_TOPIC>`
119
+ * Example:
120
+ ` ` ` sh
121
+ $ mosquitto_pub -h broker -t signal/out -m '{"jsonrpc":"2.0","method":"send","params":{"recipient":["+491713920000"],"message":"Outgoing message"}}'
122
+ ` ` `
123
+ The text _Outgoing message_ is sent to the phone.
124
+
125
+
96
126
# ### Receive a text message
97
127
* Topic: `<TOPIC_PREFIX>/<MQTT_PUBLISH_TOPIC>/<PHONE_NUMBER>/timestamp/<TIMESTAMP>`
98
128
* Example:
99
129
The text _Incoming message_ is sent from the phone to `+493023125000`.
100
130
` ` ` sh
101
131
$ mosquitto_sub -v -h broker -t signal/#
102
- signal/receive /%2B491713920000/timestamp/1577882096000 Incoming message
132
+ signal/in /%2B491713920000/timestamp/1577882096000 Incoming message
103
133
` ` `
104
134
105
135
# ### Receive a text message without timestamp
106
- * Topic: `<TOPIC_PREFIX>/<MQTT_PUBLISH_TOPIC>/<PHONE_NUMBER>`
107
136
* Required configuration option: `MQTT_PUBLISH_PER_SOURCE_TIMESTAMP: "false"`
137
+ * Topic: `<TOPIC_PREFIX>/<MQTT_PUBLISH_TOPIC>/<PHONE_NUMBER>`
108
138
* Example:
109
139
The text _Incoming message_ is sent from the phone to `+493023125000`.
110
140
` ` ` sh
111
141
$ mosquitto_sub -v -h broker -t signal/#
112
- signal/receive /%2B491713920000 Incoming message
142
+ signal/in /%2B491713920000 Incoming message
113
143
` ` `
114
144
115
145
# ### Receive a message in JSON format
116
- * Topic: `<TOPIC_PREFIX>/<MQTT_PUBLISH_TOPIC>/<PHONE_NUMBER>`
117
146
* Required configuration option: `MQTT_PUBLISH_PER_SOURCE_AS_JSON: "true"`
147
+ * Topic: `<TOPIC_PREFIX>/<MQTT_PUBLISH_TOPIC>/<PHONE_NUMBER>`
118
148
* Note: To suppress publishing of the same message in text format, additionally set `MQTT_PUBLISH_PER_SOURCE_AS_TEXT: "false"`
119
149
* Example:
120
150
The text _Incoming message_ is sent from the phone to `+493023125000`.
121
151
` ` ` sh
122
152
$ mosquitto_sub -v -h broker -t signal/#
123
- signal/receive /%2B491713920000 {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882096000,"dataMessage":{"timestamp":1577882096000,"message":"Incoming message","expiresInSeconds":0,"viewOnce":false}},"account":"+493023125000","subscription":0}}
124
- signal/receive /%2B491713920000/timestamp/1577882096000 Incoming message
153
+ signal/in /%2B491713920000 {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882096000,"dataMessage":{"timestamp":1577882096000,"message":"Incoming message","expiresInSeconds":0,"viewOnce":false}},"account":"+493023125000","subscription":0}}
154
+ signal/in /%2B491713920000/timestamp/1577882096000 Incoming message
125
155
` ` `
126
156
127
- # ### Send a text message to a group
128
- * Topic: `<TOPIC_PREFIX>/<MQTT_SUBSCRIBE_TOPIC>/group/<GROUP_ID>`
129
- * Note: The group-id must be percent-encoded.
130
- A group-id (which is base64 encoded) may be converted to percent encoding by applying the following replacements :
131
- - ` +` (plus) becomes `%2B`
132
- - ` /` (slash) becomes `%2F`
133
- - ` =` (equals) becomes `%3D`
134
- * Example:
135
- ` ` ` sh
136
- $ mosquitto_pub -h broker -t signal/send/group/LS0%2BYWRtaW5zPz8%2FCg%3D%3D -m 'Outgoing message'
137
- ` ` `
138
- The text _Outgoing message_ is sent to the group _Admins_.
139
-
140
157
# ### Receive a text message from a group
141
158
* Topic: `<TOPIC_PREFIX>/<MQTT_PUBLISH_TOPIC>/<PHONE_NUMBER>/timestamp/<TIMESTAMP>/group/<GROUP_ID>`
142
159
* Example:
143
160
The text _Incoming message_ is sent from the phone to the group _Admins_.
144
161
` ` ` sh
145
162
$ mosquitto_sub -v -h broker -t signal/#
146
- signal/receive /%2B491713920000/timestamp/1577882096000/group/LS0%2BYWRtaW5zPz8%2FCg%3D%3D Incoming message
163
+ signal/in /%2B491713920000/timestamp/1577882096000/group/LS0%2BYWRtaW5zPz8%2FCg%3D%3D Incoming message
147
164
` ` `
148
165
149
166
# ### Receive a quotation message
@@ -152,7 +169,7 @@ Characters with a special meaning in the context of MQTT, base64 and percent-enc
152
169
The text _Incoming quote_ is sent from the phone as quotation to the message _Outgoing message_ from above.
153
170
` ` ` sh
154
171
$ mosquitto_sub -v -h broker -t signal/#
155
- signal/receive /%2B491713920000/timestamp/1577882100000/quote/1577882096000 Incoming quote
172
+ signal/in /%2B491713920000/timestamp/1577882100000/quote/1577882096000 Incoming quote
156
173
` ` `
157
174
* Note: the combination of group and quotation is possible within a single message.
158
175
@@ -162,17 +179,10 @@ Characters with a special meaning in the context of MQTT, base64 and percent-enc
162
179
The emoji 👍 is sent from the phone as reaction to the message _Outgoing message_ from above.
163
180
` ` ` sh
164
181
$ mosquitto_sub -v -h broker -t signal/#
165
- signal/receive /%2B491713920000/timestamp/1577882100000/reaction/1577882096000 👍
182
+ signal/in /%2B491713920000/timestamp/1577882100000/reaction/1577882096000 👍
166
183
` ` `
167
184
* Note: the combination of group and reaction is possible within a single message.
168
185
169
- # ### Send a JSON-RPC message
170
- * Topic: `<TOPIC_PREFIX>/<MQTT_SUBSCRIBE_TOPIC>`
171
- * Example:
172
- ` ` ` sh
173
- $ mosquitto_pub -h broker -t signal/send -m '{"jsonrpc":"2.0","method":"send","params":{"recipient":["+491713920000"],"message":"Outgoing message"}}'
174
- ` ` `
175
- The text _Outgoing message_ is sent to the phone.
176
186
177
187
# ### Receive JSON-RPC messages
178
188
* Topic: `<TOPIC_PREFIX>/<MQTT_PUBLISH_TOPIC>`
@@ -181,19 +191,19 @@ Characters with a special meaning in the context of MQTT, base64 and percent-enc
181
191
` ` ` sh
182
192
$ mosquitto_sub -v -h broker -t 'signal/#' &
183
193
# The user starts to type 'Incoming message' on the phone
184
- signal/receive {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882080000,"typingMessage":{"action":"STARTED","timestamp":1577882080000}},"account":"+493023125000","subscription":0}}
194
+ signal/in {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882080000,"typingMessage":{"action":"STARTED","timestamp":1577882080000}},"account":"+493023125000","subscription":0}}
185
195
# The text 'Incoming message' is completed
186
- signal/receive {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882090000,"typingMessage":{"action":"STOPPED","timestamp":1577882090000}},"account":"+493023125000","subscription":0}}
196
+ signal/in {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882090000,"typingMessage":{"action":"STOPPED","timestamp":1577882090000}},"account":"+493023125000","subscription":0}}
187
197
# The message is sent to +493023125000
188
- signal/receive {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882096000,"dataMessage":{"timestamp":1577882096000,"message":"Incoming message","expiresInSeconds":0,"viewOnce":false}},"account":"+493023125000","subscription":0}}
189
- signal/receive /%2B491713920000 Incoming message
198
+ signal/in {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882096000,"dataMessage":{"timestamp":1577882096000,"message":"Incoming message","expiresInSeconds":0,"viewOnce":false}},"account":"+493023125000","subscription":0}}
199
+ signal/in /%2B491713920000 Incoming message
190
200
191
- $ mosquitto_pub -h broker -t signal/send/%2B491713920000 -m 'Outgoing message'
192
- signal/send/%2B491713920000 Outgoing message
201
+ $ mosquitto_pub -h broker -t signal/out/ send/recipient /%2B491713920000 -m 'Outgoing message'
202
+ signal/out/ send/recipient /%2B491713920000 Outgoing message
193
203
# The message was delivered to mobile phone +491713920000
194
- signal/receive {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882097000,"receiptMessage":{"when":1577882097000,"isDelivery":true,"isRead":false,"isViewed":false,"timestamps":[1577882098000]}},"account":"+493023125000","subscription":0}}
204
+ signal/in {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882097000,"receiptMessage":{"when":1577882097000,"isDelivery":true,"isRead":false,"isViewed":false,"timestamps":[1577882098000]}},"account":"+493023125000","subscription":0}}
195
205
# The message was read on mobile phone +491713920000
196
- signal/receive {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882099000,"receiptMessage":{"when":1577882099000,"isDelivery":false,"isRead":true,"isViewed":false,"timestamps":[1577882098000]}},"account":"+493023125000","subscription":0}}
206
+ signal/in {"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+491713920000","sourceNumber":"+491713920000","sourceUuid":"3689ed97-01b2-4fa5-8ed8-18174ad5cf15","sourceName":"Sally Sender","sourceDevice":1,"timestamp":1577882099000,"receiptMessage":{"when":1577882099000,"isDelivery":false,"isRead":true,"isViewed":false,"timestamps":[1577882098000]}},"account":"+493023125000","subscription":0}}
197
207
` ` `
198
208
199
209
# ### Run a signal-cli command
@@ -216,14 +226,14 @@ The configuration is based on environment variables.
216
226
|--------|-----------|-----|-------|-------
217
227
|`MQTT_TOPIC_PREFIX`|Prefix for MQTT topics|[Topic names](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718106)|`signal`|`chats`
218
228
|`MQTT_PUBLISH_OPTIONS`|MQTT publish options|All options [supported by `mosquitto_pub`](https://mosquitto.org/man/mosquitto_pub-1.html) except `-t` and `-m`|_none_|`-h broker -id signal-publisher`
219
- |`MQTT_PUBLISH_TOPIC`|MQTT topic for publishing messages received from Signal|[Topic names](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718106)|`${MQTT_TOPIC_PREFIX}/receive `|`chats/from`
229
+ |`MQTT_PUBLISH_TOPIC`|MQTT topic for publishing messages received from Signal|[Topic names](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718106)|`${MQTT_TOPIC_PREFIX}/in `|`chats/from`
220
230
|`MQTT_PUBLISH_JSON_RESPONSE`|Publish all json-rpc responses from signal-cli?|`true` / `false`|`false`|`true`
221
231
|`MQTT_PUBLISH_PER_SOURCE`|Publish incoming messages to a separate MQTT topic per source number?|`true`/ `false`|`true`|`false`
222
232
|`MQTT_PUBLISH_PER_SOURCE_AS_JSON`|Publish incoming messages in JSON format?|`true` / `false`|`false`|`true`
223
233
|`MQTT_PUBLISH_PER_SOURCE_AS_TEXT`|Publish incoming messages as plain text? When enabled, metadata properties (e.g. timestamp, group) are added to the topic.|`true` / `false`|`true`|`false`
224
234
|`MQTT_PUBLISH_PER_SOURCE_TIMESTAMP`|Add timestamp to MQTT topic of incoming messages? This is useful to associate a quotation or reaction to its original message.|`true` / `false`|`true`|`false`
225
235
|`MQTT_SUBSCRIBE_OPTIONS`|MQTT subscribe options|All options [supported by `mosquitto_sub`](https://mosquitto.org/man/mosquitto_sub-1.html) except `-t` and formatting-related options like `-F` & `-N`|_none_|`-h broker -i signal-subscriber`
226
- |`MQTT_SUBSCRIBE_TOPIC`|MQTT topic to listen for messages that are sent to a Signal receiver|[Topic names](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718106)|`${MQTT_TOPIC_PREFIX}/send `|`chats/to`
236
+ |`MQTT_SUBSCRIBE_TOPIC`|MQTT topic to listen for messages that are sent to a Signal receiver|[Topic names](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718106)|`${MQTT_TOPIC_PREFIX}/out `|`chats/to`
227
237
|`MQTT_LOG`|Enable logging via MQTT?|`true` / `false`|`false`|`true`
228
238
|`MQTT_LOG_TOPIC`|MQTT topic to publish the log to|`${MQTT_TOPIC_PREFIX}/log`|`chats/logs`
229
239
|`SIGNAL_ACCOUNT`|Phone number of the signal account|International phone number format with leading `+`|Account from signal-cli configuration|`+493023125000`
@@ -238,7 +248,7 @@ This section contains example configurations to send and receive Signal messages
238
248
define mosquitto MQTT2_CLIENT localhost:1883
239
249
240
250
define mqtt_signal MQTT2_DEVICE
241
- attr mqtt_signal readingList signal/receive /.* { return { 'from_ '.(split('/', $TOPIC))[ -1] => $EVTPART0 } }
251
+ attr mqtt_signal readingList signal/in /.* { return { 'from_ '.(split('/', $TOPIC))[ -1] => $EVTPART0 } }
242
252
```
243
253
244
254
## References
0 commit comments