使用推送器的一对一响应
One to One response using pusher
我正在尝试使用 laravel 和推送器在用户和管理员之间创建一对一的响应。用户未登录,只是访客。当用户访问该站点时,他们将输入一些内容并将其发送给管理员。如果任何管理员在线,他们将单击“是”或“否”,然后将其发送回发送它的用户。
我的问题是我似乎无法让推送器发送响应。我看过这个 Pusher one to one chat structure 但我不太明白,因为在我的场景中它不是聊天室,而且更具体地说是聊天室。
无论如何,我已经尝试使用会话 ID,但由于用户和管理员不在同一个浏览器上,所以没有用。我想过以某种方式发送带有推送通知消息的会话 ID,但我确实知道如何操作,因为管理员在 /admin/events 页面上,而用户在主页上。
这是我的代码
push.js
var pusher = new Pusher('MY KEY');
var channel = pusher.subscribe ('client');
channel.bind('general_response', addMessage);
var channel = pusher.subscribe ('customer_response');
//bind to new_response on the channel
channel.bind('message', addWaitingResponse);
//user
function addMessage (data) {
//create list item
var li = $('<div class="response_message"></div>');
//Get text properity from data
li.text(data.text);
//hide it
li.hide();
//prepend to messages
$('#messages').prepend(li);
li.slideDown();
}
//admin
function addWaitingResponse(data) {
var li = $('<div class="waiting_approve"> </div> ');
li.text(data.text);
li.hide();
$('#WaitingNotification').prepend(li);
li.slideDown();
}
订阅和收听
<?php
namespace Scan\Subscriber;
class NotificationEventSubscriber {
private $_pusher;
public function __construct() {
$this->_pusher = new \Pusher($_ENV['app_key'], $_ENV['app_secret'], $_ENV['app_id']);
}
//message to admin
public function onCreate($event) {
//$pusher = new \Pusher($_ENV['app_key'], $_ENV['app_secret'], $_ENV['app_id']);
$data = array('text' => $event->track_no 'is awaiting approval');
$this->_pusher->trigger('customer_response', 'message', $data);
}
//message to user
public function onUpdate($event) {
/*
| Notify customer
*/
$message = array('text' => $event->track_no' has been approved ');
$this->_pusher->trigger('client', 'general_response', $message);
}
public function subscribe($events) {
$events->listen('notification.insert','Scan\Subscriber\NotificationEventSubscriber@onCreate');
$events->listen('notification.update','Scan\Subscriber\NotificationEventSubscriber@onUpdate');
}
}
在 laravel 中,当用户发送请求时,我注册并触发事件。上面的代码只是展示了我如何向用户和管理员显示消息
我的问题是:如何让管理员回复仅发送给发送请求的用户?非常感谢。
听起来你是对的。您需要某种方法来创建匿名用户和管理员用户都知道的唯一标识符。然后可以使用该标识符来路由消息 - 可能通过 Pusher 通道。
由于用户是匿名的,因此使用会话 ID 作为该用户的唯一频道名称的一部分似乎是个好主意。
或者,您可以让服务器在匿名用户发送帮助请求时使用唯一 ID 进行响应。考虑到这一点,下面的图表显示了实现这一目标的潜在方法:
一旦上述过程完成,Admin
和匿名 User
现在可以通过触发由 request_id
识别的通道上的事件进行通信。
我正在尝试使用 laravel 和推送器在用户和管理员之间创建一对一的响应。用户未登录,只是访客。当用户访问该站点时,他们将输入一些内容并将其发送给管理员。如果任何管理员在线,他们将单击“是”或“否”,然后将其发送回发送它的用户。
我的问题是我似乎无法让推送器发送响应。我看过这个 Pusher one to one chat structure 但我不太明白,因为在我的场景中它不是聊天室,而且更具体地说是聊天室。
无论如何,我已经尝试使用会话 ID,但由于用户和管理员不在同一个浏览器上,所以没有用。我想过以某种方式发送带有推送通知消息的会话 ID,但我确实知道如何操作,因为管理员在 /admin/events 页面上,而用户在主页上。
这是我的代码
push.js
var pusher = new Pusher('MY KEY');
var channel = pusher.subscribe ('client');
channel.bind('general_response', addMessage);
var channel = pusher.subscribe ('customer_response');
//bind to new_response on the channel
channel.bind('message', addWaitingResponse);
//user
function addMessage (data) {
//create list item
var li = $('<div class="response_message"></div>');
//Get text properity from data
li.text(data.text);
//hide it
li.hide();
//prepend to messages
$('#messages').prepend(li);
li.slideDown();
}
//admin
function addWaitingResponse(data) {
var li = $('<div class="waiting_approve"> </div> ');
li.text(data.text);
li.hide();
$('#WaitingNotification').prepend(li);
li.slideDown();
}
订阅和收听
<?php
namespace Scan\Subscriber;
class NotificationEventSubscriber {
private $_pusher;
public function __construct() {
$this->_pusher = new \Pusher($_ENV['app_key'], $_ENV['app_secret'], $_ENV['app_id']);
}
//message to admin
public function onCreate($event) {
//$pusher = new \Pusher($_ENV['app_key'], $_ENV['app_secret'], $_ENV['app_id']);
$data = array('text' => $event->track_no 'is awaiting approval');
$this->_pusher->trigger('customer_response', 'message', $data);
}
//message to user
public function onUpdate($event) {
/*
| Notify customer
*/
$message = array('text' => $event->track_no' has been approved ');
$this->_pusher->trigger('client', 'general_response', $message);
}
public function subscribe($events) {
$events->listen('notification.insert','Scan\Subscriber\NotificationEventSubscriber@onCreate');
$events->listen('notification.update','Scan\Subscriber\NotificationEventSubscriber@onUpdate');
}
}
在 laravel 中,当用户发送请求时,我注册并触发事件。上面的代码只是展示了我如何向用户和管理员显示消息
我的问题是:如何让管理员回复仅发送给发送请求的用户?非常感谢。
听起来你是对的。您需要某种方法来创建匿名用户和管理员用户都知道的唯一标识符。然后可以使用该标识符来路由消息 - 可能通过 Pusher 通道。
由于用户是匿名的,因此使用会话 ID 作为该用户的唯一频道名称的一部分似乎是个好主意。
或者,您可以让服务器在匿名用户发送帮助请求时使用唯一 ID 进行响应。考虑到这一点,下面的图表显示了实现这一目标的潜在方法:
一旦上述过程完成,Admin
和匿名 User
现在可以通过触发由 request_id
识别的通道上的事件进行通信。