2015-01-26 2 views
0

Я пытаюсь создать индивидуальный ответ между пользователем и администратором, используя laravel и толкатель. Пользователь не вошел в систему, просто посетитель. Когда пользователь посещает сайт, они будут печатать что-то и отправлять его администратору. Если какой-либо администратор находится в сети, он нажмет кнопку «Да» или «Нет», и тогда он будет отправлен обратно ПОЛЬЗОВАТЕЛЮ, который его отправил.Ответ один к одному с использованием толкателя

Моя проблема в том, что я не могу заставить толкать отправлять ответы. Я видел это Pusher one to one chat structure, но я не понимаю, как в моем сценарии это не чат, а более конкретный для чата.

В любом случае я попытался использовать идентификатор сеанса, но это не сработало, поскольку пользователь и администратор не находятся в одном браузере. Я подумал о том, чтобы как-то отправить идентификатор сеанса с уведомлением о сообщении-толкателем, но я, похоже, знал, как администратор находится на странице/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\[email protected]'); 

      $events->listen('notification.update','Scan\Subscriber\[email protected]'); 

    } 

} 

В Laravel, когда пользователь отправляет запросы, зарегистрироваться и уволить мероприятие. В приведенном выше коде показано, как я показываю сообщение пользователю и администратору

Мой вопрос: Как сделать ответ администратора ТОЛЬКО отправленным пользователю, который отправил запрос? Большое спасибо.

ответ

0

Похоже, вы находитесь на правильных линиях. Вам нужен способ создания уникального идентификатора, о котором знают анонимный пользователь и администратор. Затем этот идентификатор можно использовать для маршрутизации сообщений - возможно, через канал Pusher.

Поскольку пользователь является анонимным, используя идентификатор сеанса как часть уникального имени канала для этого пользователя, кажется хорошей идеей.

В качестве альтернативы вы можете заставить сервер отвечать уникальным идентификатором, когда анонимный пользователь отправляет запрос о помощи. Имея это в виду, вот схема, показывающая потенциальный способ достижения этой цели:

После того, как вышеописанный процесс завершил Admin и анонимный User теперь могут общаться с помощью инициирующих событий на канале, задаваемом request_id ,

+1

Спасибо @leggetter, что я сделал, это сохранить клиентский канал в базе данных, и просто убедитесь, что ответ идет на этот канал. еще раз спасибо – Baako

 Смежные вопросы

  • Нет связанных вопросов^_^