layim php,如何通过LayuiAdminLayIMThinkphpGateway实现小程序多客服接入系统的例子
本篇文章给大家带来的内容是关于如何通过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.插入固定的接入样式 < ...
- 微信小程序在线客服接入
小程序接入微信「客服消息」功能模块,开发者只需要调用按钮,触发微信的客服消息功能即可,不需要自行在小程序中实现. 加入客服消息按钮有两个方法,大家可以根据自己的实际需求,任选一种方法. 1.插入固定的 ...
- 小程序多客服对应售前售后,或者不同的客服人员
小程序的客服是一个比较强大的功能,可以和用户进行交流,可以图文引导用户打开连接,比如关注公众号,可以图文回复用户. 需求,不如我有两个客服按钮,需要回答不同的自动回复 客服按钮A,打开售前客服 客服按 ...
- 微信小程序在线客服系统都有哪些功能?
微信小程序的用户已经破6亿,不少企业都看准了小程序这块大蛋糕.但是想要把握住小程序红利,除了做好运营推广外,用户服务也是重中之重.微信小程序自带的客服系统却很难满足用户服务的需求,于是很多小程序使用者 ...
- 微信小程序客服介绍:如何设置小程序在线客服?
其实只需要解决2个问题 第一步,在微信小程序中添加联系在线客服按钮 第二步,接入在线客服功能,设置[自动/人工/转人工]回复等 一.添加小程序客服按钮 ① 在小程序中添加客服按钮功能,点此参考官方文档 ...
- 微信小程序绑定客服,接收不到消息?
微信小程序绑定客服,无法接收用户消息 客服文档 添加客服 <button class="serviceBtn" open-type="contact"&g ...
- 小程序进入客服消息中心业务(一)
小程序进入客服消息中心业务(一) 1. 如何进入小程序客服消息中心 button按钮进入小程序客服消息中心 <button open-type="contact">点击 ...
- 许嵩音乐智能问答系统微信小程序之客服聊天室
许嵩音乐智能问答系统微信小程序之客服聊天室 项目简介. 音乐播放器搭建. 获取数据及文本分类. 智能客服聊天界面. 连接前端微信小程序输入和后端python,并返回值 连接知识图谱 你还在为因为性格腼 ...
- 小程序在线客服完整实现
1.先注册公众号>小程序(需实名认证) 2.开发>测试>上传>审核发布>发布>使用 3.公众号(订阅号或服务号)与小程序(此为在线客服)通过同一主体绑定可以打通调用 ...
最新文章
- java遍历文件目录
- 计算机管理术语路径描述的是,directory
- 04Hadoop中的setPartitionerClass/SortComparator/GroupingComparator问题
- win10安装dockerx docker的常见命令 可以子腾讯云上做做练习
- Error: Cannot find module '@babel/core'
- 每天学点Linux:一
- 数据库周刊40丨OceanBase官网上线开发者社区;人民日报关注易鲸捷;2020中国系统架构师大会10月线上召开;数据库迁移经验分享;MySQL大表超字段问题;SQL高级知识;Oracle等待事件
- uni-app项目实战
- js 微信小程序根据身份证号计算年龄
- Atcoder Beginner Contest (ABC) 237 A - E
- Vue.js尤雨溪 30分钟纪录片(中文字幕)
- c语言编程怎么样,C语言怎么样,好学吗?
- 综合应用 -- 购物车
- 第二批鸿蒙手机排名,华为郑重宣布,第二批升级鸿蒙的十款手机,荣耀30系列上榜!...
- Office Professional Plus 2019 下载安装激活
- 区块链---双花问题
- Easyui Datagrid 中用 Combotree 的显示问题
- 传智播客技术社区_播客与网络技术的未来
- 从入门到精通之专家系统CLIPS(一)CLIPS初识与概述
- arm-linux 交叉编译链接动态库使用
热门文章
- RDT 协议 (可靠数据传输协议)
- [Vue warn]: The client-side rendered virtual DOM tree is not matching server-rendered content.
- 【mysql 练习题】查询和“01”号同学所学课程完全相同的其他同学的学号
- Lab4 Architecture Lab
- iOS12加密相册、保险箱、加密相册Pro、保险箱Pro打开就闪退的,不要删除app,关闭4g和WiFi即可正常使用。
- DRAM基本单元最为通俗易懂的图文解说
- python读取docx中表格 图片_Python-docx 读写 Word 文档:插入图片、表格,设置表格样式,章节,页眉页脚等...
- 倒排索引、正排索引,以及ElasticSearch对倒排索引的优化方法
- 处理器后面的字母含义_CPU后面的数字和字母都是什么意思?全面解答。
- SSR、SSE、SST、判定系数(可决系数、拟合优度)的计算公式