Простой и удобный чат для консультаций в режиме реального времени способен удвоить продажи на сайте. Сегодня мы расскажем, как организовать его на основе модуля Nginx nginx-push-stream-module, PHP и Javascript. Решение кроссбраузерное и не требует дополнительных плагинов.

Установка модуля

Скачайте модуль с Github, а затем пересоберите Nginx согласно инструкции:

Конфигурация Nginx

Надо выполнить объявление точки публикации сообщений (publish) и точки подписки для получения сообщений (subscribe). Используем код:

http {

server {

location /publish {
push_stream_publisher admin; # определяет режим для данного блока
push_stream_channels_path $arg_id; # id канала для публикации сообщения
push_stream_store_messages on; # включение или отключение очереди сообщений
allow 127.0.0.1; # делает публикацию сообщений доступной только с вашего сервера
}

location ~ /subscribe/(.*) {
push_stream_subscriber long-polling ; # определяет блок как подписчика
# (существуют разные режимы)
push_stream_channels_path $1; # id канала для подписки
push_stream_longpolling_connection_ttl 300s; # период времени, в течении которого подписчик
# остается подключенным (ожидает сообщение) до
# переподключения
push_stream_last_received_message_time $arg_time; # время получения последнего сообщения
push_stream_last_received_message_tag $arg_tag; # метка, определяющая последнее доставленное
#сообщение
}

}

push_stream_shared_memory_size 32M;
}

Внутри блока http нужно указать размер выделяемой памяти при помощи директивы push_stream_shared_memory_size

Как отправить сообщение в PHP?

Обычным POST-методом

$channel_id = subscriber1; //id канала для публикации сообщения

$message=’Привет!’; // сообщение

//отправка сообщения
$ch = curl_init('http://127.0.0.1/publish?id='.$channel_id);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message));
curl_exec($ch);
curl_close($ch);

Как получить сообщение в Jquery (Javascript)

Используем самый простой способ, Ajax запрос методом GET.

var channelId = subscriber1; //id подписчика
var last_etag=0; //переменная для заголовка 'Etag'
var last_time=null; //переменная для заголовка 'Last-Modified'

function new_message() {
$.ajax({
url: '/subscribe/' + channelId,
type: "GET",
dataType: 'json',
beforeSend: function(xhr){xhr.setRequestHeader('Etag', last_etag);xhr.setRequestHeader('Last-Modified', last_time);},
success: function(data, status, xhr) {
last_etag =xhr.getResponseHeader('Etag'); //присваиваем новое значение переменной last_etag
// из заголовка 'Etag' ответа
last_time =xhr.getResponseHeader('Last-Modified'); // присваиваем новое значение переменной last_time
// из заголовка 'Last-Modified' ответа

//здесь что-то делаем с полученным сообщением

setTimeout(new_message, 500); // переподключаемся сразу после получения ответа
}
})
}
new_message();


Да! И посадите оператором чата хорошего продавца, разбирающегося в ассортименте и умеющего продавать при личном общении. Иначе вреда от такого чата будет больше, чем пользы.


Удачи вам! Пару советов имела смелость дать вам Веб-студия "АКРИТ". Разработка и продвижение сайтов на CMS «1С-Битрикс». Мы реализуем полный цикл работ - от разработки логотипа и фирменного стиля будущей компании, до ее продвижения на рынок, используя максимально эффективные современные технологии.

Назад в раздел

Подписаться на новые материалы раздела:














CAPTCHA

* Источник использованных инструментов