本篇文章给大家带来的内容是关于如何通过LayuiAdmin&LayIM&Thinkphp&Gateway实现小程序多客服接入系统的例子,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

先看下效果图吧。

实现的功能:

1、小程序客服对话实时接收并推送到Layim

2、通过Layim可以实时回复小程序客服对话

3、可以添加多个小程序、可以添加多个客服

4、在线客服顺序分配对话,客服不在线则按照留言处理

5、自动回复功能

实现逻辑:

以微信访客的openid作为唯一标识符,新建一个layim用户并将其作为客服的好友。后端TP作做消息接收和转发的中间层。

实现步骤(重点说gateway部分):

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

2、在tp的根目录创建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");

}

// 检查扩展

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');//这个位置是你唯一要自定义的

// 加载框架引导文件

require __DIR__ . '/thinkphp/start.php';

3、在tp的application目录下创建一个模块chat,创建Run的控制器,这里除了Events的命名空间,其他基本不需要改动,改动端口有点坑,建议就用gateway默认的class Run

{

public function __construct()

{

//注册register

new Register('text://0.0.0.0:1236');

//初始化 bussinessWorker 进程

$worker = new BusinessWorker();

$worker->name = 'WebIMBusinessWorker';

$worker->count = 4;

$worker->registerAddress = '127.0.0.1:1236';

//设置处理业务的类,此处制定Events的命名空间

$worker->eventHandler = '\app\chat\controller\Events';

// 初始化 gateway 进程

$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"}';//此处为心跳包数据

//运行所有Worker;

if(!defined('GLOBAL_START'))

{

Worker::runAll();

}

}

}

4、创建Event.php的控制器类,Event.php是主要的逻辑处理类,这里我只简单说下我的onmessage方法:public static function onMessage($client_id, $data){

$message = json_decode($data, true);

$message_type = $message['emit'];

switch($message_type) {

case 'init':

// uid

//根据token获取uid

$tokenCache = new TokenCache();

$user = $tokenCache->where('token','eq',$message['token'])->order('id DESC')->find();

if(!$user->uid||$user->date+$user->lifetime

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);

}

//*客服上线,设置数据库状态字段为在线状态

$msgUser->status = 1;

$msgUser->save();

$uid = $msgUser->id;

// 设置session,这个$_SESSION我是为了下面的onclose方法里设置客服离线状态

$_SESSION = [

'id' => $uid,

];

// 将当前$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;

}

}

这里因为我用的是jwt验证,所以多绕了一层,先通过token找到layuiadmin的uid,再通过uid找到客服ID,把客服ID和client_id绑定,这样在后端php里就可以直接使用gateway::sendToUid来推送消息了。

5、tp后端,在需要推送消息的地方使用GatewayClient来主动推送消息。

这是接收消息的整个流程:微信开放接口请求消息推送接口url→php拿到数据,存库,通过GatewayClient主动推送到指定客服→前端拿到数据通过layim渲染到视图

其实这个Event.php我只做了两件事,一个是心跳检测,另一个就是登陆后将客服的ID和client_id绑定。

发送消息我用的是ajax的http方式发送,没有使用websocket。

未能实现的功能:

消息状态的处理,未读/已读

layim隐身/在线

目前只有文字消息,没有图片和卡片消息

相关推荐:

