Перейти к основному содержимому
🎁 Черная Пятница 🎁 Экономьте по-крупному на GamePush с 28 ноября по 5 декабря. Купить сейчас

Обратная связь

Обзор

С GamePush вы можете организовать систему обратной связи от игроков. Игроки могут отправлять фидбеки (ошибки, жалобы, предложения, отзывы) с прикрепленными файлами (скриншоты, видео), а вы сможете просматривать их в админ-панели и отвечать на них через чат.

Фидбеки автоматически отправляются как разработчику игры, так и платформе (если она партнерская), что позволяет оперативно реагировать на проблемы игроков.

Пример

Пример окна обратной связи в игре

Работа в панели управления

В разделе "Обратная связь" вашего проекта вы можете:

  • Просматривать список фидбеков от игроков
  • Видеть с какой площадки создали обращение
  • Видеть привязанного игрока для оперативного просмотра
  • Общаться с площадкой и игроком в чате обращения
  • Управлять статусом фидбека: устанавливать решенный / нерешенный статус или в работе
tip

При общении в чате вы можете скрывать для игрока ваше сообщение. Его будете видеть только вы и площадка.

Отправить фидбек

+1 Request

Отправить фидбек с текстом и прикрепленными файлами (скриншоты, видео). Фидбек автоматически будет отправлен разработчику игры и платформе (если она партнерская).

const feedback = await gp.feedbacks.send({
// Тип фидбека: "ERROR" | "COMPLAINT" | "SUGGESTION" | "REVIEW"
type: 'ERROR',
// Текст фидбека
text: 'Эти нубоки не как все нубоки',
// Прикрепленные файлы, загружайте как показано в разделе "Файлы"
files: ['https://example.com/image.png', 'https://example.com/video.mp4'],
// User-Agent (необязательно, определяется автоматически)
userAgent: 'Custom User Agent',
});
tip

Для загрузки файлов воспользуйтесь модулем "Файлы". Загрузите файл и получите ссылку, укажите ссылку в обращении.

Метод возвращает данные фидбека:

const feedback = await gp.feedbacks.send({
type: 'ERROR',
text: 'Эти нубоки не как все нубоки',
files: ['https://example.com/image.png'],
});

/**
* ID фидбека
* @type {number}
*/
feedback.id;

/**
* Тип фидбека
* @type {"ERROR" | "COMPLAINT" | "SUGGESTION" | "REVIEW"}
*/
feedback.type;

/**
* Текст фидбека
* @type {string}
*/
feedback.text;

/**
* Статус фидбека
* @type {"NEW" | "IN_PROGRESS" | "RESOLVED" | "UNRESOLVED" | "REQUIRES_ACTION"}
*/
feedback.status;

/**
* Сообщения в фидбеке
* @type {Array<Message>}
*/
feedback.messages;

События отправки фидбека:

// Фидбек успешно отправлен
gp.feedbacks.on('createFeedback', (feedback) => {});

/**
* Ошибка при отправке фидбека
* @type {
* 'player_not_found' - аккаунт игрока еще не создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'empty_text' - не указан текст фидбека
* 'empty_type' - не указан тип фидбека
* 'invalid_type' - неверный тип фидбека
* 'origin_not_allowed' - запрещенный origin
* 'internal_error' - что-то пошло не так
* other - любая ошибка не связанная с сервисом
* }
*/
gp.feedbacks.on('error:createFeedback', (error) => {});

Открыть список фидбеков

+1 Request

Открыть готовое окно со списком фидбеков с кнопкой "Написать нам". Можно отфильтровать по типу и статусу.

// Открыть все фидбеки
await gp.feedbacks.open();

// Открыть фидбеки с фильтрацией
await gp.feedbacks.open({
// Тип фидбека (необязательно)
type: 'ERROR',
// Статус фидбека (необязательно)
status: 'IN_PROGRESS',
});

События открытия окна:

// Окно открыто
gp.feedbacks.on('openFeedbacksList', () => {});

// Ошибка при открытии окна
gp.feedbacks.on('error:openFeedbacksList', (error) => {});

Открыть определенный фидбек

+1 Request

Открыть готовое окно с конкретным фидбеком и его сообщениями.

