inviteBy3PID method
Note that there are two forms of this API, which are documented separately. This version of the API does not require that the inviter know the SDN identifier of the invitee, and instead relies on third party identifiers. The node uses an identity server to perform the mapping from third party identifier to a SDN identifier. The other is documented in the joining rooms section.
This API invites a user to participate in a particular room. They do not start participating in the room until they actually join the room.
Only users currently in a particular room can invite other users to join that room.
If the identity server did know the SDN user identifier for the
third party identifier, the node will append a m.room.member
event to the room.
If the identity server does not know a SDN user identifier for the
passed third party identifier, the node will issue an invitation
which can be accepted upon providing proof of ownership of the third
party identifier. This is achieved by the identity server generating a
token, which it gives to the inviting node. The node will
add an m.room.third_party_invite
event into the graph for the room,
containing that token.
When the invitee binds the invited third party identifier to a SDN user ID, the identity server will give the user a list of pending invitations, each containing:
-
The room ID to which they were invited
-
The token given to the node
-
A signature of the token, signed with the identity server's private key
-
The sdn user ID who invited them to the room
If a token is requested from the identity server, the node will
append a m.room.third_party_invite
event to the room.
roomId
The room identifier (not alias) to which to invite the user.
address
The invitee's third party identifier.
idAccessToken
An access token previously registered with the identity server. Servers
can treat this as optional to distinguish between r0.5-compatible clients
and this specification version.
idServer
The hostname+port of the identity server which should be used for third party identifier lookups.
medium
The kind of address being passed in the address field, for example
email
(see the list of recognised values).
Implementation
Future<void> inviteBy3PID(String roomId, String address, String idAccessToken,
String idServer, String medium) async {
final requestUri =
Uri(path: '_api/client/v3/rooms/${Uri.encodeComponent(roomId)}/invite');
final request = Request('POST', baseUri!.resolveUri(requestUri));
request.headers['authorization'] = 'Bearer ${bearerToken!}';
request.headers['content-type'] = 'application/json';
request.bodyBytes = utf8.encode(jsonEncode({
'address': address,
'id_access_token': idAccessToken,
'id_server': idServer,
'medium': medium,
}));
final response = await httpClient.send(request);
final responseBody = await response.stream.toBytes();
if (response.statusCode != 200) unexpectedResponse(response, responseBody);
final responseString = utf8.decode(responseBody);
final json = jsonDecode(responseString);
return ignore(json);
}