send_group_message
Send encrypted text messages to a Signal group, including @mentions, formatting, replies, and link previews; use a group ID from list_groups.
Instructions
Send a text message to a Signal group (end-to-end encrypted to all members). Use send_message for a single contact, send_group_attachment for files. group_id comes from list_groups. message is the text. @mentions: put the name in the text and pass mentions [{start, length, author (E.164)}]; start/length are UTF-16 code units, not codepoints — an emoji before the mention shifts the offset by 2, not 1. formatting=true turns bold, italic, strikethrough, monospace and ||spoiler|| into real Signal formatting (markers are removed from the sent text); with it, mention offsets refer to the text as you wrote it, markers included, and are adjusted for you. Leave it off for text with literal asterisks or backticks. Reply/quote: quote_author (E.164) + quote_timestamp (ms) of the original; quote_message (quoted text; default: looked up in the local store), quote_mentions ({start, length, author}), quote_text_styles ('start:length:STYLE') and quote_attachments ('contentType[:filename[:previewFile]]') only shape the quote bubble. Link preview card: preview_url (must also appear in the text), preview_title (needed for the card to render), preview_description, preview_image (local file). Story reply: story_author (E.164, required with story_timestamp) + story_timestamp (ms). no_urgent=true sends without a push notification; notify_self=true delivers a normal notifying message if you are among the recipients. Contacts Signal's servers; not idempotent (repeating sends a duplicate); sends share a 20-per-minute rate limit (calls wait rather than fail). The sent message is saved to the local store. Returns {status, timestamp, group_id}; timestamp is the target_timestamp for edit_message, react_to_message or delete_group_message.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Message text to send | |
| group_id | Yes | Group ID (from list_groups) | |
| mentions | No | List of @mentions. Each item: {start: offset of the mention in the message (UTF-16 code units, not codepoints), length: mention length (UTF-16 code units), author: E.164 phone number of the mentioned member}. Example: message='Hello @Alice', mentions=[{start:6,length:6,author:'+1234567890'}] | |
| no_urgent | No | Send without the urgent flag, so the recipient gets no push notification | |
| formatting | No | Convert **bold**, *italic*, ~~strikethrough~~, `monospace`, ||spoiler|| to Signal text formatting. Default false. | |
| notify_self | No | If you are among the recipients, deliver as a normal (notifying) message instead of a silent sync message | |
| preview_url | No | URL for a link preview card; the same URL must also appear in the message text | |
| quote_author | No | Phone number (E.164) of the author of the message being quoted/replied to | |
| story_author | No | Phone number of the story's author, to reply to a story | |
| preview_image | No | Local image file for the link preview thumbnail | |
| preview_title | No | Link preview title (needed for the card to render) | |
| quote_message | No | Text of the quoted message shown in the quote bubble. Default: looked up in the local store by quote_author + quote_timestamp | |
| quote_mentions | No | @mentions inside the quoted text, same shape as mentions: {start, length, author} | |
| quote_timestamp | No | Timestamp of the message being quoted/replied to (from get_conversation) | |
| story_timestamp | No | Timestamp of the story being replied to | |
| quote_attachments | No | Attachments of the quoted message as 'contentType[:filename[:previewFile]]', e.g. 'image/png:photo.png' | |
| quote_text_styles | No | Styles inside the quoted text as 'start:length:STYLE' (BOLD, ITALIC, SPOILER, STRIKETHROUGH, MONOSPACE) | |
| preview_description | No | Link preview description |