await gp.feedbacks.openFeedback({
// ID фидбека (строка)
feedbackId: 'xyzv-14444-hexa-151p',
});

Получить список фидбеков

+1 Request

Получить список фидбеков для отображения в своей интерфейсе. Можно отфильтровать по типу и статусу.

// Получить все фидбеки
const result = await gp.feedbacks.fetch();

// Получить фидбеки с фильтрацией
const result = await gp.feedbacks.fetch({
// Лимит количества фидбеков (по умолчанию 20)
limit: 20,
// Тип фидбека (необязательно)
type: 'ERROR',
// Статус фидбека (необязательно)
status: 'IN_PROGRESS',
});

/**
* Список фидбеков
* @type {Array<Feedback>}
*/
const myFeedbacks = result.items;

/**
* Можно ли загрузить еще фидбеков
* @type {boolean}
*/
const canLoadMore = result.canLoadMore;

myFeedbacks.forEach((feedback) => {
// ID фидбека
feedback.id;

// Тип фидбека
feedback.type;

// Текст фидбека
feedback.text;

// Статус фидбека
feedback.status;

// Сообщения в фидбеке
feedback.messages.forEach((message) => {
// ID сообщения
message.id;

// Текст сообщения
message.text;

// Прикрепленные файлы
message.attachments;

// Автор сообщения: "system" | "player"
message.author;

// ID фидбека
message.feedbackId;

// Дата создания
message.createdAt;
});
});

События получения списка фидбеков:

// Список фидбеков успешно получен
gp.feedbacks.on('fetchFeedbacks', (result) => {
// result.items - массив фидбеков
// result.canLoadMore - можно ли загрузить еще
});

/**
* Ошибка при получении списка фидбеков
* @type {
* 'player_not_found' - аккаунт игрока еще не создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'origin_not_allowed' - запрещенный origin
* 'internal_error' - что-то пошло не так
* other - любая ошибка не связанная с сервисом
* }
*/
gp.feedbacks.on('error:fetchFeedbacks', (error) => {});

Загрузить еще

+1 Request

Загрузить следующую порцию фидбеков для пагинации. Используется после метода fetch.

// Загрузить еще фидбеки с теми же фильтрами
const result = await gp.feedbacks.fetchMore({
// Лимит количества фидбеков (по умолчанию 20)
limit: 20,
// Тип фидбека (необязательно)
type: 'ERROR',
// Статус фидбека (необязательно)
status: 'IN_PROGRESS',
});

/**
* Список фидбеков
* @type {Array<Feedback>}
*/
const moreFeedbacks = result.items;

/**
* Можно ли загрузить еще фидбеков
* @type {boolean}
*/
const canLoadMore = result.canLoadMore;

События загрузки дополнительных фидбеков:

// Дополнительные фидбеки успешно получены
gp.feedbacks.on('fetchMoreFeedbacks', (result) => {
// result.items - массив фидбеков
// result.canLoadMore - можно ли загрузить еще
});

/**
* Ошибка при загрузке дополнительных фидбеков
* @type {
* 'player_not_found' - аккаунт игрока еще не создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'origin_not_allowed' - запрещенный origin
* 'internal_error' - что-то пошло не так
* other - любая ошибка не связанная с сервисом
* }
*/
gp.feedbacks.on('error:fetchMoreFeedbacks', (error) => {});

Отправить сообщение в чат

+1 Request

Отправить сообщение в чат фидбека. Сообщение будет видно разработчику и платформе (если она партнерская).

const message = await gp.feedbacks.sendMessage({
// ID фидбека
feedbackId: '352352',
// Текст сообщения
text: 'К сожалению, проблема осталась :(',
// Прикрепленные файлы (необязательно, File объекты)
files: [],
});

Метод возвращает данные отправленного сообщения:

const message = await gp.feedbacks.sendMessage({
feedbackId: '352352',
text: 'К сожалению, проблема осталась :(',
files: [],
});

// message.id - ID сообщения
// message.text - текст сообщения
// message.feedbackId - ID фидбека
// message.author - автор сообщения
// message.attachments - прикрепленные файлы

События отправки сообщения:

