Skip to main content
🎁 Black Friday 🎁 Save big on GamePush between Nov 28 - Dec 5. BUY NOW

Feedbacks

Overview​

With GamePush, you can set up a feedback system from players. Players can send feedbacks (bugs, complaints, suggestions, reviews) with attached files (screenshots, videos), and you can view them in the admin panel and respond to them via chat.

Feedbacks are automatically sent to both the game developer and the platform (if it's a partner), allowing you to respond quickly to player issues.

Example​

Example of feedback window in game

Working in the Admin Panel​

In the "Feedback" section of your project, you can:

  • View the list of feedbacks from players
  • See from which platform the feedback was created
  • See the linked player for quick review
  • Communicate with the platform and player in the feedback chat
  • Manage feedback status: set resolved / unresolved status or in progress
tip

When chatting, you can hide your message from the player. Only you and the platform will see it.

Send Feedback​

+1Β Request

Send feedback with text and attached files (screenshots, videos). The feedback will automatically be sent to the game developer and the platform (if it's a partner).

const feedback = await gp.feedbacks.send({
// Feedback type: "ERROR" | "COMPLAINT" | "SUGGESTION" | "REVIEW"
type: 'ERROR',
// Feedback text
text: 'These noobs are not like all other noobs',
// Attached files, upload as shown in the "Files" section
files: ['https://example.com/image.png', 'https://example.com/video.mp4'],
// User-Agent (optional, determined automatically)
userAgent: 'Custom User Agent',
});
tip

To upload files, use the "Files" module. Upload the file and get a link, specify the link in the feedback.

The method returns feedback data:

const feedback = await gp.feedbacks.send({
type: 'ERROR',
text: 'These noobs are not like all other noobs',
files: ['https://example.com/image.png'],
});

/**
* Feedback ID
* @type {number}
*/
feedback.id;

/**
* Feedback type
* @type {"ERROR" | "COMPLAINT" | "SUGGESTION" | "REVIEW"}
*/
feedback.type;

/**
* Feedback text
* @type {string}
*/
feedback.text;

/**
* Feedback status
* @type {"NEW" | "IN_PROGRESS" | "RESOLVED" | "UNRESOLVED" | "REQUIRES_ACTION"}
*/
feedback.status;

/**
* Messages in feedback
* @type {Array<Message>}
*/
feedback.messages;

Send feedback events:

// Feedback successfully sent
gp.feedbacks.on('createFeedback', (feedback) => {});

/**
* Error sending feedback
* @type {
* 'player_not_found' - player account has not been created yet
* 'project_not_found' - game ID does not match or game does not exist
* 'empty_text' - feedback text not specified
* 'empty_type' - feedback type not specified
* 'invalid_type' - invalid feedback type
* 'origin_not_allowed' - forbidden origin
* 'internal_error' - something went wrong
* other - any error not related to the service
* }
*/
gp.feedbacks.on('error:createFeedback', (error) => {});

Open Feedbacks List​

+1Β Request

Open a ready-made window with a list of feedbacks with a "Write to us" button. Can be filtered by type and status.

// Open all feedbacks
await gp.feedbacks.open();

// Open feedbacks with filtering
await gp.feedbacks.open({
// Feedback type (optional)
type: 'ERROR',
// Feedback status (optional)
status: 'IN_PROGRESS',
});

Window open events:

// Window opened
gp.feedbacks.on('openFeedbacksList', () => {});

// Error opening window
gp.feedbacks.on('error:openFeedbacksList', (error) => {});

Open Specific Feedback​

+1Β Request

Open a ready-made window with a specific feedback and its messages.

await gp.feedbacks.openFeedback({
// Feedback ID (string)
feedbackId: 'xyzv-14444-hexa-151p',
});

Fetch Feedbacks List​

+1Β Request

Get a list of feedbacks to display in your own interface. Can be filtered by type and status.

// Get all feedbacks
const result = await gp.feedbacks.fetch();

// Get feedbacks with filtering
const result = await gp.feedbacks.fetch({
// Limit number of feedbacks (default 20)
limit: 20,
// Feedback type (optional)
type: 'ERROR',
// Feedback status (optional)
status: 'IN_PROGRESS',
});

/**
* List of feedbacks
* @type {Array<Feedback>}
*/
const myFeedbacks = result.items;

/**
* Can load more feedbacks
* @type {boolean}
*/
const canLoadMore = result.canLoadMore;

myFeedbacks.forEach((feedback) => {
// Feedback ID
feedback.id;

// Feedback type
feedback.type;

// Feedback text
feedback.text;

// Feedback status
feedback.status;

// Messages in feedback
feedback.messages.forEach((message) => {
// Message ID
message.id;

// Message text
message.text;

// Attached files
message.attachments;

// Message author: "system" | "player"
message.author;

// Feedback ID
message.feedbackId;

// Created date
message.createdAt;
});
});

Fetch feedbacks list events:

// Feedbacks list successfully fetched
gp.feedbacks.on('fetchFeedbacks', (result) => {
// result.items - array of feedbacks
// result.canLoadMore - can load more
});

/**
* Error fetching feedbacks list
* @type {
* 'player_not_found' - player account has not been created yet
* 'project_not_found' - game ID does not match or game does not exist
* 'origin_not_allowed' - forbidden origin
* 'internal_error' - something went wrong
* other - any error not related to the service
* }
*/
gp.feedbacks.on('error:fetchFeedbacks', (error) => {});

Fetch More​

+1Β Request

Load the next batch of feedbacks for pagination. Used after the fetch method.

// Load more feedbacks with the same filters
const result = await gp.feedbacks.fetchMore({
// Limit number of feedbacks (default 20)
limit: 20,
// Feedback type (optional)
type: 'ERROR',
// Feedback status (optional)
status: 'IN_PROGRESS',
});

/**
* List of feedbacks
* @type {Array<Feedback>}
*/
const moreFeedbacks = result.items;

/**
* Can load more feedbacks
* @type {boolean}
*/
const canLoadMore = result.canLoadMore;

Fetch more feedbacks events:

// Additional feedbacks successfully fetched
gp.feedbacks.on('fetchMoreFeedbacks', (result) => {
// result.items - array of feedbacks
// result.canLoadMore - can load more
});

/**
* Error fetching additional feedbacks
* @type {
* 'player_not_found' - player account has not been created yet
* 'project_not_found' - game ID does not match or game does not exist
* 'origin_not_allowed' - forbidden origin
* 'internal_error' - something went wrong
* other - any error not related to the service
* }
*/
gp.feedbacks.on('error:fetchMoreFeedbacks', (error) => {});

Send Message to Chat​

+1Β Request

Send a message to the feedback chat. The message will be visible to the developer and the platform (if it's a partner).

const message = await gp.feedbacks.sendMessage({
// Feedback ID
feedbackId: '352352',
// Message text
text: 'Unfortunately, the problem remains :(',
// Attached files (optional, File objects)
files: [],
});

The method returns sent message data:

const message = await gp.feedbacks.sendMessage({
feedbackId: '352352',
text: 'Unfortunately, the problem remains :(',
files: [],
});

// message.id - Message ID
// message.text - message text
// message.feedbackId - feedback ID
// message.author - message author
// message.attachments - attached files

Send message events:

// Message successfully sent
gp.feedbacks.on('sendMessage', (feedback) => {});

/**
* Error sending message
* @type {
* 'player_not_found' - player account has not been created yet
* 'project_not_found' - game ID does not match or game does not exist
* 'feedback_not_found' - feedback not found
* 'empty_text' - message text not specified
* 'origin_not_allowed' - forbidden origin
* 'internal_error' - something went wrong
* other - any error not related to the service
* }
*/
gp.feedbacks.on('error:sendMessage', (error) => {});

Subscribe to Events​

FREE

Subscribe to real-time notifications about feedback events.

tip

The "Allow players to connect to online service" option must be enabled in the Channels section of your project.

New Message in Feedback​

gp.feedbacks.on('event:feedbackMessage', (message) => {
// Message ID
message.id;

// Message text
message.text;

// Attached files
message.attachments;

// Message author: "system" | "player"
message.author;

// Feedback ID
message.feedbackId;

// Created date
message.createdAt;
});

Feedback Created​

gp.feedbacks.on('event:feedbackCreated', (feedback) => {
// Feedback ID
feedback.id;
// Feedback type
feedback.type;
// Feedback text
feedback.text;
// Feedback status
feedback.status;
});

Feedback Status Updated​

// Feedback status updated by developer
gp.feedbacks.on('event:feedbackStatusUpdated', (feedback) => {
// Feedback ID
feedback.id;
// New feedback status
feedback.status;
});

// Feedback status updated by platform
gp.feedbacks.on('event:feedbackPlatformStatusUpdated', (feedback) => {
// Feedback ID
feedback.id;
// New feedback status
feedback.status;
});

Types​

Feedback Fields​

FieldTypeDescription
idnumberFeedback ID
type"ERROR" | "COMPLAINT" | "SUGGESTION" | "REVIEW"Feedback type
textstringFeedback text
status"NEW" | "IN_PROGRESS" | "RESOLVED" | "UNRESOLVED"Feedback status
messagesArray<Message>Messages in feedback
playerIdnumberPlayer ID
projectIdnumberProject ID
platformIdnumberPlatform ID
createdAtstringCreated date
updatedAtstringUpdated date

Feedback Types​

  • ERROR - Error
  • COMPLAINT - Complaint
  • SUGGESTION - Suggestion
  • REVIEW - Review

Feedback Statuses​

  • NEW - New
  • IN_PROGRESS - In progress
  • RESOLVED - Resolved
  • UNRESOLVED - Unresolved

Message Fields​

FieldTypeDescription
idnumberMessage ID
textstringMessage text
attachmentsArray<string>Attached files (URLs)
author"PLAYER" | "PLATFORM" | "MODERATOR" | "ADMIN"Message author
feedbackIdnumberFeedback ID
createdAtstringCreated date

Message Authors​

  • PLAYER - Player
  • PLATFORM - Platform representative
  • MODERATOR - Our service representative
  • ADMIN - Game developer

Webhooks​

You can configure webhooks to receive notifications about feedback events. For more information on configuring webhooks, see the Webhooks section.

Webhook Events​

Event TypeDescription
PlayerSendFeedbackPlayer sent feedback
PlayerSendFeedbackMessagePlayer sent message to feedback
PlatformSendFeedbackMessagePlatform sent message to feedback
AdminSendFeedbackMessageDeveloper sent message to feedback
FeedbackStatusChangedFeedback status changed

Webhook Data Example​

{
"event": "PlayerSendFeedback",
"player": {
"id": 1820283,
"name": "Player Name",
"avatar": "",
"projectId": 4,
"credentials": "",
"platformType": "VK",
"active": true,
"removed": false,
"test": false,
"modifiedAt": "2024-04-26T11:34:23.415923998Z"
},
"result": {
"__typename": "Feedback",
"id": 14444,
"type": "ERROR",
"text": "These noobs are not like all other noobs",
"status": "NEW",
"projectId": 4,
"platformId": 1
},
"time": "2024-04-26T11:34:23.415923998Z"
}

Stay in Touch​

Other documents of this chapter available Here. To get started, welcome to the Tutorials chapter.

GamePush Community Telegram: @gs_community.

For your suggestions e-mail: official@gamepush.com

We Wish you Success!