diff --git a/src/controllers/groupChatController.js b/src/controllers/groupChatController.js index 9da1c42..24cddb2 100644 --- a/src/controllers/groupChatController.js +++ b/src/controllers/groupChatController.js @@ -2,6 +2,33 @@ const { MessageMedia } = require('whatsapp-web.js') const { sessions } = require('../sessions') const { sendErrorResponse } = require('../utils') +/** + * Retrieves information about a chat based on the provided chatId + * + * @async + * @function getClassInfo + * @param {object} req - The request object + * @param {object} res - The response object + * @param {string} req.body.chatId - The chatId of the chat to retrieve information about + * @param {string} req.params.sessionId - The sessionId of the client making the request + * @throws {Error} The chat is not a group. + * @returns {Promise} - A JSON response with success true and chat object containing chat information + */ +const getClassInfo = async (req, res) => { + /* + #swagger.summary = 'Get the group' + */ + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + res.json({ success: true, chat }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + /** * Adds participants to a group chat. * @async @@ -14,13 +41,40 @@ const { sendErrorResponse } = require('../utils') * @throws {Error} Throws an error if the chat is not a group chat. */ const addParticipants = async (req, res) => { + /* + #swagger.summary = 'Add the participant(s)' + #swagger.description = 'Add a list of participants by id to the group' + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' + }, + contactIds: { + type: 'string', + description: 'Unique WhatsApp identifier for the contact', + example: '6281288888887@c.us' + }, + options: { + type: 'object', + description: 'Options for adding participants', + example: { sleep: [250, 500], comment: '' } + } + } + } + } + */ try { - const { chatId, contactIds } = req.body + const { chatId, contactIds, options = {} } = req.body const client = sessions.get(req.params.sessionId) const chat = await client.getChatById(chatId) if (!chat.isGroup) { throw new Error('The chat is not a group') } - await chat.addParticipants(contactIds) - res.json({ success: true, participants: chat.participants }) + const result = Object.keys(options).length ? await chat.addParticipants(contactIds, options) : await chat.addParticipants(contactIds) + res.json({ success: true, result }) } catch (error) { sendErrorResponse(res, 500, error.message) } @@ -37,13 +91,35 @@ const addParticipants = async (req, res) => { * @throws {Error} If chat is not a group */ const removeParticipants = async (req, res) => { + /* + #swagger.summary = 'Remove the participant(s)' + #swagger.description = 'Remove a list of participants by ID to the group' + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' + }, + contactIds: { + type: 'string', + description: 'Unique WhatsApp identifier for the contact', + example: '6281288888887@c.us' + } + } + } + } + */ try { const { chatId, contactIds } = req.body const client = sessions.get(req.params.sessionId) const chat = await client.getChatById(chatId) if (!chat.isGroup) { throw new Error('The chat is not a group') } - await chat.removeParticipants(contactIds) - res.json({ success: true, participants: chat.participants }) + const result = await chat.removeParticipants(contactIds) + res.json({ success: true, result }) } catch (error) { sendErrorResponse(res, 500, error.message) } @@ -60,13 +136,35 @@ const removeParticipants = async (req, res) => { * @throws {Error} If chat is not a group */ const promoteParticipants = async (req, res) => { + /* + #swagger.summary = 'Promote the participant(s)' + #swagger.description = 'Promote participants by IDs to admins' + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' + }, + contactIds: { + type: 'string', + description: 'Unique WhatsApp identifier for the contact', + example: '6281288888887@c.us' + } + } + } + } + */ try { const { chatId, contactIds } = req.body const client = sessions.get(req.params.sessionId) const chat = await client.getChatById(chatId) if (!chat.isGroup) { throw new Error('The chat is not a group') } - await chat.promoteParticipants(contactIds) - res.json({ success: true, participants: chat.participants }) + const result = await chat.promoteParticipants(contactIds) + res.json({ success: true, result }) } catch (error) { sendErrorResponse(res, 500, error.message) } @@ -83,13 +181,35 @@ const promoteParticipants = async (req, res) => { * @throws {Error} If chat is not a group */ const demoteParticipants = async (req, res) => { + /* + #swagger.summary = 'Demote the participant(s)' + #swagger.description = 'Demote participants by ids to regular users' + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' + }, + contactIds: { + type: 'string', + description: 'Unique WhatsApp identifier for the contact', + example: '6281288888887@c.us' + } + } + } + } + */ try { const { chatId, contactIds } = req.body const client = sessions.get(req.params.sessionId) const chat = await client.getChatById(chatId) if (!chat.isGroup) { throw new Error('The chat is not a group') } - await chat.demoteParticipants(contactIds) - res.json({ success: true, participants: chat.participants }) + const result = await chat.demoteParticipants(contactIds) + res.json({ success: true, result }) } catch (error) { sendErrorResponse(res, 500, error.message) } @@ -106,6 +226,10 @@ const demoteParticipants = async (req, res) => { * @throws {Error} If chat is not a group */ const getInviteCode = async (req, res) => { + /* + #swagger.summary = 'Get the invite code' + #swagger.description = 'Get the invite code for a specific group' + */ try { const { chatId } = req.body const client = sessions.get(req.params.sessionId) @@ -129,13 +253,34 @@ const getInviteCode = async (req, res) => { * @throws {Error} If chat is not a group */ const setSubject = async (req, res) => { + /* + #swagger.summary = 'Update the group subject' + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' + }, + subject: { + type: 'string', + description: 'Group subject', + example: '' + } + } + } + } + */ try { const { chatId, subject } = req.body const client = sessions.get(req.params.sessionId) const chat = await client.getChatById(chatId) if (!chat.isGroup) { throw new Error('The chat is not a group') } - const success = await chat.setSubject(subject) - res.json({ success, chat }) + const result = await chat.setSubject(subject) + res.json({ success: true, result }) } catch (error) { sendErrorResponse(res, 500, error.message) } @@ -152,13 +297,34 @@ const setSubject = async (req, res) => { * @throws {Error} If chat is not a group */ const setDescription = async (req, res) => { + /* + #swagger.summary = 'Update the group description' + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' + }, + description: { + type: 'string', + description: 'Group description', + example: '' + } + } + } + } + */ try { const { chatId, description } = req.body const client = sessions.get(req.params.sessionId) const chat = await client.getChatById(chatId) if (!chat.isGroup) { throw new Error('The chat is not a group') } - const success = await chat.setDescription(description) - res.json({ success, chat }) + const result = await chat.setDescription(description) + res.json({ success: true, result }) } catch (error) { sendErrorResponse(res, 500, error.message) } @@ -175,37 +341,16 @@ const setDescription = async (req, res) => { * @throws {Error} If chat is not a group */ const leave = async (req, res) => { + /* + #swagger.summary = 'Leave the group' + */ try { const { chatId } = req.body const client = sessions.get(req.params.sessionId) const chat = await client.getChatById(chatId) if (!chat.isGroup) { throw new Error('The chat is not a group') } - const outcome = await chat.leave() - res.json({ success: true, outcome }) - } catch (error) { - sendErrorResponse(res, 500, error.message) - } -} - -/** - * Retrieves information about a chat based on the provided chatId - * - * @async - * @function getClassInfo - * @param {object} req - The request object - * @param {object} res - The response object - * @param {string} req.body.chatId - The chatId of the chat to retrieve information about - * @param {string} req.params.sessionId - The sessionId of the client making the request - * @throws {Error} The chat is not a group. - * @returns {Promise} - A JSON response with success true and chat object containing chat information - */ -const getClassInfo = async (req, res) => { - try { - const { chatId } = req.body - const client = sessions.get(req.params.sessionId) - const chat = await client.getChatById(chatId) - if (!chat.isGroup) { throw new Error('The chat is not a group') } - res.json({ success: true, chat }) + const result = await chat.leave() + res.json({ success: true, result }) } catch (error) { sendErrorResponse(res, 500, error.message) } @@ -224,13 +369,17 @@ const getClassInfo = async (req, res) => { * @returns {Promise} - A JSON response with success true and the new invite code for the group chat */ const revokeInvite = async (req, res) => { + /* + #swagger.summary = 'Invalidate the invite code' + #swagger.description = 'Invalidate the current group invite code and generates a new one' + */ try { const { chatId } = req.body const client = sessions.get(req.params.sessionId) const chat = await client.getChatById(chatId) if (!chat.isGroup) { throw new Error('The chat is not a group') } - const newInviteCode = await chat.revokeInvite() - res.json({ success: true, newInviteCode }) + const result = await chat.revokeInvite() + res.json({ success: true, result }) } catch (error) { sendErrorResponse(res, 500, error.message) } @@ -251,8 +400,30 @@ const revokeInvite = async (req, res) => { * @throws {Error} If the chat is not a group. */ const setInfoAdminsOnly = async (req, res) => { + /* + #swagger.summary = 'Update the info group settings' + #swagger.summary = 'Update the group settings to only allow admins to edit group info (title, description, photo).' + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' + }, + adminsOnly: { + type: 'boolean', + description: 'Enable or disable this option', + example: true + } + } + } + } + */ try { - const { chatId, adminsOnly } = req.body + const { chatId, adminsOnly = true } = req.body const client = sessions.get(req.params.sessionId) const chat = await client.getChatById(chatId) if (!chat.isGroup) { throw new Error('The chat is not a group') } @@ -278,8 +449,30 @@ const setInfoAdminsOnly = async (req, res) => { * @throws {Error} If the chat is not a group. */ const setMessagesAdminsOnly = async (req, res) => { + /* + #swagger.summary = 'Update the message group settings' + #swagger.summary = 'Update the group settings to only allow admins to send messages.' + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' + }, + adminsOnly: { + type: 'boolean', + description: 'Enable or disable this option', + example: true + } + } + } + } + */ try { - const { chatId, adminsOnly } = req.body + const { chatId, adminsOnly = true } = req.body const client = sessions.get(req.params.sessionId) const chat = await client.getChatById(chatId) if (!chat.isGroup) { throw new Error('The chat is not a group') } @@ -302,12 +495,36 @@ const setMessagesAdminsOnly = async (req, res) => { * @throws {Error} If there is an issue setting the group picture, an error will be thrown. */ const setPicture = async (req, res) => { + /* + #swagger.summary = 'Set the group picture' + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' + }, + pictureMimeType: { + type: 'string', + description: 'MIME type of the attachment' + }, + pictureData: { + type: 'string', + description: 'Base64-encoded data of the file' + } + } + } + } + */ try { - const { pictureMimetype, pictureData, chatId } = req.body + const { pictureMimeType, pictureData, chatId } = req.body const client = sessions.get(req.params.sessionId) - const media = new MessageMedia(pictureMimetype, pictureData) const chat = await client.getChatById(chatId) if (!chat.isGroup) { throw new Error('The chat is not a group') } + const media = new MessageMedia(pictureMimeType, pictureData) const result = await chat.setPicture(media) res.json({ success: true, result }) } catch (error) { @@ -325,6 +542,9 @@ const setPicture = async (req, res) => { * @throws {Error} If there is an issue setting the group picture, an error will be thrown. */ const deletePicture = async (req, res) => { + /* + #swagger.summary = 'Delete the group picture' + */ try { const { chatId } = req.body const client = sessions.get(req.params.sessionId) @@ -337,6 +557,117 @@ const deletePicture = async (req, res) => { } } +/** + * Get an array of membership requests + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {Object} req.body.chatId - ID of the group chat. + * @param {string} req.params.sessionId - The ID of the session for the user. + * @returns {Object} Returns a JSON object with a success status and the result of the function. + * @throws {Error} If there is an issue setting the group picture, an error will be thrown. + */ +const getGroupMembershipRequests = async (req, res) => { + /* + #swagger.summary = 'Get the membership requests' + */ + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const result = await chat.getGroupMembershipRequests() + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Approve membership requests if any + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {Object} req.body.chatId - ID of the group chat. + * @param {string} req.params.sessionId - The ID of the session for the user. + * @returns {Object} Returns a JSON object with a success status and the result of the function. + * @throws {Error} If there is an issue setting the group picture, an error will be thrown. + */ +const approveGroupMembershipRequests = async (req, res) => { + /* + #swagger.summary = 'Approve membership request' + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' + }, + options: { + type: 'object', + description: 'Options for performing a membership request action', + example: { requesterIds: [], sleep: [250, 500] } + } + } + } + } + */ + try { + const { chatId, options = {} } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const result = await chat.approveGroupMembershipRequests(options) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Reject membership requests if any + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {Object} req.body.chatId - ID of the group chat. + * @param {string} req.params.sessionId - The ID of the session for the user. + * @returns {Object} Returns a JSON object with a success status and the result of the function. + * @throws {Error} If there is an issue setting the group picture, an error will be thrown. + */ +const rejectGroupMembershipRequests = async (req, res) => { + /* + #swagger.summary = 'Reject membership request' + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' + }, + options: { + type: 'object', + description: 'Options for performing a membership request action', + example: { requesterIds: [], sleep: [250, 500] } + } + } + } + } + */ + try { + const { chatId, options = {} } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const result = await chat.rejectGroupMembershipRequests(options) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + module.exports = { getClassInfo, addParticipants, @@ -351,5 +682,8 @@ module.exports = { setMessagesAdminsOnly, setSubject, setPicture, - deletePicture + deletePicture, + getGroupMembershipRequests, + approveGroupMembershipRequests, + rejectGroupMembershipRequests } diff --git a/src/middleware.js b/src/middleware.js index 86c9436..873d2ff 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -196,12 +196,20 @@ const groupChatSwagger = async (req, res, next) => { properties: { chatId: { type: 'string', - description: 'Unique WhatsApp ID for the given Chat (either group or personal)', - example: '6281288888888@c.us' + description: 'Unique WhatsApp id for the given chat group', + example: 'XXXXXXXXXX@g.us' } } } } + #swagger.responses[500] = { + description: "Server failure.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ErrorResponse" } + } + } + } */ next() } diff --git a/src/routes.js b/src/routes.js index f20234f..f42ece6 100644 --- a/src/routes.js +++ b/src/routes.js @@ -149,6 +149,9 @@ groupChatRouter.post('/setMessagesAdminsOnly/:sessionId', [middleware.sessionNam groupChatRouter.post('/setSubject/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.setSubject) groupChatRouter.post('/setPicture/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.setPicture) groupChatRouter.post('/deletePicture/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.deletePicture) +groupChatRouter.post('/getGroupMembershipRequests/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.getGroupMembershipRequests) +groupChatRouter.post('/approveGroupMembershipRequests/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.approveGroupMembershipRequests) +groupChatRouter.post('/rejectGroupMembershipRequests/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.rejectGroupMembershipRequests) /** * ================ diff --git a/swagger.json b/swagger.json index da59380..1d277ef 100644 --- a/swagger.json +++ b/swagger.json @@ -6157,6 +6157,7 @@ "tags": [ "Group Chat" ], + "summary": "Get the group", "description": "", "parameters": [ { @@ -6229,8 +6230,8 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" } } } @@ -6241,8 +6242,8 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" } } } @@ -6256,7 +6257,8 @@ "tags": [ "Group Chat" ], - "description": "", + "summary": "Add the participant(s)", + "description": "Add a list of participants by id to the group", "parameters": [ { "name": "sessionId", @@ -6328,8 +6330,24 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "contactIds": { + "type": "string", + "description": "Unique WhatsApp identifier for the contact", + "example": "6281288888887@c.us" + }, + "options": { + "type": "object", + "description": "Options for adding participants", + "example": { + "sleep": [ + 250, + 500 + ], + "comment": "" + } } } } @@ -6340,8 +6358,24 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "contactIds": { + "type": "string", + "description": "Unique WhatsApp identifier for the contact", + "example": "6281288888887@c.us" + }, + "options": { + "type": "object", + "description": "Options for adding participants", + "example": { + "sleep": [ + 250, + 500 + ], + "comment": "" + } } } } @@ -6355,7 +6389,8 @@ "tags": [ "Group Chat" ], - "description": "", + "summary": "Demote the participant(s)", + "description": "Demote participants by ids to regular users", "parameters": [ { "name": "sessionId", @@ -6427,8 +6462,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "contactIds": { + "type": "string", + "description": "Unique WhatsApp identifier for the contact", + "example": "6281288888887@c.us" } } } @@ -6439,8 +6479,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "contactIds": { + "type": "string", + "description": "Unique WhatsApp identifier for the contact", + "example": "6281288888887@c.us" } } } @@ -6454,7 +6499,8 @@ "tags": [ "Group Chat" ], - "description": "", + "summary": "Get the invite code", + "description": "Get the invite code for a specific group", "parameters": [ { "name": "sessionId", @@ -6526,8 +6572,8 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" } } } @@ -6538,8 +6584,8 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" } } } @@ -6553,6 +6599,7 @@ "tags": [ "Group Chat" ], + "summary": "Leave the group", "description": "", "parameters": [ { @@ -6625,8 +6672,8 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" } } } @@ -6637,8 +6684,8 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" } } } @@ -6652,7 +6699,8 @@ "tags": [ "Group Chat" ], - "description": "", + "summary": "Promote the participant(s)", + "description": "Promote participants by IDs to admins", "parameters": [ { "name": "sessionId", @@ -6724,8 +6772,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "contactIds": { + "type": "string", + "description": "Unique WhatsApp identifier for the contact", + "example": "6281288888887@c.us" } } } @@ -6736,8 +6789,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "contactIds": { + "type": "string", + "description": "Unique WhatsApp identifier for the contact", + "example": "6281288888887@c.us" } } } @@ -6751,7 +6809,8 @@ "tags": [ "Group Chat" ], - "description": "", + "summary": "Remove the participant(s)", + "description": "Remove a list of participants by ID to the group", "parameters": [ { "name": "sessionId", @@ -6823,8 +6882,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "contactIds": { + "type": "string", + "description": "Unique WhatsApp identifier for the contact", + "example": "6281288888887@c.us" } } } @@ -6835,8 +6899,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "contactIds": { + "type": "string", + "description": "Unique WhatsApp identifier for the contact", + "example": "6281288888887@c.us" } } } @@ -6850,7 +6919,8 @@ "tags": [ "Group Chat" ], - "description": "", + "summary": "Invalidate the invite code", + "description": "Invalidate the current group invite code and generates a new one", "parameters": [ { "name": "sessionId", @@ -6922,8 +6992,8 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" } } } @@ -6934,8 +7004,8 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" } } } @@ -6949,6 +7019,7 @@ "tags": [ "Group Chat" ], + "summary": "Update the group description", "description": "", "parameters": [ { @@ -7021,8 +7092,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "description": { + "type": "string", + "description": "Group description", + "example": "" } } } @@ -7033,8 +7109,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "description": { + "type": "string", + "description": "Group description", + "example": "" } } } @@ -7048,6 +7129,7 @@ "tags": [ "Group Chat" ], + "summary": "Update the info group settings", "description": "", "parameters": [ { @@ -7120,8 +7202,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "adminsOnly": { + "type": "boolean", + "description": "Enable or disable this option", + "example": true } } } @@ -7132,8 +7219,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "adminsOnly": { + "type": "boolean", + "description": "Enable or disable this option", + "example": true } } } @@ -7147,6 +7239,7 @@ "tags": [ "Group Chat" ], + "summary": "Update the message group settings", "description": "", "parameters": [ { @@ -7219,8 +7312,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "adminsOnly": { + "type": "boolean", + "description": "Enable or disable this option", + "example": true } } } @@ -7231,8 +7329,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "adminsOnly": { + "type": "boolean", + "description": "Enable or disable this option", + "example": true } } } @@ -7246,6 +7349,7 @@ "tags": [ "Group Chat" ], + "summary": "Update the group subject", "description": "", "parameters": [ { @@ -7318,8 +7422,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "subject": { + "type": "string", + "description": "Group subject", + "example": "" } } } @@ -7330,8 +7439,13 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "subject": { + "type": "string", + "description": "Group subject", + "example": "" } } } @@ -7345,6 +7459,7 @@ "tags": [ "Group Chat" ], + "summary": "Set the group picture", "description": "", "parameters": [ { @@ -7417,8 +7532,16 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "pictureMimeType": { + "type": "string", + "description": "MIME type of the attachment" + }, + "pictureData": { + "type": "string", + "description": "Base64-encoded data of the file" } } } @@ -7429,8 +7552,16 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "pictureMimeType": { + "type": "string", + "description": "MIME type of the attachment" + }, + "pictureData": { + "type": "string", + "description": "Base64-encoded data of the file" } } } @@ -7444,6 +7575,7 @@ "tags": [ "Group Chat" ], + "summary": "Delete the group picture", "description": "", "parameters": [ { @@ -7516,8 +7648,8 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" } } } @@ -7528,8 +7660,352 @@ "properties": { "chatId": { "type": "string", - "description": "Unique WhatsApp ID for the given Chat (either group or personal)", - "example": "6281288888888@c.us" + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + } + } + } + } + } + } + } + }, + "/groupChat/getGroupMembershipRequests/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "summary": "Get the membership requests", + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + } + } + } + } + } + } + } + }, + "/groupChat/approveGroupMembershipRequests/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "summary": "Approve membership request", + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "options": { + "type": "object", + "description": "Options for performing a membership request action", + "example": { + "requesterIds": [], + "sleep": [ + 250, + 500 + ] + } + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "options": { + "type": "object", + "description": "Options for performing a membership request action", + "example": { + "requesterIds": [], + "sleep": [ + 250, + 500 + ] + } + } + } + } + } + } + } + } + }, + "/groupChat/rejectGroupMembershipRequests/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "summary": "Reject membership request", + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "options": { + "type": "object", + "description": "Options for performing a membership request action", + "example": { + "requesterIds": [], + "sleep": [ + 250, + 500 + ] + } + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique WhatsApp id for the given chat group", + "example": "XXXXXXXXXX@g.us" + }, + "options": { + "type": "object", + "description": "Options for performing a membership request action", + "example": { + "requesterIds": [], + "sleep": [ + 250, + 500 + ] + } } } }