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β
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
When chatting, you can hide your message from the player. Only you and the platform will see it.
Send Feedbackβ
+1Β RequestSend 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).
- JavaScript
- Unity
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',
});
FeedbackData data = new FeedbackData
{
// Feedback type: "ERROR" | "COMPLAINT" | "SUGGESTION" | "REVIEW"
type = "ERROR",
// Feedback text
text = "These noobs are not like all other noobs",
// Attached files (URLs)
files = new string[] { "https://example.com/image.png", "https://example.com/video.mp4" }
};
GP_Feedbacks.Send(data, OnSendFeedback, OnSendFeedbackError);
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:
- JavaScript
- Unity
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;
private void OnSendFeedback(FeedbackData feedback)
{
Debug.Log("ID: " + feedback.id);
Debug.Log("Type: " + feedback.type);
Debug.Log("Text: " + feedback.text);
Debug.Log("Status: " + feedback.status);
}
Send feedback events:
- JavaScript
- Unity
// 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) => {});
private void OnSendFeedbackError(string error)
{
Debug.Log("ERROR: " + error);
}
Open Feedbacks Listβ
+1Β RequestOpen a ready-made window with a list of feedbacks with a "Write to us" button. Can be filtered by type and status.
- JavaScript
- Unity
// 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',
});
// Open all feedbacks
GP_Feedbacks.Open();
// Open feedbacks with filtering
GP_Feedbacks.Open(
type: "ERROR",
status: "IN_PROGRESS"
);
Window open events:
- JavaScript
- Unity
// Window opened
gp.feedbacks.on('openFeedbacksList', () => {});
// Error opening window
gp.feedbacks.on('error:openFeedbacksList', (error) => {});
GP_Feedbacks.Open(OnOpenFeedbacksList, OnOpenFeedbacksListError);
private void OnOpenFeedbacksList() => Debug.Log("ON OPEN FEEDBACKS LIST");
private void OnOpenFeedbacksListError(string error) => Debug.Log("ON OPEN FEEDBACKS LIST: ERROR: " + error);
Open Specific Feedbackβ
+1Β RequestOpen a ready-made window with a specific feedback and its messages.
- JavaScript
- Unity
await gp.feedbacks.openFeedback({
// Feedback ID (string)
feedbackId: 'xyzv-14444-hexa-151p',
});
GP_Feedbacks.OpenFeedback("14444", OnOpenFeedback, OnOpenFeedbackError);
private void OnOpenFeedback() => Debug.Log("ON OPEN FEEDBACK");
private void OnOpenFeedbackError(string error) => Debug.Log("ON OPEN FEEDBACK: ERROR: " + error);
Fetch Feedbacks Listβ
+1Β RequestGet a list of feedbacks to display in your own interface. Can be filtered by type and status.
- JavaScript
- Unity
// 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;
});
});
// Get all feedbacks
GP_Feedbacks.Fetch(OnFetchFeedbacks, OnFetchFeedbacksError);
// Get feedbacks with filtering
GP_Feedbacks.Fetch(
type: "ERROR",
status: "IN_PROGRESS",
OnFetchFeedbacks,
OnFetchFeedbacksError
);
private void OnFetchFeedbacks(FeedbackData[] feedbacks)
{
foreach (FeedbackData feedback in feedbacks)
{
Debug.Log("ID: " + feedback.id);
Debug.Log("Type: " + feedback.type);
Debug.Log("Text: " + feedback.text);
Debug.Log("Status: " + feedback.status);
foreach (MessageData message in feedback.messages)
{
Debug.Log("Message ID: " + message.id);
Debug.Log("Message Text: " + message.text);
Debug.Log("Message Author: " + message.author);
}
}
}
Fetch feedbacks list events:
- JavaScript
- Unity
// 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) => {});
private void OnFetchFeedbacksError(string error)
{
Debug.Log("ERROR: " + error);
}
Fetch Moreβ
+1Β RequestLoad the next batch of feedbacks for pagination. Used after the fetch method.
- JavaScript
- Unity
// 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;
GP_Feedbacks.FetchMore(
limit: 20,
type: "ERROR",
status: "IN_PROGRESS",
OnFetchMoreFeedbacks,
OnFetchMoreFeedbacksError
);
private void OnFetchMoreFeedbacks(FeedbackData[] feedbacks)
{
foreach (FeedbackData feedback in feedbacks)
{
Debug.Log("ID: " + feedback.id);
}
}
Fetch more feedbacks events:
- JavaScript
- Unity
// 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) => {});
private void OnFetchMoreFeedbacksError(string error)
{
Debug.Log("ERROR: " + error);
}
Send Message to Chatβ
+1Β RequestSend a message to the feedback chat. The message will be visible to the developer and the platform (if it's a partner).
- JavaScript
- Unity
const message = await gp.feedbacks.sendMessage({
// Feedback ID
feedbackId: '352352',
// Message text
text: 'Unfortunately, the problem remains :(',
// Attached files (optional, File objects)
files: [],
});
MessageData data = new MessageData
{
// Feedback ID
feedbackId = "352352",
// Message text
text = "Unfortunately, the problem remains :(",
// Attached files (optional)
files = new string[] { }
};
GP_Feedbacks.SendMessage(data, OnSendMessage, OnSendMessageError);
The method returns sent message data:
- JavaScript
- Unity
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
private void OnSendMessage(MessageData message)
{
Debug.Log("Message ID: " + message.id);
Debug.Log("Message Text: " + message.text);
Debug.Log("Feedback ID: " + message.feedbackId);
}
Send message events:
- JavaScript
- Unity
// 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) => {});
private void OnSendMessageError(string error)
{
Debug.Log("ERROR: " + error);
}
Subscribe to Eventsβ
FREESubscribe to real-time notifications about feedback events.
The "Allow players to connect to online service" option must be enabled in the Channels section of your project.
New Message in Feedbackβ
- JavaScript
- Unity
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;
});
private void OnEnable()
{
GP_Feedbacks.OnFeedbackMessage += OnFeedbackMessage;
}
private void OnDisable()
{
GP_Feedbacks.OnFeedbackMessage -= OnFeedbackMessage;
}
private void OnFeedbackMessage(MessageData message)
{
Debug.Log("Message ID: " + message.id);
Debug.Log("Message Text: " + message.text);
Debug.Log("Message Author: " + message.author);
Debug.Log("Feedback ID: " + message.feedbackId);
}
Feedback Createdβ
- JavaScript
- Unity
gp.feedbacks.on('event:feedbackCreated', (feedback) => {
// Feedback ID
feedback.id;
// Feedback type
feedback.type;
// Feedback text
feedback.text;
// Feedback status
feedback.status;
});
private void OnEnable()
{
GP_Feedbacks.OnFeedbackCreated += OnFeedbackCreated;
}
private void OnDisable()
{
GP_Feedbacks.OnFeedbackCreated -= OnFeedbackCreated;
}
private void OnFeedbackCreated(FeedbackData feedback)
{
Debug.Log("Feedback Created ID: " + feedback.id);
}
Feedback Status Updatedβ
- JavaScript
- Unity
// 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;
});
private void OnEnable()
{
GP_Feedbacks.OnFeedbackStatusUpdated += OnFeedbackStatusUpdated;
GP_Feedbacks.OnFeedbackPlatformStatusUpdated += OnFeedbackPlatformStatusUpdated;
}
private void OnDisable()
{
GP_Feedbacks.OnFeedbackStatusUpdated -= OnFeedbackStatusUpdated;
GP_Feedbacks.OnFeedbackPlatformStatusUpdated -= OnFeedbackPlatformStatusUpdated;
}
private void OnFeedbackStatusUpdated(FeedbackData feedback)
{
Debug.Log("Feedback Status Updated ID: " + feedback.id);
Debug.Log("New Status: " + feedback.status);
}
private void OnFeedbackPlatformStatusUpdated(FeedbackData feedback)
{
Debug.Log("Feedback Platform Status Updated ID: " + feedback.id);
Debug.Log("New Status: " + feedback.status);
}
Typesβ
Feedback Fieldsβ
| Field | Type | Description |
|---|---|---|
id | number | Feedback ID |
type | "ERROR" | "COMPLAINT" | "SUGGESTION" | "REVIEW" | Feedback type |
text | string | Feedback text |
status | "NEW" | "IN_PROGRESS" | "RESOLVED" | "UNRESOLVED" | Feedback status |
messages | Array<Message> | Messages in feedback |
playerId | number | Player ID |
projectId | number | Project ID |
platformId | number | Platform ID |
createdAt | string | Created date |
updatedAt | string | Updated date |
Feedback Typesβ
ERROR- ErrorCOMPLAINT- ComplaintSUGGESTION- SuggestionREVIEW- Review
Feedback Statusesβ
NEW- NewIN_PROGRESS- In progressRESOLVED- ResolvedUNRESOLVED- Unresolved
Message Fieldsβ
| Field | Type | Description |
|---|---|---|
id | number | Message ID |
text | string | Message text |
attachments | Array<string> | Attached files (URLs) |
author | "PLAYER" | "PLATFORM" | "MODERATOR" | "ADMIN" | Message author |
feedbackId | number | Feedback ID |
createdAt | string | Created date |
Message Authorsβ
PLAYER- PlayerPLATFORM- Platform representativeMODERATOR- Our service representativeADMIN- 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 Type | Description |
|---|---|
PlayerSendFeedback | Player sent feedback |
PlayerSendFeedbackMessage | Player sent message to feedback |
PlatformSendFeedbackMessage | Platform sent message to feedback |
AdminSendFeedbackMessage | Developer sent message to feedback |
FeedbackStatusChanged | Feedback 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!