Работа с сервером

Если вы используете встроенный бэкенд, вам необходимо определить токен с помощью свойства token после успешной авторизации пользователя.

Загрузка данных

Chat ожидает бэкенд сервер для загрузки чатов, пользователей и сообщений. Передать ссылку на сервер можно с помощью параметра url:

webix.ui({
    view: "chat",
    url:"http://localhost:3200/"
});

Chat использует WebSocket протокол.

Вы можете скачать готовый бэкенд для Chat здесь.

Если у вас нет сервера, вы можете переопределить методы бэкенд сервиса и предоставлять клиентские данные в виде промиса.

Сервис Backend

Сервис Backend это серверная модель, у которой есть методы для запросов на сервер. Они вызываются сервисом Operations при необходимости загрузки или сохранения данных.

Ниже вы найдёте полный список методов.

Как кастомизировать модель Backend

Чтобы менять запросы, получать и обрабатывать ответные данные вы можете:

  • создать свой бэкенд сервис и наследовать его от сервиса по умолчанию;
  • определять и переопределять методы;
  • использовать произвольный бэкенд сервис через свойство override.
class MyBackend extends chat.services.Backend {
    // новые методы 
}
 
webix.ui({
    view: "chat",
    url:"http://localhost:3200/",
    override: new Map([[chat.services.Backend, MyBackend]]),
});

Обработка клиентских данных

Если вы хотите передать в Chat клиентские данные, вам необходимо вернуть промис внутри следующих методов:

class MyBackend extends chat.services.Backend {
  // вы можете перехватывать и кастомизировать серверные запросы
  messages(chatId) {
    return Promise.resolve([
      {
        user_id: 1,
        text: "[Ваше сообщение] Работа в режиме offline",
      }
    ]);
  }
  // other methods
}

Related sample:  Chat: Local Data

Методы сервиса Backend

Помните, что операции по созданию чата/сообщения, редактированию или удалению осуществляются от лица текущего пользователя.

В этой секции вы найдёте детальное описание следующих методов:

users()

Вызывается при инициализации виджета.

Returns: промис с массивом пользователей:

[
  {
    avatar: "remote/avatars/1.jpg",
    email: "alex@brown.com",
    id: 1,
    name: "Alex Brown",
    status: 2
  },
  { .. }
]

chats()

Метод загружает массив чатов.

Returns: промис с массивом чатов:

[
  {
    avatar: "remote/avatars/photo.jpg",
    date: new Date(),
    direct_id: 17,
    id: 52,
    message: "Выпьем чаю с малиновым вареньем?",
    name: "PM: Jean Catwright",
    unread_count: 0,
    users: [3, 17]
  },
  { .. }
]

addChat(uid)

Метод вызывается при создании нового приватного чата.

Parameters:

  • uid (number) - ID пользователя, с которым текущий пользователь создаёт чат.

Returns: промис с объектом данных созданного чата:

{
  avatar: "remote/avatars/pm.jpg",
  date: new Date(),
  direct_id: 17,
  id: 52,
  message: "Ну и гадость эта ваша заливная рыба!"
  name: "Дом на Новокузнецкой",
  unread_count: 1,
  users: [3, 17]
}

messages(cid)

Метод вызывается при входе пользователя в чат.

Parameters:

  • cid (number) - ID чата, с которого необходимо получить сообщения.

Returns: промис с массивом сообщений:

[
 {
   chat_id: 6,
   date: new Date(),
   id: 19,
   text: "И всё-таки она вертится!",
   user_id: 2
 }
]

addMessage(cid, text, origin)

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

Parameters:

  • cid (number) - ID чата
  • text (string) - текст сообщения
  • origin (number) - клиентское ID сообщения.

Returns: объект сообщения:

{
  chat_id: 31,
  date: new Date(),
  id: 75,
  text: "Глаголом жги сердца людей!",
  user_id: 3
}

removeMessage(messageId)

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

Parameters:

  • messageId (number) - ID сообщения.

Returns: объект сообщения:

{
  chat_id: 31,
  date: new Date(),
  id: 71,
  text: "",
  user_id: 0
}

updateMessage(messageId, text)

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

Parameters:

  • messageId (number) - ID сообщения
  • text (string) - текст сообщения.

Returns: объект сообщения:

