X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/6501ffcdacc2ada63f30a00299d437d5aeff1293..861f47d734a2c416ca3231ad72f9f129da5a706f:/man/signal-cli-dbus.5.adoc diff --git a/man/signal-cli-dbus.5.adoc b/man/signal-cli-dbus.5.adoc index 3d977de6..dd7f8034 100755 --- a/man/signal-cli-dbus.5.adoc +++ b/man/signal-cli-dbus.5.adoc @@ -11,11 +11,11 @@ DBus API for signal-cli - A commandline and dbus interface for the Signal messen == Synopsis -*signal-cli* [--verbose] [--config CONFIG] [-u USERNAME] [-o {plain-text,json}] daemon [--system] +*signal-cli* [--verbose] [--config CONFIG] [-a ACCOUNT] [-o {plain-text,json}] daemon [--system] *dbus-send* [--system | --session] [--print-reply] --type=method_call --dest="org.asamk.Signal" /org/asamk/Signal[/_] org.asamk.Signal. [string:] [array::] -Note: when daemon was started without explicit `-u USERNAME`, the `dbus-send` command requires adding the phone number in `/org/asamk/Signal/_`. +Note: when daemon was started without explicit `-a ACCOUNT`, the `dbus-send` command requires adding the phone number in `/org/asamk/Signal/_`. == Description @@ -29,7 +29,7 @@ method(arg1, arg2, ...) -> return Where is according to DBus specification: -* : Array of ... (comma-separated list) +* : Array of ... (comma-separated list) (array:) * (...) : Struct (cannot be sent via `dbus-send`) * : Boolean (false|true) (boolean:) * : Signed 32-bit (int) integer (int32:) @@ -48,17 +48,17 @@ Phone numbers always have the format + == Methods === Control methods -These methods are available if the daemon is started anonymously (without an explicit `-u USERNAME`). +These methods are available if the daemon is started anonymously (without an explicit `-a ACCOUNT`). Requests are sent to `/org/asamk/Signal`; requests related to individual accounts are sent to `/org/asamk/Signal/_441234567890` where the + dialing code is replaced by an underscore (_). -Only `version()` is activated in single-user mode; the rest are disabled. +Only `version()` is activated in single-account mode; the rest are disabled. link() -> deviceLinkUri:: link(newDeviceName) -> deviceLinkUri:: * newDeviceName : Name to give new device (defaults to "cli" if no name is given) * deviceLinkUri : URI of newly linked device -Returns a URI of the form "tsdevice:/?uuid=...". This can be piped to a QR encoder to create a display that +Returns a URI of the form "sgnl://linkdevice?uuid=...". This can be piped to a QR encoder to create a display that can be captured by a Signal smartphone client. For example: `dbus-send --session --dest=org.asamk.Signal --type=method_call --print-reply /org/asamk/Signal org.asamk.Signal.link string:"My secondary client"|tr '\n' '\0'|sed 's/.*string //g'|sed 's/\"//g'|qrencode -s10 -tANSI256` @@ -103,210 +103,292 @@ version() -> version:: Exceptions: None -=== Device methods -Requests for these methods are sent to a specific device (main or linked); the list is available -from the listDevices() method (see below under "Other methods"). +=== Group control methods +The following methods listen to the recipient's object path, which is constructed as follows: +"/org/asamk/Signal/" + DBusNumber +* DBusNumber : recipient's phone number, with underscore (_) replacing plus (+) -removeDevice() -> <>:: +createGroup(groupName, members, avatar) -> groupId:: +* groupName : String representing the display name of the group +* members : String array of new members to be invited to group +* avatar : Filename of avatar picture to be set for group (empty if none) +* groupId : Byte array representing the internal group identifier -Exceptions: Failure +Exceptions: AttachmentInvalid, Failure, InvalidNumber; -=== Other methods +getGroup(groupId) -> objectPath:: +* groupId : Byte array representing the internal group identifier +* objectPath : DBusPath for the group -updateGroup(groupId, newName, members, avatar) -> groupId:: -* groupId : Byte array representing the internal group identifier -* newName : New name of group (empty if unchanged) -* members : String array of new members to be invited to group -* avatar : Filename of avatar picture to be set for group (empty if none) +getGroupMembers(groupId) -> members:: +* groupId : Byte array representing the internal group identifier +* members : String array with the phone numbers of all active members of a group -Exceptions: AttachmentInvalid, Failure, InvalidNumber, GroupNotFound +Exceptions: None, if the group name is not found an empty array is returned -updateProfile(name, about, aboutEmoji , avatar, remove) -> <>:: -updateProfile(givenName, familyName, about, aboutEmoji , avatar, remove) -> <>:: -* name : Name for your own profile (empty if unchanged) -* givenName : Given name for your own profile (empty if unchanged) -* familyName : Family name for your own profile (empty if unchanged) -* about : About message for profile (empty if unchanged) -* aboutEmoji : Emoji for profile (empty if unchanged) -* avatar : Filename of avatar picture for profile (empty if unchanged) -* remove : Set to true if the existing avatar picture should be removed +joinGroup(inviteURI) -> <>:: +* inviteURI : String starting with https://signal.group/# + +Behavior of this method depends on the `requirePermission` parameter of the `enableLink` method. If permission is required, `joinGroup` adds you to the requesting members list. Permission may be granted based on the group's `PermissionAddMember` property (`ONLY_ADMINS` or `EVERY_MEMBER`). If permission is not required, `joinGroup` admits you immediately to the group. Exceptions: Failure +listGroups() -> groups:: +* groups : Array of Structs(objectPath, groupId, groupName) +** objectPath : DBusPath +** groupId : Byte array representing the internal group identifier +** groupName : String representing the display name of the group -setExpirationTimer(number, expiration) -> <>:: -* number : Phone number of recipient -* expiration : int32 for the number of seconds before messages to this recipient disappear. Set to 0 to disable expiration. +sendGroupMessage(message, attachments, groupId) -> timestamp:: +* message : Text to send (can be UTF8) +* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under) +* groupId : Byte array representing the internal group identifier +* timestamp : Long, can be used to identify the corresponding Signal reply -Exceptions: Failure, InvalidNumber +Exceptions: GroupNotFound, Failure, AttachmentInvalid, InvalidGroupId -setContactBlocked(number, block) -> <>:: -* number : Phone number affected by method -* block : false=remove block, true=blocked +sendGroupMessageReaction(emoji, remove, targetAuthor, targetSentTimestamp, groupId) -> timestamp:: +* emoji : Unicode grapheme cluster of the emoji +* remove : Boolean, whether a previously sent reaction (emoji) should be removed +* targetAuthor : String with the phone number of the author of the message to which to react +* targetSentTimestamp : Long representing timestamp of the message to which to react +* groupId : Byte array representing the internal group identifier +* timestamp : Long, can be used to identify the corresponding signal reply -Messages from blocked numbers will no longer be forwarded via DBus. +Exceptions: Failure, InvalidNumber, GroupNotFound, InvalidGroupId -Exceptions: InvalidNumber +sendGroupRemoteDeleteMessage(targetSentTimestamp, groupId) -> timestamp:: +* targetSentTimestamp : Long representing timestamp of the message to delete +* groupId : Byte array with base64 encoded group identifier +* timestamp : Long, can be used to identify the corresponding signal reply -setGroupBlocked(groupId, block) -> <>:: -* groupId : Byte array representing the internal group identifier -* block : false=remove block , true=blocked +Exceptions: Failure, GroupNotFound, InvalidGroupId -Messages from blocked groups will no longer be forwarded via DBus. +=== Group methods +The following methods listen to the group's object path, which can be obtained from the listGroups() method and is constructed as follows: +"/org/asamk/Signal/" + DBusNumber + "/Groups/" + DBusGroupId +* DBusNumber : recipient's phone number, with underscore (_) replacing plus (+) +* DBusGroupId : groupId in base64 format, with underscore (_) replacing plus (+), equals (=), or slash (/) + +Groups have the following (case-sensitive) properties: +* Id (read-only) : Byte array representing the internal group identifier +* Name : Display name of the group +* Description : Description of the group +* Avatar (write-only) : Filename of the avatar +* IsBlocked : true=member will not receive group messages; false=not blocked +* IsMember (read-only) : always true (object path exists only for group members) +* IsAdmin (read-only) : true=member has admin privileges; false=not admin +* MessageExpirationTimer : int32 representing message expiration time for group +* Members (read-only) : String array of group members' phone numbers +* PendingMembers (read-only) : String array of pending members' phone numbers +* RequestingMembers (read-only) : String array of requesting members' phone numbers +* Admins (read-only) : String array of admins' phone numbers +* PermissionAddMember : String representing who has permission to add members +** ONLY_ADMINS, EVERY_MEMBER +* PermissionEditDetails : String representing who may edit group details +** ONLY_ADMINS, EVERY_MEMBER +* PermissionSendMessage : String representing who post messages to group +** ONLY_ADMINS, EVERY_MEMBER (note that ONLY_ADMINS is equivalent to IsAnnouncementGroup) +* GroupInviteLink (read-only) : String of the invitation link (starts with https://signal.group/#) + +To get a property, use (replacing `--session` with `--system` if needed): +`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.Get string:org.asamk.Signal.Group string:$PROPERTY_NAME` + +To set a property, use: +`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.Set string:org.asamk.Signal.Group string:$PROPERTY_NAME variant:$PROPERTY_TYPE:$PROPERTY_VALUE` + +To get all properties, use: +`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.GetAll string:org.asamk.Signal.Group` + +addAdmins(recipients) -> <>:: +* recipients : String array of phone numbers -Exceptions: GroupNotFound, InvalidGroupId +Grant admin privileges to recipients. -joinGroup(inviteURI) -> <>:: -* inviteURI : String starting with https://signal.group which is generated when you share a group link via Signal App +Exceptions: Failure + +addMembers(recipients) -> <>:: +* recipients : String array of phone numbers + +Add recipients to group if they are pending members; otherwise add recipients to list of requesting members. Exceptions: Failure -quitGroup(groupId) -> <>:: -* groupId : Byte array representing the internal group identifier +disableLink() -> <>:: -Note that quitting a group will not remove the group from the getGroupIds command, but set it inactive which can be tested with isMember() +Disables the group's invitation link. -Exceptions: GroupNotFound, Failure, InvalidGroupId +Exceptions: Failure -isMember(groupId) -> isMember:: -* groupId : Byte array representing the internal group identifier -* isMember : true=you are a group member; false=you are not a group member +enableLink(requiresApproval) -> <>:: +* requiresApproval : true=add numbers using the link to the requesting members list -Note that this method does not raise an Exception for a non-existing/unknown group but will simply return 0 (false) +Enables the group's invitation link. -sendEndSessionMessage(recipients) -> <>:: -* recipients : Array of phone numbers +Exceptions: Failure -Exceptions: Failure, InvalidNumber, UntrustedIdentity +quitGroup() -> <>:: +Exceptions: Failure, LastGroupAdmin -sendGroupMessage(message, attachments, groupId) -> timestamp:: -* message : Text to send (can be UTF8) -* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under) -* groupId : Byte array representing the internal group identifier -* timestamp : Long, can be used to identify the corresponding Signal reply +removeAdmins(recipients) -> <>:: +* recipients : String array of phone numbers -Exceptions: GroupNotFound, Failure, AttachmentInvalid, InvalidGroupId +Remove admin privileges from recipients. -sendContacts() -> <>:: +Exceptions: Failure -Sends a synchronization message with the local contacts list to all linked devices. This command should only be used if this is the primary device. +removeMembers(recipients) -> <>:: +* recipients : String array of phone numbers + +Remove recipients from group. Exceptions: Failure -sendSyncRequest() -> <>:: +resetLink() -> <>:: -Sends a synchronization request to the primary device (for group, contacts, ...). Only works if sent from a secondary device. +Resets the group's invitation link to a new random URL starting with https://signal.group/# Exceptions: Failure -sendNoteToSelfMessage(message, attachments) -> timestamp:: -* message : Text to send (can be UTF8) -* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under) -* timestamp : Long, can be used to identify the corresponding Signal reply +=== Deprecated group control methods +The following deprecated methods listen to the recipient's object path, which is constructed as follows: +"/org/asamk/Signal/" + DBusNumber +* DBusNumber : recipient's phone number, with underscore (_) replacing plus (+) -Exceptions: Failure, AttachmentInvalid +getGroupIds() -> groupList:: +groupList : Array of Byte arrays representing the internal group identifiers -sendMessage(message, attachments, recipient) -> timestamp:: -sendMessage(message, attachments, recipients) -> timestamp:: -* message : Text to send (can be UTF8) -* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under) -* recipient : Phone number of a single recipient -* recipients : String array of phone numbers -* timestamp : Long, can be used to identify the corresponding Signal reply +All groups known are returned, regardless of their active or blocked status. To query that use isMember() and isGroupBlocked() -Depending on the type of the recipient field this sends a message to one or multiple recipients. +Exceptions: None -Exceptions: AttachmentInvalid, Failure, InvalidNumber, UntrustedIdentity +getGroupName(groupId) -> groupName:: +* groupId : Byte array representing the internal group identifier +* groupName : The display name of the group -sendTyping(recipient, stop) -> <>:: -* recipient : Phone number of a single recipient -* targetSentTimestamp : True, if typing state should be stopped +Exceptions: None, if the group name is not found an empty string is returned -Exceptions: Failure, GroupNotFound, UntrustedIdentity +isGroupBlocked(groupId) -> isGroupBlocked:: +* groupId : Byte array representing the internal group identifier +* isGroupBlocked : true=group is blocked; false=group is not blocked -sendReadReceipt(recipient, targetSentTimestamps) -> <>:: -* recipient : Phone number of a single recipient -* targetSentTimestamps : Array of Longs to identify the corresponding Signal messages +Dbus will not forward messages from a group when you have blocked it. -Exceptions: Failure, UntrustedIdentity +Exceptions: InvalidGroupId, Failure -sendGroupMessageReaction(emoji, remove, targetAuthor, targetSentTimestamp, groupId) -> timestamp:: -* emoji : Unicode grapheme cluster of the emoji -* remove : Boolean, whether a previously sent reaction (emoji) should be removed -* targetAuthor : String with the phone number of the author of the message to which to react -* targetSentTimestamp : Long representing timestamp of the message to which to react -* groupId : Byte array representing the internal group identifier -* timestamp : Long, can be used to identify the corresponding signal reply +isMember(groupId) -> isMember:: +* groupId : Byte array representing the internal group identifier +* isMember : true=you are a group member; false=you are not a group member -Exceptions: Failure, InvalidNumber, GroupNotFound, InvalidGroupId +Note that this method does not raise an Exception for a non-existing/unknown group but will simply return 0 (false) -sendMessageReaction(emoji, remove, targetAuthor, targetSentTimestamp, recipient) -> timestamp:: -sendMessageReaction(emoji, remove, targetAuthor, targetSentTimestamp, recipients) -> timestamp:: -* emoji : Unicode grapheme cluster of the emoji -* remove : Boolean, whether a previously sent reaction (emoji) should be removed -* targetAuthor : String with the phone number of the author of the message to which to react -* targetSentTimestamp : Long representing timestamp of the message to which to react -* recipient : String with the phone number of a single recipient -* recipients : Array of strings with phone numbers, should there be more recipients -* timestamp : Long, can be used to identify the corresponding Signal reply +quitGroup(groupId) -> <>:: +* groupId : Byte array representing the internal group identifier -Depending on the type of the recipient(s) field this sends a reaction to one or multiple recipients. +Note that quitting a group will not remove the group from the getGroupIds command, but set it inactive which can be tested with isMember() -Exceptions: Failure, InvalidNumber +Exceptions: GroupNotFound, Failure, InvalidGroupId -sendGroupRemoteDeleteMessage(targetSentTimestamp, groupId) -> timestamp:: -* targetSentTimestamp : Long representing timestamp of the message to delete -* groupId : Byte array with base64 encoded group identifier -* timestamp : Long, can be used to identify the corresponding signal reply +setGroupBlocked(groupId, block) -> <>:: +* groupId : Byte array representing the internal group identifier +* block : false=remove block , true=blocked -Exceptions: Failure, GroupNotFound, InvalidGroupId +Messages from blocked groups will no longer be forwarded via DBus. -sendRemoteDeleteMessage(targetSentTimestamp, recipient) -> timestamp:: -sendRemoteDeleteMessage(targetSentTimestamp, recipients) -> timestamp:: -* targetSentTimestamp : Long representing timestamp of the message to delete -* recipient : String with the phone number of a single recipient -* recipients : Array of strings with phone numbers, should there be more recipients -* timestamp : Long, can be used to identify the corresponding signal reply +Exceptions: GroupNotFound, InvalidGroupId -Depending on the type of the recipient(s) field this deletes a message with one or multiple recipients. +updateGroup(groupId, newName, members, avatar) -> groupId:: +* groupId : Byte array representing the internal group identifier +* newName : New name of group (empty if unchanged) +* members : String array of new members to be invited to group +* avatar : Filename of avatar picture to be set for group (empty if none) -Exceptions: Failure, InvalidNumber +Exceptions: AttachmentInvalid, Failure, InvalidNumber, GroupNotFound -getContactName(number) -> name:: -* number : Phone number -* name : Contact's name in local storage (from the master device for a linked account, or the one set with setContactName); if not set, contact's profile name is used +=== Device control methods +The following methods listen to the recipient's object path, which is constructed as follows: +"/org/asamk/Signal/" + DBusNumber +* DBusNumber : recipient's phone number, with underscore (_) replacing plus (+) -Exceptions: None +addDevice(deviceUri) -> <>:: +* deviceUri : URI in the form of "sgnl://linkdevice?uuid=..." (formerly "tsdevice:/?uuid=...") Normally displayed by a Signal desktop app, smartphone app, or another signal-cli instance using the `link` control method. -setContactName(number,name<>) -> <>:: -* number : Phone number -* name : Name to be set in contacts (in local storage with signal-cli) +getDevice(deviceId) -> devicePath:: +* deviceId : Long representing a deviceId +* devicePath : DBusPath object for the device -Exceptions: InvalidNumber, Failure +Exceptions: DeviceNotFound -getGroupIds() -> groupList:: -groupList : Array of Byte arrays representing the internal group identifiers +listDevices() -> devices:: +* devices : Array of structs (objectPath, id, name) +** objectPath : DBusPath representing the device's object path +** id : Long representing the deviceId +** name : String representing the device's name -All groups known are returned, regardless of their active or blocked status. To query that use isMember() and isGroupBlocked() +Exceptions: InvalidUri -Exceptions: None +sendContacts() -> <>:: -getGroupName(groupId) -> groupName:: -* groupId : Byte array representing the internal group identifier -* groupName : The display name of the group +Sends a synchronization message with the local contacts list to all linked devices. This command should only be used if this is the primary device. -Exceptions: None, if the group name is not found an empty string is returned +Exceptions: Failure -getGroupMembers(groupId) -> members:: -* groupId : Byte array representing the internal group identifier -* members : String array with the phone numbers of all active members of a group +sendSyncRequest() -> <>:: -Exceptions: None, if the group name is not found an empty array is returned +Sends a synchronization request to the primary device (for group, contacts, ...). Only works if sent from a secondary device. -listNumbers() -> numbers:: -* numbers : String array of all known numbers +Exceptions: Failure -This is a concatenated list of all defined contacts as well of profiles known (e.g. peer group members or sender of received messages) +=== Device methods and properties +The following methods listen to the device's object path, which is constructed as follows: +"/org/asamk/Signal/" + DBusNumber + "/Devices/" + deviceId +* DBusNumber : recipient's phone number, with underscore (_) replacing plus (+) +* deviceId : Long representing the device identifier (obtained from listDevices() method) + +Devices have the following (case-sensitive) properties: +* Id (read-only) : Long representing the device identifier +* Created (read-only) : Long representing the number of milliseconds since the Unix epoch +* LastSeen (read-only) : Long representing the number of milliseconds since the Unix epoch +* Name : String representing the display name of the device + +To get a property, use (replacing `--session` with `--system` if needed): +`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.Get string:org.asamk.Signal.Device string:$PROPERTY_NAME` + +To set a property, use: +`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.Set string:org.asamk.Signal.Device string:$PROPERTY_NAME variant:$PROPERTY_TYPE:$PROPERTY_VALUE` + +To get all properties, use: +`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.GetAll string:org.asamk.Signal.Device` + +removeDevice() -> <>:: + +Exceptions: Failure + +=== Configuration properties +The configuration's object path, which exists only for primary devices, is constructed as follows: +"/org/asamk/Signal/" + DBusNumber + "/Configuration" +* DBusNumber : recipient's phone number, with underscore (_) replacing plus (+) + +Configurations have the following (case-sensitive) properties: +* ReadReceipts : should send read receipts (true/false) +* UnidentifiedDeliveryIndicators : should show unidentified delivery indicators (true/false) +* TypingIndicators : should send/show typing indicators (true/false) +* LinkPreviews : should generate link previews (true/false) + +To get a property, use (replacing `--session` with `--system` if needed): +`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.Get string:org.asamk.Signal.Configuration string:$PROPERTY_NAME` + +To set a property, use: +`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.Set string:org.asamk.Signal.Configuration string:$PROPERTY_NAME variant:$PROPERTY_TYPE:$PROPERTY_VALUE` + +To get all properties, use: +`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.GetAll string:org.asamk.Signal.Configuration` + +=== Other methods + +getContactName(number) -> name:: +* number : Phone number +* name : Contact's name in local storage (from the master device for a linked account, or the one set with setContactName); if not set, contact's profile name is used Exceptions: None @@ -318,6 +400,11 @@ Searches contacts and known profiles for a given name and returns the list of al Exceptions: None +getSelfNumber() -> number:: +* number : Your phone number + +Exceptions: None + isContactBlocked(number) -> blocked:: * number : Phone number * blocked : true=blocked, false=not blocked @@ -326,13 +413,24 @@ For unknown numbers false is returned but no exception is raised. Exceptions: InvalidPhoneNumber -isGroupBlocked(groupId) -> isGroupBlocked:: -* groupId : Byte array representing the internal group identifier -* isGroupBlocked : true=group is blocked; false=group is not blocked +isRegistered() -> result:: +isRegistered(number) -> result:: +isRegistered(numbers) -> results:: +* number : Phone number +* numbers : String array of phone numbers +* result : true=number is registered, false=number is not registered +* results : Boolean array of results -Dbus will not forward messages from a group when you have blocked it. +For unknown numbers, false is returned, but no exception is raised. If no number is given, returns true (indicating that you are registered). -Exceptions: InvalidGroupId, Failure +Exceptions: InvalidNumber + +listNumbers() -> numbers:: +* numbers : String array of all known numbers + +This is a concatenated list of all defined contacts as well of profiles known (e.g. peer group members or sender of received messages) + +Exceptions: None removePin() -> <>:: @@ -340,55 +438,107 @@ Removes registration PIN protection. Exceptions: Failure -setPin(pin) -> <>:: -* pin : PIN you set after registration (resets after 7 days of inactivity) +sendEndSessionMessage(recipients) -> <>:: +* recipients : Array of phone numbers -Sets a registration lock PIN, to prevent others from registering your number. +Exceptions: Failure, InvalidNumber, UntrustedIdentity -Exceptions: Failure +sendMessage(message, attachments, recipient) -> timestamp:: +sendMessage(message, attachments, recipients) -> timestamp:: +* message : Text to send (can be UTF8) +* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under) +* recipient : Phone number of a single recipient +* recipients : String array of phone numbers +* timestamp : Long, can be used to identify the corresponding Signal reply -version() -> version:: -* version : Version string of signal-cli +Depending on the type of the recipient field this sends a message to one or multiple recipients. -Exceptions: None +Exceptions: AttachmentInvalid, Failure, InvalidNumber, UntrustedIdentity -getSelfNumber() -> number:: -* number : Your phone number +sendMessageReaction(emoji, remove, targetAuthor, targetSentTimestamp, recipient) -> timestamp:: +sendMessageReaction(emoji, remove, targetAuthor, targetSentTimestamp, recipients) -> timestamp:: +* emoji : Unicode grapheme cluster of the emoji +* remove : Boolean, whether a previously sent reaction (emoji) should be removed +* targetAuthor : String with the phone number of the author of the message to which to react +* targetSentTimestamp : Long representing timestamp of the message to which to react +* recipient : String with the phone number of a single recipient +* recipients : Array of strings with phone numbers, should there be more recipients +* timestamp : Long, can be used to identify the corresponding Signal reply -Exceptions: None +Depending on the type of the recipient(s) field this sends a reaction to one or multiple recipients. -isRegistered() -> result:: -isRegistered(number) -> result:: -isRegistered(numbers) -> results:: -* number : Phone number -* numbers : String array of phone numbers -* result : true=number is registered, false=number is not registered -* results : Boolean array of results +Exceptions: Failure, InvalidNumber -For unknown numbers, false is returned, but no exception is raised. If no number is given, returns true (indicating that you are registered). +sendNoteToSelfMessage(message, attachments) -> timestamp:: +* message : Text to send (can be UTF8) +* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under) +* timestamp : Long, can be used to identify the corresponding Signal reply + +Exceptions: Failure, AttachmentInvalid + +sendReadReceipt(recipient, targetSentTimestamps) -> <>:: +* recipient : Phone number of a single recipient +* targetSentTimestamps : Array of Longs to identify the corresponding Signal messages + +Exceptions: Failure, UntrustedIdentity + +sendViewedReceipt(recipient, targetSentTimestamp) -> <>:: +* recipient : Phone number of a single recipient +* targetSentTimestamp : Array of Longs to identify the corresponding signal messages + +Exceptions: Failure, UntrustedIdentity + +sendRemoteDeleteMessage(targetSentTimestamp, recipient) -> timestamp:: +sendRemoteDeleteMessage(targetSentTimestamp, recipients) -> timestamp:: +* targetSentTimestamp : Long representing timestamp of the message to delete +* recipient : String with the phone number of a single recipient +* recipients : Array of strings with phone numbers, should there be more recipients +* timestamp : Long, can be used to identify the corresponding signal reply + +Depending on the type of the recipient(s) field this deletes a message with one or multiple recipients. + +Exceptions: Failure, InvalidNumber + +sendTyping(recipient, stop) -> <>:: +* recipient : Phone number of a single recipient +* targetSentTimestamp : True, if typing state should be stopped + +Exceptions: Failure, GroupNotFound, UntrustedIdentity + +setContactBlocked(number, block) -> <>:: +* number : Phone number affected by method +* block : false=remove block, true=blocked + +Messages from blocked numbers will no longer be forwarded via DBus. Exceptions: InvalidNumber -addDevice(deviceUri) -> <>:: -* deviceUri : URI in the form of tsdevice:/?uuid=... Normally displayed by a Signal desktop app, smartphone app, or another signal-cli instance using the `link` control method. +setContactName(number,name<>) -> <>:: +* number : Phone number +* name : Name to be set in contacts (in local storage with signal-cli) -listDevices() -> devices:: -* devices : Array of structs (objectPath, id, name) -** objectPath : DBusPath representing the device's object path -** id : Long representing the deviceId -** name : String representing the device's name +Exceptions: InvalidNumber, Failure -Exceptions: InvalidUri +deleteContact(number) -> <>:: +* number : Phone number -getDevice(deviceId) -> devicePath:: -* deviceId : Long representing a (potential) deviceId -* devicePath : DBusPath object for the device +Exceptions: Failure -Exceptions: DeviceNotFound +deleteRecipient(number) -> <>:: +* number : Phone number -uploadStickerPack(stickerPackPath) -> url:: -* stickerPackPath : Path to the manifest.json file or a zip file in the same directory -* url : URL of sticker pack after successful upload +Exceptions: Failure + +setExpirationTimer(number, expiration) -> <>:: +* number : Phone number of recipient +* expiration : int32 for the number of seconds before messages to this recipient disappear. Set to 0 to disable expiration. + +Exceptions: Failure, InvalidNumber + +setPin(pin) -> <>:: +* pin : PIN you set after registration (resets after 7 days of inactivity) + +Sets a registration lock PIN, to prevent others from registering your number. Exceptions: Failure @@ -399,6 +549,29 @@ Can be used to lift some rate-limits by solving a captcha. Exception: IOErrorException +updateProfile(name, about, aboutEmoji , avatar, remove) -> <>:: +updateProfile(givenName, familyName, about, aboutEmoji , avatar, remove) -> <>:: +* name : Name for your own profile (empty if unchanged) +* givenName : Given name for your own profile (empty if unchanged) +* familyName : Family name for your own profile (empty if unchanged) +* about : About message for profile (empty if unchanged) +* aboutEmoji : Emoji for profile (empty if unchanged) +* avatar : Filename of avatar picture for profile (empty if unchanged) +* remove : Set to true if the existing avatar picture should be removed + +Exceptions: Failure + +uploadStickerPack(stickerPackPath) -> url:: +* stickerPackPath : Path to the manifest.json file or a zip file in the same directory +* url : URL of sticker pack after successful upload + +Exceptions: Failure + +version() -> version:: +* version : Version string of signal-cli + +Exceptions: None + == Signals SyncMessageReceived (timestamp, sender, destination, groupId, message, attachments):: * timestamp : Integer value that can be used to associate this e.g. with a sendMessage() @@ -433,7 +606,7 @@ dbus-send --print-reply --type=method_call --dest="org.asamk.Signal" /org/asamk/ Send a group message:: dbus-send --session --print-reply --type=method_call --dest=org.asamk.Signal /org/asamk/Signal org.asamk.Signal.sendGroupMessage string:'The message goes here' array:string:'/path/to/attachmnt1','/path/to/attachmnt2' array:byte:139,22,72,247,116,32,170,104,205,164,207,21,248,77,185 -Print the group name corresponding to a groupId; the daemon runs on system bus, and was started without an explicit `-u USERNAME`:: +Print the group name corresponding to a groupId; the daemon runs on system bus, and was started without an explicit `-a ACCOUNT`:: dbus-send --system --print-reply --type=method_call --dest='org.asamk.Signal' /org/asamk/Signal/_1234567890 org.asamk.Signal.getGroupName array:byte:139,22,72,247,116,32,170,104,205,164,207,21,248,77,185 == Authors