Javascript 使用pusher的一对一响应

Javascript 使用pusher的一对一响应,javascript,php,asp.net,laravel,pusher,Javascript,Php,Asp.net,Laravel,Pusher,我正在尝试使用laravel和pusher在用户和管理员之间创建一对一的响应。用户没有登录,只是一个访问者。当用户访问该站点时,他们会键入一些内容并将其发送给管理员。如果任何管理员在线,他们将单击“是”或“否”,然后将其发送回发送它的用户 我的问题是,我似乎无法让pusher发送回复。我已经看到了这一点,但我不明白,因为在我的场景中,这不是一个聊天室,更具体地说是一个聊天室 无论如何,我尝试过使用会话id,但由于用户和管理员不在同一个浏览器上,因此无法使用。我想用pusher通知消息发送会话id

我正在尝试使用laravel和pusher在用户和管理员之间创建一对一的响应。用户没有登录,只是一个访问者。当用户访问该站点时,他们会键入一些内容并将其发送给管理员。如果任何管理员在线,他们将单击“是”或“否”,然后将其发送回发送它的用户

我的问题是,我似乎无法让pusher发送回复。我已经看到了这一点,但我不明白,因为在我的场景中,这不是一个聊天室,更具体地说是一个聊天室

无论如何,我尝试过使用会话id,但由于用户和管理员不在同一个浏览器上,因此无法使用。我想用pusher通知消息发送会话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();
  }
var pusher=new pusher(“我的钥匙”);
var channel=pusher.subscribe(“客户”);
channel.bind('general_response',addMessage);
var channel=pusher.subscribe('customer_response');
//绑定到频道上的新\u响应
channel.bind('message',addWaitingResponse);
//使用者
函数addMessage(数据){
//创建列表项
var li=$('');
//从数据中获取文本属性
li.text(data.text);
//藏起来
li.hide();
//消息前置
$(“#消息”).prepend(li);
li.slideDown();
}
//管理员
函数addWaitingResponse(数据){
var li=$('');
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');

    }

}

听起来你的思路是对的。您需要某种方法来创建匿名用户和管理员用户都知道的唯一标识符。然后,该标识符可用于路由消息-可能通过推送器通道

因为用户是匿名的,所以使用会话ID作为该用户唯一通道名称的一部分似乎是个好主意

或者,当匿名用户发送帮助请求时,您可以让服务器使用唯一ID进行响应。考虑到这一点,下面的图表显示了实现这一点的潜在方法:


一旦上述过程完成,
管理员
和匿名
用户
现在可以通过触发由
请求id
标识的频道上的事件进行通信

谢谢@leggetter我所做的是将客户端频道存储在数据库中,只要确保响应转到该频道即可。谢谢again@leggetter,根据您的场景,有一种方法可以让用户知道管理员是否“可用”(侦听事件)?@cristian Pusher确实支持状态通道,因此如果
管理员
用户是其中一名成员,则您可以使用这些通道,然后他们就在线了。@leggetter我是否能够实时更新管理员在线/离线状态,以便其他客户端/用户查看?我如何才能访问它?状态频道提供有关成员是否在频道上(在线/离线)的实时更新。所以,是的。更多信息可以在文档中找到。