// Сообщение успешно отправлено
gp.feedbacks.on('sendMessage', (feedback) => {});

/**
* Ошибка при отправке сообщения
* @type {
* 'player_not_found' - аккаунт игрока еще не создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'feedback_not_found' - фидбек не найден
* 'empty_text' - не указан текст сообщения
* 'origin_not_allowed' - запрещенный origin
* 'internal_error' - что-то пошло не так
* other - любая ошибка не связанная с сервисом
* }
*/
gp.feedbacks.on('error:sendMessage', (error) => {});

Подписка на события

FREE

Подписаться на уведомления в реальном времени о событиях обратной связи.

tip

Должна быть включена опция "Разрешить игрокам подключаться к онлайн службе" в разделе Каналы вашего проекта.

Новое сообщение в фидбеке

gp.feedbacks.on('event:feedbackMessage', (message) => {
// ID сообщения
message.id;

// Текст сообщения
message.text;

// Прикрепленные файлы
message.attachments;

// Автор сообщения: "system" | "player"
message.author;

// ID фидбека
message.feedbackId;

// Дата создания
message.createdAt;
});

Фидбек создан

gp.feedbacks.on('event:feedbackCreated', (feedback) => {
// ID фидбека
feedback.id;
// Тип фидбека
feedback.type;
// Текст фидбека
feedback.text;
// Статус фидбека
feedback.status;
});

Статус фидбека обновлен

// Статус фидбека обновлен разработчиком
gp.feedbacks.on('event:feedbackStatusUpdated', (feedback) => {
// ID фидбека
feedback.id;
// Новый статус фидбека
feedback.status;
});

// Статус фидбека обновлен платформой
gp.feedbacks.on('event:feedbackPlatformStatusUpdated', (feedback) => {
// ID фидбека
feedback.id;
// Новый статус фидбека
feedback.status;
});

Типы

Поля фидбека

ПолеТипОписание
idnumberID фидбека
type"ERROR" | "COMPLAINT" | "SUGGESTION" | "REVIEW"Тип фидбека
textstringТекст фидбека
status"NEW" | "IN_PROGRESS" | "RESOLVED" | "UNRESOLVED"Статус фидбека
messagesArray<Message>Сообщения в фидбеке
playerIdnumberID игрока
projectIdnumberID проекта
platformIdnumberID платформы
createdAtstringДата создания
updatedAtstringДата обновления

Типы фидбеков

  • ERROR - Ошибка
  • COMPLAINT - Жалоба
  • SUGGESTION - Предложение
  • REVIEW - Отзыв

Статусы фидбеков

  • NEW - Новый
  • IN_PROGRESS - В работе
  • RESOLVED - Решен
  • UNRESOLVED - Не решен

Поля сообщения

ПолеТипОписание
idnumberID сообщения
textstringТекст сообщения
attachmentsArray<string>Прикрепленные файлы (URL-ы)
author"PLAYER" | "PLATFORM" | "MODERATOR" | "ADMIN"Автор сообщения
feedbackIdnumberID фидбека
createdAtstringДата создания

Авторы сообщения

  • PLAYER - Игрок
  • PLATFORM - Представитель площадки
  • MODERATOR - Представитель нашего сервиса
  • ADMIN - Разработчик игры

Вебхуки

Вы можете настроить вебхуки для получения уведомлений о событиях обратной связи. Подробнее о настройке вебхуков читайте в разделе Вебхуки.

События вебхуков

Тип событияОписание
PlayerSendFeedbackИгрок отправил фидбек
PlayerSendFeedbackMessageИгрок отправил сообщение в фидбек
PlatformSendFeedbackMessageПлатформа отправила сообщение в фидбек
AdminSendFeedbackMessageРазработчик отправил сообщение в фидбек
FeedbackStatusChangedСтатус фидбека изменился

Пример данных вебхука

{
"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": "Эти нубоки не как все нубоки",
"status": "NEW",
"projectId": 4,
"platformId": 1
},
"time": "2024-04-26T11:34:23.415923998Z"
}

Оставайтесь на связи

С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.

Сообщество GamePush в Telegram: @gs_community.

Для ваших обращений e-mail: official@gamepush.com

Желаем вам успехов!