# Requests 


Let's consider several typical interaction scenarios for two users.

#### One user knows the other's number
User A knows phone number of B (for instance, A has B's number in the phone book). But B does not know А's number. User A sends message to B. Immediately prior to sending a message relevant check is executed at the server side and the link between A and B will change automatically: A's number becomes available for B (user A is then presented as constructor [userRequest](/constructor/userRequest.md)).
The same happens if user B not having A's number sends a message to the latter. A's number also becomes available to B.

#### Users do not know numbers of each other 
User A has found user B in a chat, geochat or any other way. For both of them phone numbers are not available (in API - constructor [userForeign](/constructor/userForeign.md)). A starts chat with B. When messaging A's number will not become available for B and vice versa. To provide B with A's number it is necessary to send him personal message with contact info (phone number should be transferred in constructor [inputMediaContact](/constructor/inputMediaContact.md) using method [messages.sendMedia](/method/messages.sendMedia.md)).
Now B having personal message with A's phone number can store it in his phone book and import it using method [contacts.importContacts](/method/contacts.importContacts.md) to have it in contacts. With all that, it is not mandatory for him to send his number: after any message later between them B's number will be available for A (see [One user knows the other's number](#nomer-odnogo-iz-sobesednikov-izvesten-drugomu)).

#### Both user know each other number

This is quite obvious: messaging does not change links since target state has been reached.

### Technical features

Since when sending messages to a current user updates on changed links are not sent constructors containing updated links were added to resulting types of messaging methods:

    messages.statedMessagesLinks messages:Vector<Message> chats:Vector<Chat> users:Vector<User> links:Vector<contacts.Link> pts:int seq:int = messages.StatedMessages;
    messages.statedMessageLink message:Message chats:Vector<Chat> users:Vector<User> links:Vector<contacts.Link> pts:int seq:int = messages.StatedMessage;
    messages.sentMessageLink id:int date:int pts:int seq:int links:Vector<contacts.Link> = messages.SentMessage;

To indicate for clients that these constructors are supported one should use [3rd layer](/api/layers.md#3y-sloy).

