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

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

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

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

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

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

Вы можете скачать готовый бэкенд для Chat здесь. Обратите внимание, что чат-боты доступны при использовании нашего бэкенда. Для более удобной работы с чат-ботами используйте свой собственный API ключ OpenAI .

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

Сервис 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)

Инициирует звонок указанному пользователю. Если это групповой звонок, userId должен быть равен 0.

Parameters

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

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

{
  devices: [30, 0],
  id: 778,
  start: null,
  status: 1,
  users: [1, 0],
  initiator: 6, // the id of the call initiator
  group: true 
}

updateCall(id, value)

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

Parameters:

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

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

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

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

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

setUserStatus(id, status)

Вызывается во время звонка для изменения статуса пользователя. Используется для вызовов LiveKit и P2P.

Parameters:

  • id (number) - ID пользователя
  • value (number) - новый статус.

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

  • 0 - CallUserStatusDisconnected
  • 1 - CallUserStatusInitiated
  • 2 - CallUserStatusConnecting
  • 3 - CallUserStatusActive.

Returns: промис.

jointToken(callId)

Получает токен для подключения к звонку при использовании службы LiveKit. Используется только для LiveKit, даже если это звонок один на один.

Parameters:

  • callId (number) - ID звонка

Returns: объект, содержащий токен.

{
  token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9EzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhd"
}

signalCall(type, payload)

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

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.

Parameters:

  • 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.

voiceUploadUrl(id)

Is called when user records a voice message.

Parameters:

  • id (number) - chat ID.

Returns: url string for uploading.

this.app.config.url + `/chat/${id}/voice`;
Наверх