layim php,如何通过LayuiAdminLayIMThinkphpGateway实现小程序多客服接入系统的例子相关推荐

  1. 关于微信小程序第三方客服接入调查

    微信小程序----第三方客服接入调查 简介:第三方客服相比微信小程序原生客服,通常来说,会有更强的只能辅助系统,更好的服务营销能力,适用于对服务质量.用户留存转化率以及访客价值挖掘有更高期待的企业. ...

  2. 微信小程序在线客服接入功能详解

    步骤一::小程序接入微信「客服消息」功能模块,开发者只需要调用按钮,触发微信的客服消息功能即可. 加入客服消息按钮有两个方法,大家可以根据自己的实际需求,任选一种方法. 1.插入固定的接入样式 < ...

  3. 微信小程序在线客服接入

    小程序接入微信「客服消息」功能模块,开发者只需要调用按钮,触发微信的客服消息功能即可,不需要自行在小程序中实现. 加入客服消息按钮有两个方法,大家可以根据自己的实际需求,任选一种方法. 1.插入固定的 ...

  4. 小程序多客服对应售前售后,或者不同的客服人员

    小程序的客服是一个比较强大的功能,可以和用户进行交流,可以图文引导用户打开连接,比如关注公众号,可以图文回复用户. 需求,不如我有两个客服按钮,需要回答不同的自动回复 客服按钮A,打开售前客服 客服按 ...

  5. 微信小程序在线客服系统都有哪些功能?

    微信小程序的用户已经破6亿,不少企业都看准了小程序这块大蛋糕.但是想要把握住小程序红利,除了做好运营推广外,用户服务也是重中之重.微信小程序自带的客服系统却很难满足用户服务的需求,于是很多小程序使用者 ...

  6. 微信小程序客服介绍:如何设置小程序在线客服?

    其实只需要解决2个问题 第一步,在微信小程序中添加联系在线客服按钮 第二步,接入在线客服功能,设置[自动/人工/转人工]回复等 一.添加小程序客服按钮 ① 在小程序中添加客服按钮功能,点此参考官方文档 ...

  7. 微信小程序绑定客服,接收不到消息?

    微信小程序绑定客服,无法接收用户消息 客服文档 添加客服 <button class="serviceBtn" open-type="contact"&g ...

  8. 小程序进入客服消息中心业务(一)

    小程序进入客服消息中心业务(一) 1. 如何进入小程序客服消息中心 button按钮进入小程序客服消息中心 <button open-type="contact">点击 ...

  9. 许嵩音乐智能问答系统微信小程序之客服聊天室

    许嵩音乐智能问答系统微信小程序之客服聊天室 项目简介. 音乐播放器搭建. 获取数据及文本分类. 智能客服聊天界面. 连接前端微信小程序输入和后端python,并返回值 连接知识图谱 你还在为因为性格腼 ...

  10. 小程序在线客服完整实现

    1.先注册公众号>小程序(需实名认证) 2.开发>测试>上传>审核发布>发布>使用 3.公众号(订阅号或服务号)与小程序(此为在线客服)通过同一主体绑定可以打通调用 ...

最新文章

  1. java遍历文件目录
  2. 计算机管理术语路径描述的是,directory
  3. 04Hadoop中的setPartitionerClass/SortComparator/GroupingComparator问题
  4. win10安装dockerx docker的常见命令 可以子腾讯云上做做练习
  5. Error: Cannot find module '@babel/core'
  6. 每天学点Linux:一
  7. 数据库周刊40丨OceanBase官网上线开发者社区;人民日报关注易鲸捷;2020中国系统架构师大会10月线上召开;数据库迁移经验分享;MySQL大表超字段问题;SQL高级知识;Oracle等待事件
  8. uni-app项目实战
  9. js 微信小程序根据身份证号计算年龄
  10. Atcoder Beginner Contest (ABC) 237 A - E
  11. Vue.js尤雨溪 30分钟纪录片(中文字幕)
  12. c语言编程怎么样,C语言怎么样,好学吗?
  13. 综合应用 -- 购物车
  14. 第二批鸿蒙手机排名,华为郑重宣布,第二批升级鸿蒙的十款手机,荣耀30系列上榜!...
  15. Office Professional Plus 2019 下载安装激活
  16. 区块链---双花问题
  17. Easyui Datagrid 中用 Combotree 的显示问题
  18. 传智播客技术社区_播客与网络技术的未来
  19. 从入门到精通之专家系统CLIPS(一)CLIPS初识与概述
  20. arm-linux 交叉编译链接动态库使用

热门文章

  1. RDT 协议 (可靠数据传输协议)
  2. [Vue warn]: The client-side rendered virtual DOM tree is not matching server-rendered content.
  3. 【mysql 练习题】查询和“01”号同学所学课程完全相同的其他同学的学号
  4. Lab4 Architecture Lab
  5. iOS12加密相册、保险箱、加密相册Pro、保险箱Pro打开就闪退的,不要删除app,关闭4g和WiFi即可正常使用。
  6. DRAM基本单元最为通俗易懂的图文解说
  7. python读取docx中表格 图片_Python-docx 读写 Word 文档:插入图片、表格,设置表格样式,章节,页眉页脚等...
  8. 倒排索引、正排索引,以及ElasticSearch对倒排索引的优化方法
  9. 处理器后面的字母含义_CPU后面的数字和字母都是什么意思?全面解答。
  10. SSR、SSE、SST、判定系数(可决系数、拟合优度)的计算公式