{
  chat_id: 31,
  date: new Date(),
  id: 76,
  text: "А судьи кто?",
  user_id: 3
}

startCall(userId, chatId)

Начинает звонок с указанным пользователем.

Parameters

  • userId (number) - ID звонящего
  • chatId (number) - ID пользователя, которому звонят.

Returns: объект с данными о звонке.

{
  devices: [30, 0],
  id: 778,
  start: null,
  status: 1,
  users: [1, 0]
}

updateCall(id, value)

Вызывается, когда звонок принят или отклонён.

Parameters:

  • id (number) - ID звонка
  • value (number) - код статуса звонка.

Ниже представлен список всевозможных кодов и их текстовые интерпретации:

  • 1 - статус звонка: начат
  • 2 - статус звонка: принят
  • 3 - статус звонка: активный
  • 901 - статус звонка: отклонён
  • 902 - статус звонка: завершён
  • 903 - статус звонка: нет ответа
  • 904 - статус звонка: соединение разорвано.

Returns: объект с данными обновления.

{
  data: 902
  error: ""
  id: "21"
}

signalCall(type, payload)

Отправляет сигнал на сервер в случае определённых операций. Возможные операции перечислены в параметре payload.

Parameters:

  • type (string) - тип сигнала со следующими возможными значениями:
    • "reset" - соединение было разорвано и установлено заново
    • "offer" - сессионный переговорный процесс начат заново
    • "answer" - входящий вызов принят (пользователь ответил)
    • "new-ice-candidate" - ICE-кандидат передаётся другому пиру
    • "await-offer" - пользователь, которому звонят обновил страницу и переподключился к звонку
    • "active" - активный звонок был обновлён (напр., пользователь включил/отключил микрофон).
  • payload (object) - объект с парами operation: status:
// объект payload
{
  audio: true,
  video: false,
}

Returns: объект с данными сигнала.

{
  data: null,
  error: "",
  id: "26"
}

resetCounter(cid)

Метод сбрасывает счётчик непрочитанных сообщений в указанном чате.

Parameters:

  • cid (number) - ID чата.

Метод не возвращает никаких данных.

addGroupChat(name, avatar, users)

Метод вызывается при создании группового чата.

Parameters:

  • name (number) - имя чата
  • avatar (string) - URL для загрузки аватара
  • users (array) - ID приглашённых пользователей.

Returns: промис с объектом чата:

{
  avatar: "remote/avatars/picture.jpg",
  date: new Date(),
  direct_id: 0,
  id: 61,
  message: "",
  name: "Hikikomori",
  unread_count: 0,
  users: [4, 5, 3, 1, 87]
}

updateChat(chatId, name, avatar)

Метод вызывается при обновлении указанного чата.

Parameters:

  • chatId (number) - ID чата
  • name (string) - имя чата
  • avatar (string) - URL для загрузки аватара.

Returns: промис с объектом чата:

{
  avatar: "remote/avatars/another_picture.jpg",
  date: new Date(),
  direct_id: 0,
  id: 61,
  message: "",
  name: "Новый чат", 
  unread_count: 0,
  users: [4, 5, 3, 1, 87]
}

leave(chatId, userId)

Метод вызывается, когда пользователь покидает чат.

Parameters:

  • chatId (number) - ID чата
  • userId (number) - ID пользователя.

Returns: null, если пользователь успешно покинул чат.

setUsers(chatId, users)

Метод вызывается, когда текущий пользователь добавляет/удаляет другого пользователя

Parameters:

  • chatId (number) - ID чата
  • users (array) - ID учатников чата.

Returns: промис с объектом чата:

{
  avatar: "remote/avatars/another_picture.jpg",
  date: new Date(),
  direct_id: 0,
  id: 61,
  message: "Огласите весь список, пожалуйста",
  name: "Подработка", 
  unread_count: 0,
  users: [4, 5, 3, 1, 87]
}

avatarUploadUrl()

Метод возвращает URL для загрузки аватаров чатов.

Returns: url строку для загрузки.

this.app.config.url + "/chat/0/avatar";

fileUploadUrl(id)

Is called when user sends a file.

Parmaters:

  • id (number) - chat ID.

Returns: url string for uploading.

this.app.config.url + "/chat/3/files";

The uploaded file is added to FormData as the upload property.

Наверх