首页 > 解决方案 > Laravel 客户支持与第三方 Pusher 聊天

问题描述

我正在尝试制作客户支持图表,但在我的控制台中,出现了一些错误laravelPusher我无法理解。

这是控制台: 在此处输入图像描述

和,

在此处输入图像描述

这就是我在Js 文件中的内容

window.Pusher = require('pusher-js');

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: process.env.d8649589aa930d275ffe,
    cluster: process.env.ap2,
    encrypted: true
});

标签: laravelvue.jswebsocketpusher

解决方案


创建事件抽象类

namespace App\Events;

use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Queue\SerializesModels;

abstract class Event implements ShouldBroadcast
{
    use SerializesModels;

    protected $message;
    protected $channels = [];
    protected $event = '';

    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn()
    {
        return $this->channels;
    }

    /**
     * Broadcast to event
     */
    public function broadcastAs()
    {
        return $this->event;
    }

    /**
     * Broadcast with message
     */
    public function broadcastWith()
    {
        return  $this->message;
    }
}

现在创建 PusherEvent 类

namespace App\Events;

class PusherEvent extends Event
{

    /**
     * Create a new event instance.
     * @param $message
     * @return $this
     */
    public function setMessage($message)
    {
        $this->message = $message;
        return $this;
    }

    /**
     * Set pusher channels
     */
    public function setChannels($channels)
    {
        $this->channels = $channels;
        return $this;
    }

    /**
     * Set pusher event
     */
    public function setEvent($event)
    {
        $this->event = $event;
        return $this;
    }
}

现在像这样从 Laravel Side 的任何地方广播

    try {
            $messageEvent = new PusherEvent();
            $messageEvent->setEvent('chatMessage')
                        ->setChannels(['customerChat']);
            $params['message'] = "Hello From Laravel";
            event($messageEvent->setMessage($params));
        } catch (\Exception $e) {
            customLog($e->getMessage());
            return false;
        }

调用此代码后,您可以检查推送控制台。你会得到“来自 Laravel 的你好”

这是一个工作代码。我在我的项目中使用过。希望它可以帮助你。

从 js 列出

import Echo from "laravel-echo"

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'd8649589aa930d275ffe',
    cluster: 'ap2',
    encrypted: true
});

Echo.channel('customerChat')
    .listen('chatMessage', (e) => {
        console.log(e.message);
    });

详情https://laravel.com/docs/5.6/broadcasting#concept-overview


推荐阅读