Интегрируемый чат плагин

Готовый к встраиванию в ваш сайт чат плагин личной переписки между пользователями.

Исходные коды размещены на GitHub, Демо версия чата

Чат опубликован под лицензией Apache License 2.0 По всем вопросам обращайтесь в скайп Levhav или на почту support@comet-server.ru

Функционал чата

  • Возможность передавать текстовые сообщения с прикреплённым изображением
  • Содержит возможность поиска контактов в списке контактов
  • Отдельные вкладки для списков избранных и заблокированных пользователей
  • Звуковое уведомление при получении сообщения
  • Кнопка пожаловаться
  • Пригоден для работы в мобильных браузерах
  • Отслеживание прочитано сообщение или нет. И как только сообщение будет прочитано получателем у отправителя появится на против сообщения две галочки
  • Перевод сообщений с помощью api яндекс переводчика

Функционал админки чата

  • Real-time мониторинг всех сообщений пользователей
  • Просмотр диалога любых двух пользователей
  • Возможность просматривать все сообщения отдельно выбранного пользователя
  • Список жалоб на пользователей от других пользователей
  • Возможность просматривать только сообщения с вложениями

Скриншоты чата

Внешний вид чата

Как встроить чат на сайт

Если вы решили использовать этот чат или его модификации то пожалуйста сообщите об этом на адрес star-chat@comet-server.ru в данный момент в статье не хватает ссылок на успешные примеры использования чата и отзывов на этот плагин чата.

Если возникнут трудности в интеграции то обращайтесь в техническую поддержку.

Чат может быть размещён как на отдельном сервере так и на том же сервере где и основной сайт. Чат взаимодействует с вашим сайтом через простое api. У чата все данные хранятся в собственной бд и информацию о пользователях и данные для авторизации он получает путём отправки запросов к вашему сайту.

Для установки чата на своём сервере вам понадобится скачать все исходники от сюда

Среди исходников будет файл database.sql в нём содержится структура таблиц необходимая для работы чата. На основании этого файла создаём базу данных.

Затем надо подправить конфигурацию в файлах.

  • ./config.php
  • ./backend-example/config.php

В файле ./config.php надо указать настройки для чата для подключения к базе данных. Для хранения переписки. И надо задать настройки доступа к комет серверу для рассылки уведомлений.

/**
 * Доступ к БД
 */
$conf['mysql_db'] = "StarCometChat";
$conf['mysql_user'] = "StarCometChat";
$conf['mysql_pw'] = "RLUJ4TXE22XL5JTh";
$conf['mysql_host'] = "localhost"; 
 
/**
 * Доступ к комет серверу
 * Получить ключи доступа можно здесь https://comet-server.ru/menu_id/10
 */
$conf['cometQL_dev_id'] = "lPXBFPqNg3f661JcegBY0N0dPXqUBdHXqj2cHf04PZgLHxT6z55e20ozojvMRvB8";
$conf['cometQL_key'] = 15;

Так же в файле ./config.php есть опция admin_ids которая позволяет перечислить идентификаторы всех пользователей у которых есть права администраторов. Наделять такими правами очень много пользователей не рекомендуется, так как это может повлиять на скорость работы чата.

$conf['admin_ids'] = array(1, 2);    // Список id пользователей с правами администратора

Параметр trusted_ip в файле ./config.php должен содержать ip сервера с которого разрешены вызовы api чата.

/**
 * ip адрес с которого разрешено вызывать api методы управления чатом
 * Или false если ограничение отключено (не безопасно)
 */
$conf['trusted_ip'] = false;
По умолчанию параметр trusted_ip равен false так как это пример. В реальном приложении необходимо указать ip адрес с которого разрешены запросы к api чата.

Переменная $trusted_ip в файле ./backend-example/config.php должна содержать ip адрес сервера на котором расположен чат.

/**
 * ip адрес с которого разрешено вызывать api методы управления чатом
 * Или false если ограничение отключено (не безопасно)
 */
$trusted_ip = false;
По умолчанию переменная $trusted_ip равна false так как это пример. В реальном приложении необходимо указать ip адрес с которого разрешены запросы к api бекенда.

Обмен данными

В директории backend-example расположены файлы с примером интеграции чата в php проект. Для того чтобы интегрировать чат в ваш проект вам необходимо создать обработчики на те запросы которые будет отправлять модуль чата для получения данных о зарегистрированных у вас пользователях.

URL_getUsersInfo

Чат будет отправлять вашему проекту post запросы для получения информации о пользователях. Адрес на который будут отправляться эти запросы задаётся в файле ./config.php, имя параметра «URL_getUsersInfo» Вот фрагмент кода в котором определено это значение.

/**
 * URL для запроса информации о пользователях в json
 */
$conf['URL_getUsersInfo'] = 'http://comet-server.ru/doc/CometQL/Star.Comet-Chat/backend-example/chat_get_users.php'; 

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

POST /doc/CometQL/Star.Comet-Chat/backend-example/chat_get_users.php HTTP/1.1
Host: comet-server.ru
Origin: https://comet-server.ru

users=1,2

