# Lalesocket ## Websocket Connection websocket url : `ws://laledev6.flowring.com:8000/_lalesockets/client/v1_alpha/stream/{$matrix_token}?device_id={your_device_id}` * `device_id` will be your `conn_id` * if `device_id == None` , server will generate random `device_id` # List of Websocket Payload ## Get user profile get user profile ```json { "module": "user", "method": "profile", "params" : { "user_lists" : ["@jantest:laledev6.flowring.com","@jantest3:laledev6.flowring.com","@jantest2:laledev6.flowring.com","@jantest4:laledev6.flowring.com"] }, "args" : { "friend_type": "friend_invite" } } ``` ## Send a friend request Send a friend request ```json { "module": "user", "method": "friend_request", "params": { "receiverUserId": "@jantest2:laledev6.flowring.com", "senderUserId": "@jantest4:laledev6.flowring.com", "lale_jwt": "lale_token" } } ``` ## Send a friend request response Send a friend request response ```json { "module": "user", "method": "response_friend_request", "params": { "receiverUserId": "@jantest2:laledev6.flowring.com", "senderUserId": "@jantest4:laledev6.flowring.com", "isApproved": true, "lale_jwt": "lale_token" } } ``` ## Send a text message Send a text message ```json { "module": "room", "method": "send_text", "params": { "room_id": "!zvpULVVcwTSKecWcri:laledev6.flowring.com", "event_type": "m.room.message", "content": { "msgtype": "m.text", "body": "Hi, nice talk to you!" } } } ``` ## Send a file message 1. client **should upload** the file using [`Matrix API`](!https://matrix.org/docs/spec/client_server/latest#post-matrix-media-r0-upload). - client received file `matrix url` from Matrix API. 2. client **should provide valid metadata** of the file! ```json { "module": "room", "method": "send_file", "params": { "room_id": "!zvpULVVcwTSKecWcri:laledev6.flowring.com", "event_type": "m.room.message", "content": { "body": "job_chat_template.docx", "filename": "default-filename.docx", "info": { "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "size": 23299 }, "msgtype": "m.file", "url": "mxc://laledev6.flowring.com/DbcRoqSUdurUglNUTVKBbJnt" } } } ``` ## Send an image message 1. client **should upload** the image using [`Matrix API`](!https://matrix.org/docs/spec/client_server/latest#post-matrix-media-r0-upload). . - client received file `matrix url` from Matrix API. 2. client **should provide valid metadata** of the image! ```json { "module": "room", "method": "send_image", "params": { "room_id": "!zvpULVVcwTSKecWcri:laledev6.flowring.com", "event_type": "m.room.message", "content": { "body": "1280px-Yes_NCTU_main_entrance_lake.jpg", "filename": "default-image.jpg", "info": { "mimetype": "image/jpeg", "h": 960, "w": 1280, "size": 257102 }, "msgtype": "m.image", "url": "mxc://laledev6.flowring.com/jdHDCsbfQaQkfBZYStuhLGvg" } } } ``` ## Create or Join a Secret Group Create or Join secret group. 1. Create room if the room is not exist. 2. Join room if the room is exist. Flow: ``` 1. client send payload to WS user_id, password 2. WS check to LALE if room is exist or not (by password) password 2.1 Room is exist 2.1.1. if a room is exist, lale will return room_id & group_id & usersList. 2.1.2. Then user_id join to the room_id (call matrix API) 2.1.3. notify Lale, that user has joined the group/room (private/room/enter/{userId}) room_id, group_id, password, UserList (follow the original lale format) 2.2 Room is not exist 2.2.1 if a room is not exist, create a room (call matrix API). I will received a room_id from matrix 2.2.2 Notify Lale, by calling private/room/enter/{userId} groupId = empty, room_id = room_id, password = password userList = "@jantest:laledev6.flowring.com" (TBC) 3. return everything from lale to client ``` ```json { "module": "room", "method": "create_join_secret_group", "params": { "time": "2021-11-03T05:21:24.401Z", "password": "0206", "lale_jwt" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJqYW50ZXN0MiIsImV4cCI6MTYzNzYzMjg4MCwiaWF0IjoxNjM3NjMwMTgwfQ.zMxHjagE0Wfic8InzewCwWxvZXnZY3ebGyjzRRJDOMc" } } ``` ## Leave a secret/private room leave a secret group ```json= { "module": "room", "method": "leave_secret_group", "params": { "password": "0206", "lale_jwt" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJqYW50ZXN0MiIsImV4cCI6MTYzNzYzMjg4MCwiaWF0IjoxNjM3NjMwMTgwfQ.zMxHjagE0Wfic8InzewCwWxvZXnZY3ebGyjzRRJDOMc" } } ``` ## Create a special room Create a new room with lale setting. lale setting ``` roomType : 1(normal), 4(work) ``` ```json { "module": "room", "method": "create_special_room", "params": { "userId": "@jantest2:laledev6.flowring.com", "roomType": 4, "name": "My work room", "invite": ["@jantest3:laledev6.flowring.com","@jantest:laledev6.flowring.com"], "lale_jwt": "lale_token" } } ``` ## Create a group Create a new group and invited users directly join (couple with lale group settings). ```json { "module": "room", "method": "create_group", "params": { "adminId": "@jantest2:laledev6.flowring.com", "lastUpdatedTime": "2021-11-03T05:21:24.401Z", "name": "My new room", "announcement": "my announcement", //Optional "imageData": "encoded string", //Optional "roomType": 0, "userList": ["@jantest:laledev6.flowring.com","@jantest3:laledev6.flowring.com"], "lale_jwt" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJqYW50ZXN0MiIsImV4cCI6MTYzNTkyMjMxMywiaWF0IjoxNjM1OTE5NjEzfQ.SNL2Wt0PQhBiIDbv6hfglUoC0n0rkacCM6I9nYJDM_c" } } ``` ## Add group members Add new members into a group. Invited users directly join (couple with lale group settings). **Make sure the `adminId` has authorize to invite users** **Input valid `roomId` and `groupId`** ```json { "module": "room", "method": "add_group_members", "params": { "adminId": "@jantest2:laledev6.flowring.com", "roomId": "!pDszxyBrGxxNzELRhS:laledev6.flowring.com", "groupId": "+room2021110500000003:laledev6.flowring.com", "userList": [ "@jantest:laledev6.flowring.com","@jantest3:laledev6.flowring.com" ], "lale_jwt" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJqYW50ZXN0MiIsImV4cCI6MTYzNTkyMjMxMywiaWF0IjoxNjM1OTE5NjEzfQ.SNL2Wt0PQhBiIDbv6hfglUoC0n0rkacCM6I9nYJDM_c" } } ``` ## Remove group members Remove members from a group. removed users directly leave (couple with lale group settings). **Make sure the `adminId` has authorize to kick users** **Input valid `roomId` and `groupId`** ```json { "module": "room", "method": "remove_group_members", "params": { "adminId": "@jantest2:laledev6.flowring.com", "roomId": "!pDszxyBrGxxNzELRhS:laledev6.flowring.com", "groupId": "+room2021110500000003:laledev6.flowring.com", "userList": [ "@jantest:laledev6.flowring.com","@jantest3:laledev6.flowring.com" ], "lale_jwt" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJqYW50ZXN0MiIsImV4cCI6MTYzNTkyMjMxMywiaWF0IjoxNjM1OTE5NjEzfQ.SNL2Wt0PQhBiIDbv6hfglUoC0n0rkacCM6I9nYJDM_c" } } ``` ## Get Private Room Get a room related with friend. If there is no room available, server automatically create a room and both users in the room. ```json { "module": "room", "method": "get_private_room", "params": { "user_id": "@jantest3:laledev6.flowring.com" } } ``` ## Create a room Create a new room with only creator in the room ```json { "module": "room", "method": "create_room", "params": { "user_id": "@jantest2:laledev6.flowring.com", "name": "My new room", "is_public": true } } ``` ## Invite users to join a room Invite user to join a room. **Params have to be valid!** ```json { "module": "room", "method": "invite_room", "params": { "room_id": "!zvpULVVcwTSKecWcri:laledev6.flowring.com", "user_id": ["@jantest:laledev6.flowring.com","@jantest3:laledev6.flowring.com"] } } ``` ## Join a room Join a room **params have to be valid!** ```json { "module": "room", "method": "join_room", "params": { "room_id": "!NeAoQKAdIwnlEYZLel:laledev6.flowring.com" } } ``` ## leave a room leave a room **params have to be valid!** ```json { "module": "room", "method": "leave_room", "params": { "room_id": "!NeAoQKAdIwnlEYZLel:laledev6.flowring.com" } } ```