怎么通過(guò)LayuiAdmin&LayIM&Thinkphp&Gateway實(shí)現(xiàn)小程序多客服接入系統(tǒng)

這篇文章主要介紹了怎么通過(guò)LayuiAdmin&LayIM&Thinkphp&Gateway實(shí)現(xiàn)小程序多客服接入系統(tǒng),具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制網(wǎng)站建設(shè)服務(wù),專注于成都企業(yè)網(wǎng)站定制,高端網(wǎng)頁(yè)制作,對(duì)隧道混凝土攪拌車等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計(jì),網(wǎng)站優(yōu)化推廣哪家好,專業(yè)營(yíng)銷推廣優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。

先看下效果圖吧。

怎么通過(guò)LayuiAdmin&LayIM&Thinkphp&Gateway實(shí)現(xiàn)小程序多客服接入系統(tǒng)實(shí)現(xiàn)的功能:

1、小程序客服對(duì)話實(shí)時(shí)接收并推送到Layim
2、通過(guò)Layim可以實(shí)時(shí)回復(fù)小程序客服對(duì)話
3、可以添加多個(gè)小程序、可以添加多個(gè)客服
4、在線客服順序分配對(duì)話,客服不在線則按照留言處理
5、自動(dòng)回復(fù)功能

實(shí)現(xiàn)邏輯:

以微信訪客的openid作為唯一標(biāo)識(shí)符,新建一個(gè)layim用戶并將其作為客服的好友。后端TP作做消息接收和轉(zhuǎn)發(fā)的中間層。

實(shí)現(xiàn)步驟(重點(diǎn)說(shuō)gateway部分):

1、安裝TP,composer安裝workerman、gateway

2、在tp的根目錄創(chuàng)建server.php(其他名字都行)#!/usr/bin/env php

<?php
ini_set('display_errors', 'on');
if(strpos(strtolower(PHP_OS), 'win') === 0)
{
    exit("start.php not support windows.\n");
}
// 檢查擴(kuò)展
if(!extension_loaded('pcntl'))
{
    exit("Please install pcntl extension. See http://doc3.workerman.net/appendices/install-extension.html\n");
}
if(!extension_loaded('posix'))
{
    exit("Please install posix extension. See http://doc3.workerman.net/appendices/install-extension.html\n");
}
define('APP_PATH', __DIR__ . '/application/');//如果修改了也要跟著修改,tp的application
define('BIND_MODULE','chat/Run');//這個(gè)位置是你唯一要自定義的
// 加載框架引導(dǎo)文件
require __DIR__ . '/thinkphp/start.php';

3、在tp的application目錄下創(chuàng)建一個(gè)模塊chat,創(chuàng)建Run的控制器,這里除了Events的命名空間,其他基本不需要改動(dòng),改動(dòng)端口有點(diǎn)坑,建議就用gateway默認(rèn)的

class Run
{
    public function __construct()
    {
        //注冊(cè)register
        new Register('text://0.0.0.0:1236');
        //初始化 bussinessWorker 進(jìn)程
        $worker = new BusinessWorker();
        $worker->name = 'WebIMBusinessWorker';
        $worker->count = 4;
        $worker->registerAddress = '127.0.0.1:1236';
        //設(shè)置處理業(yè)務(wù)的類,此處制定Events的命名空間
        $worker->eventHandler = '\app\chat\controller\Events';
        // 初始化 gateway 進(jìn)程
        $gateway = new Gateway("websocket://0.0.0.0:8282");
        $gateway->name = 'WebIMGateway';
        $gateway->count = 4;
        $gateway->lanIp = '127.0.0.1';
        $gateway->startPort = 2900;
        $gateway->registerAddress = '127.0.0.1:1236';
        $gateway->pingInterval = 55;
        $gateway->pingNotResponseLimit = 1;
        $gateway->pingData = '{"emit":"ping"}';//此處為心跳包數(shù)據(jù)
        //運(yùn)行所有Worker;
        if(!defined('GLOBAL_START'))
        {
            Worker::runAll();
        }
    }
}

4、創(chuàng)建Event.php的控制器類,Event.php是主要的邏輯處理類,這里我只簡(jiǎn)單說(shuō)下我的onmessage方法:    

public static function onMessage($client_id, $data){
        $message = json_decode($data, true);
        $message_type = $message['emit'];
        
        switch($message_type) {
            case 'init':
                // uid
                //根據(jù)token獲取uid
                $tokenCache =   new TokenCache();
                $user   =   $tokenCache->where('token','eq',$message['token'])->order('id DESC')->find();
                if(!$user->uid||$user->date+$user->lifetime<time()){
                    self::onClose($client_id);
                }
                $wechatMsgUser  =   new WechatMsgUser();
                $msgUser    =    $wechatMsgUser->where('openid','eq',$user->uid)->where('type','eq',0)->find();
                if(!$msgUser->id){
                    self::onClose($client_id);
                }
                //*客服上線,設(shè)置數(shù)據(jù)庫(kù)狀態(tài)字段為在線狀態(tài)
                $msgUser->status    =   1;
                $msgUser->save();
                $uid    =   $msgUser->id;
                // 設(shè)置session,這個(gè)$_SESSION我是為了下面的onclose方法里設(shè)置客服離線狀態(tài)
                $_SESSION = [
                    'id'       => $uid,
                ];
                // 將當(dāng)前$client_id與uid綁定
                Gateway::bindUid($client_id, $uid);
                $msgService = new MsgService();
                $msgService->checkLeavedMessage($uid);
                return;
                break;
            case 'ping':
                $pingData=[
                    'emit'=>'pong',
                    'data'=>$client_id
                ];
                Gateway::sendToClient($client_id, json_encode($pingData));
                return;
            default:
                echo "unknown message $data" . PHP_EOL;
        }
    }

這里因?yàn)槲矣玫氖莏wt驗(yàn)證,所以多繞了一層,先通過(guò)token找到layuiadmin的uid,再通過(guò)uid找到客服ID,把客服ID和client_id綁定,這樣在后端php里就可以直接使用gateway::sendToUid來(lái)推送消息了。

5、tp后端,在需要推送消息的地方使用GatewayClient來(lái)主動(dòng)推送消息。

這是接收消息的整個(gè)流程:微信開(kāi)放接口請(qǐng)求消息推送接口url→php拿到數(shù)據(jù),存庫(kù),通過(guò)GatewayClient主動(dòng)推送到指定客服→前端拿到數(shù)據(jù)通過(guò)layim渲染到視圖

其實(shí)這個(gè)Event.php我只做了兩件事,一個(gè)是心跳檢測(cè),另一個(gè)就是登陸后將客服的ID和client_id綁定。

發(fā)送消息我用的是ajax的http方式發(fā)送,沒(méi)有使用websocket。

未能實(shí)現(xiàn)的功能:

消息狀態(tài)的處理,未讀/已讀

layim隱身/在線

目前只有文字消息,沒(méi)有圖片和卡片消息

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享怎么通過(guò)LayuiAdmin&LayIM&Thinkphp&Gateway實(shí)現(xiàn)小程序多客服接入系統(tǒng)內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問(wèn)題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!

網(wǎng)站欄目:怎么通過(guò)LayuiAdmin&LayIM&Thinkphp&Gateway實(shí)現(xiàn)小程序多客服接入系統(tǒng)
本文地址:http://muchs.cn/article16/ihcodg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)響應(yīng)式網(wǎng)站、搜索引擎優(yōu)化、電子商務(wù)、營(yíng)銷型網(wǎng)站建設(shè)品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)