В ответ он будет ожидать json строку со следующими объектами.

[{
    "user_id":1,
    "avatar_url":"http:\/\/comet-server.ru\/doc\/CometQL\/Star.Comet-Chat\/img\/avatar0.png",
    "name":"Виктор",
    "city":"Владивосток",
    "age":24,
    "status":"active",
    "login":"victor"
},
{
    "user_id":2,
    "avatar_url":"http:\/\/comet-server.ru\/doc\/CometQL\/Star.Comet-Chat\/img\/avatar0.png",
    "name":"Лена",
    "city":"Владивосток",
    "age":25,
    "status":"active",
    "login":"lena"
},]

Файл ./backend-example/chat_get_users.php содержит в себе код который правильно обрабатывает запрос и отдаёт правильные данные.

URL_getUsersHash

Для получения хеша авторизации пользователя чат будет отправлять post запрос на адрес который содержится в параметре URL_getUsersHash в файле ./config.php, Вот фрагмент кода в котором определено это значение.

/**
 * URL для запроса хеша авторизации
 */
$conf['URL_getUsersHash'] = 'http://comet-server.ru/doc/CometQL/Star.Comet-Chat/backend-example/chat_get_user_hash.php';

В запросе в параметре id будет передан id пользователя для которого необходимо получить хеш авторизации.

POST /doc/CometQL/Star.Comet-Chat/backend-example/chat_get_user_hash.php HTTP/1.1
Host: comet-server.ru
Origin: https://comet-server.ru

id=1

В ответ он будет ожидать строку хеша авторизации

56ff3f23bfd1071e14749aad42e58d89

Файл ./backend-example/chat_get_user_hash.php содержит в себе код который правильно обрабатывает запрос и отдаёт правильные данные.

JavaScript вызовы чата

Файл ./backend-example/userPage.php представляет из себя пример страницы пользователя. В нём есть пример интеграции JavaScript вызовов чата в страницы сайта.

Вот приведён код запуска чат плагина.

var user_id = <?php echo $_SESSION['userId']; ?>;  
var user_key = "<?php echo getUserHash($_SESSION['userId']); ?>";  
 
$(document).ready(function()
{ 
    /**
     * Подключение к комет серверу. Для возможности принимать команды.
     * dev_id ваш публичный идентификатор разработчика
     * user_id идентификатор пользователя под которым вы вошли.
     * user_key ваш хеш авторизации.
     */
    CometServer().start({dev_id:15, user_id:user_id, user_key: user_key})
 
    /**
     * Инициализируем модуль чата, происходит инициализация и загрузка данных необходимых для работы.
     * Но окно чата этим вызовом не открывается.
     */
    StarCometChat.init({
        user_id: user_id,
        user_key: user_key, 
        open:false,
 
        // Параметр home_dir содержит адрес расположения php скриптов чата
        home_dir: "http://comet-server.ru/doc/CometQL/Star.Comet-Chat",
 
        // Функция назначенная в success вызывается после успешной инициализации чата.
        success:function()
        {
            // Вызов countNewMessagesSum возвращает количество новых сообщений. Работает корректно только после завершения инициализации чата
            var c = StarCometChat.countNewMessagesSum();
            if(c > 0)
            {
                $('#newMsgIndicator').html("У вас "+ c + " новых сообщений");
            }
        }
    });
});

Надеюсь комментарии в коде понятны. Следует отметить что для человек получает статус online только после того как выполняется код подключения к комет серверу.

После завершения инициализации доступны следующие вызовы:

Возвращает кол-во непрочитанных сообщений

StarCometChat.countNewMessagesSum()

Возвращает кол-во непрочитанных сообщений от пользователя user_id

StarCometChat.countNewMessages(user_id)

Открывает список диалогов

StarCometChat.openDialog()

Открывает диалог с пользователем user_id

StarCometChat.openDialog(user_id)

Решение проблем

Для включения вывода ошибок надо добавить в файл config.php код:

ini_set('display_errors','on');
error_reporting (E_ALL & ~E_NOTICE);

Ошибка о том что указаны не верные пути к файлам чата выглядит как то так:

Error in line 14 include_once $_SERVER['DOCUMENT_ROOT'].'/config.php';

Ошибка при загрузке файла похожая на эту

Warning: move_uploaded_file(/home/www-data/web/comet-server.com/chatFiles/3_2_1488678883243.png): failed to open stream: No such file or directory in /home/www-data/web/administrator/sub_sites/comet.cms-machaon.ru/doc/CometQL/Star.Comet-Chat/sendMessage.php on line 62

Warning: move_uploaded_file(): Unable to move '/tmp/php27nQco' to '/home/www-data/web/comet-server.com/chatFiles/3_2_1488678883243.png' in /home/www-data/web/administrator/sub_sites/comet.cms-machaon.ru/doc/CometQL/Star.Comet-Chat/sendMessage.php on line 62

говорит о том что нет папки chatFiles или нет прав на запись в неё.

Как попасть в админку?

Список пользователей с правами администратора задаётся в файле config.php в функции getAdminIds()

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
U D R W K