环信工作原理:

一、由于环信没有直接的接口来主动调取本项目中的用户数据,所有用户信息必须在环信服务器上注册对应信息成为环信的用户;(这样才能当用户进入聊天时显示其基本信息,如:名称、昵称、电话、邮箱等);

二、客服工作台登录可以显示用户信息,可以查看用户访问轨迹,可以主动接入访客咨询等诸多功能(这些基本都不需要后端程序员编写)

下面开始后端程序员(app程序员请自行查看环信开发文档)需要接入的代码编写:

一、用户信息传递

1、先下载环信开发demo文件,提取statics、easemob.js等文件放置到项目指定目录下便于调用

如图:图片

2、编写用户信息提供接口,将本站用户基本信息return出,如下:

class  GetUser
{
public function get()
{ //给予状态初始值
$res = [
'status' =>0
]; //判断本站用户是否登录
$user_id = Yii::$app->user->id;
if ($user_id >0)
{ $user_one = User::Redis_getOne($user_id); //easemob_id为用户数据中是否有注册环信的账号id
if (empty($user_one['easemob_id']))
{
//配置文件中写入的环信参数(是公司在环信官网注册得到的信息,详情见环信文档)
$option = [
'client_id' => yii::$app->params['easemob']['client_id'],
'client_secret' => yii::$app->params['easemob']['client_secret'],
'org_name' => yii::$app->params['easemob']['org_name'],
'app_name' => yii::$app->params['easemob']['app_name'],
'base_url'=> "https://a1.easemob.com/".yii::$app->params['easemob']['org_name']."/".yii::$app->params['easemob']['app_name']."/"
]; //实例化环信类 $h = new Easemob($option); //在环信端注册用户信息
$re = $h->createUser($user_one['phone'], yii::$app->params['easemob']['default_password']); //获取环信上用户的信息到本站上
$easemob_id = $h->getUser($user_one['phone']); //添加用户相关字段值(将用户在环信上注册好的id再存入用户数据)
User::updateOne_NoRedis(['id'=>$user_one['id'], 'easemob_id'=>$easemob_id['entities'][0]['username']]); //判断注册信息是否有,如果有则注册成功,状态改为1,信息存入结果集;反之则已被注册,将用户信息直接存入结果集即可;
if ($re)
{
$res['status'] = 1;
$res['msg'] = '环信用户生成';
$res['data'] = [
'username'=>$user_one['phone'],
'password'=>yii::$app->params['easemob']['default_password'],
'nickname'=>$user_one['nickname'],
'realname'=>$user_one['realname'],
'qq'=>$user_one['qq'],
'head'=>File::getFileUrl($user_one['portrait'],100,100),
'phone'=>$user_one['phone'],
'wx'=>$user_one['wx_openid'],
];
}
}else{
$res['status'] = 1;
$res['msg'] = '环信用户找到';
$res['data'] = [
'username'=>$user_one['phone'],
'password'=>yii::$app->params['easemob']['default_password'],
'nickname'=>$user_one['nickname'],
'realname'=>$user_one['realname'],
'qq'=>$user_one['qq'],
'head'=>File::getFileUrl($user_one['portrait'],100,100),
'phone'=>$user_one['phone'],
'wx'=>$user_one['wx_openid'],
];
}
}
return $res;
}
}

2、在用户点击联系客服按钮事件时,调用上述接口,获取用户信息传到客服工作台

h5页面代码:

< a href=" " onclick="easemobim.bind({tenantId:‘注册的租户id’'})"><i class="icon"></i><span class="a_txt">在线客服</span></ a>

其中onclick为自定义按钮事件,点击启用传值动作

//打开环信客服窗口

var easemob =function(){

$.ajax({

    type:'POST',
url:ajax_url_config.my.easemob+'?access-token='+token,
success:function (User) {
var jsondata = eval("("+User+")");
} return jsondata; } ;
var easemobUser = easemob (); window.easemobim = window.easemobim || {};
easemobim.config = {
//是否隐藏小的悬浮按钮
hide: true,
//自动连接
autoConnect: true,
//环信移动客服域,固定值,请按照示例配置
domain: '//kefu.easemob.com',
//您网站上im.html文件的完整路径
path: '//你项目的域名地址/huanxin',
//访客插件static的路径
staticPath: '//你项目的域名地址/huanxin/static',
//orgName#appName
appKey: ' ',
//手机App绑定的IM号
to: ' ',
//集成用户体系,验证的方式二选一,必填,另一项为空即可
user: {
//指定用户名,集成时必填
username: easemobUser['username'],
//password验证方式
password: easemobUser['password'],
//token验证方式
token: ''
},
visitor:{
trueName: easemobUser['realname'],
qq: easemobUser['qq'],
phone: easemobUser['phone'],
companyName: '',
userNickname: easemobUser['nickname'],
description: ''
}
};

在这之前,请记得要引入之前放置在指定目录下的环信js文件:

<script type="text/javascript" src="/sea-modules/huanxin/easemob.js"></script>

自此,用户信息传递完毕,客服可以看到是哪位用户在咨询。
二、用户访问轨迹传递

1、由于文件已放置,可以省略

2、商品信息得提取接口,我就不提供代码了,与上面的第二部一样;

3、商品信息的传递,也是一样,通过ajax请求得到商品数据,传递到环信平台:

var easemobgoods = (function () {
var res ;
$.ajax({
type:'GET',
url:ajax_url_config.goods.get_attribute_url+goods_item_id,
async:false,
success:function (data) {
res = data;
} });
return res;
}); var goods = easemobgoods(); //提取环信客服传递商品数据 window.easemobim = window.easemobim || {};
easemobim.config = {
tenantId: ' ',//写入注册时得到的租户id
//orgName#appName
appKey: ' ',
//手机App绑定的IM号
to: ‘ ’,
satisfaction: true,
// //是否隐藏小的悬浮按钮
hide: true,
//自动连接
autoConnect: true,
//环信移动客服域,固定值,请按照示例配置
domain: '//kefu.easemob.com',
//您网站上im.html文件的完整路径
path: '//你项目的域名地址/huanxin',
//访客插件static的路径
staticPath: '//你项目的域名地址/huanxin/static',
//移动端点击联系客服按钮自动发送订单消息demo
extMsg: {
"imageName": goods['goods_name'],
//custom代表自定义消息,无需修改
"type": "custom",
"msgtype": {
"track": {
"title": "我正在看:",
"price": goods['price'],
"desc": goods['goods_name']+goods['color'],
"img_url": goods['goods_thumb'],
"item_url":"http://你项目的域名地址/goods/detail/"+goods['goods_item_id']
}
}
},
}

原文:https://blog.csdn.net/gaokcl/article/details/74357239

项目接入即时聊天客服系统(环信系统)PHP后端操作的更多相关文章

  1. 前端开发之旅-zopim在线即时聊天客服

    一.与潜在客户实时聊天的神奇-zopim Zopim是一款高效的可嵌入网页中去的即使通讯与网站访客信息追踪的的Web软件.知道谁在访问您的网站吗?想和他们实时交流吗?想更有效的把握商机吗?使用Zopi ...

  2. iOS聊天客服功能(Udesk)

    前言: 在商城或者需要用户和平台交流的APP中需要用到客服功能.接下来会讲解Udesk客服功能的实现.技术文档在Udesk官网可以看到,本文讲述在项目中的集成实现流程.客服使用的PC端交流工具账号在公 ...

  3. 网页调启用qq对话聊天客服窗口的链接地址方法大全(包含移动端)

    z转自:    http://www.wazhuti.com/1781.html 在PC端,腾讯的QQ软件还是应用最为广泛的即时通讯工具了,除了网站自动的一些对话软件外,qq可以有效的将用户留存下来, ...

  4. 大数据项目之_15_电信客服分析平台_01&02_项目背景+项目架构+项目实现+数据生产+数据采集/消费(存储)

    一.项目背景二.项目架构三.项目实现3.1.数据生产3.1.1.数据结构3.1.2.编写代码3.1.3.打包测试3.2.数据采集/消费(存储)3.2.1.数据采集:采集实时产生的数据到 kafka 集 ...

  5. Java项目案例:酒店前台客服管理系统

    import java.util.Scanner; public class HelloWorld { public static void main(String[] args){ String [ ...

  6. 大数据项目之_15_电信客服分析平台_03&04_数据分析

    3.3.数据分析3.3.1.Mysql 表结构设计3.3.2.需求:按照不同的维度统计通话3.3.3.环境准备3.3.4.编写代码:数据分析3.3.5.运行测试3.3.6.bug 解决 3.3.数据分 ...

  7. iOS:移动端“用户反馈和客服”的几个平台SDK的介绍

    简单阐述: 用户反馈功能几乎是每个app都有的一个功能点,通过反馈功能实现与用户的连接.沟通,随时随地收集用户意见反馈和Bug报告,即时和用户保持沟通,在一定程度上提升了app的竞争力.而给app评分 ...

  8. h5在线1v1客服|web在线客服系统|h5即时聊天

    网上有很多环信.美恰之类的客服系统,最近也使用h5+css3+fontJs+swiper+wcPop等技术架构开发了一个在线客服(1v1沟通聊天),可以应用到在线临时聊天.在线咨询等情景.实现了消息. ...

  9. PHP客服聊天

    1.基于workman框架 github:https://github.com/walkor/workerman-chat 文档:http://www.workerman.net/gatewaydoc ...

随机推荐

  1. FIR和IIR设计指标

  2. C盘清理垃圾

    经常清理C盘垃圾,会让系统运行更快,避免死机,今天教大家一种简单实用的方法,用文本文档清理垃圾: 1:在电脑桌面空白处右键-建立文本文档: 2:把以下代码复制到文本里 @echo offecho 正在 ...

  3. LA 3263 /// 欧拉定理 oj21860

    题目大意: n个端点的一笔画 第n个和第1个重合 即一笔画必定是闭合曲线 输出平面被分成的区域数 欧拉定理 V+F-E=2 即 点数+面数-边数=2 (这里的面数包括了外部) #include < ...

  4. Jmeter-----请求依赖之JsonExtractor

    层级关系填写: 1.第一个必须是$ 2.用英文状态下的  . 来代表下一个层级

  5. Ubuntu升级软件和ubuntu升级系统的命令

    sudo apt-get update: 升级安装包相关的命令,刷新可安装的软件列表(但是不做任何实际的安装动作) sudo apt-get upgrade: 进行安装包的更新(软件版本的升级) su ...

  6. scala中Tuple简单使用

    /** * Tuple简单使用记录 * 最大22个参数 */ object TupleUse { def main(args: Array[String]): Unit = { // 简单Tuple ...

  7. Windows 子网掩码

    子网掩码(subnet mask)又叫网络掩码.地址掩码.子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码.子网掩码不能单独存在,它必须结合IP地 ...

  8. day34 反射、面向对象内置方法:如__str__、面向对象的软件开发

    Python之路,Day21 = 反射.面向对象内置方法:如__str__.面向对象的软件开发 几个内置查看的方法使用 .__base__ 查看类的继承结构.mro() 对象找属性的顺序存在里面 -- ...

  9. Swig c++=>C#

    1.下载swig https://sourceforge.net/projects/swig/files/ 2.配置环境变量 path 添加你的swig路径 3.创建项目解决方案和一个win32 dl ...

  10. SDOI2018

    SD的题有点反人类啊... d1t1[SDOI2018]物理实验 感觉比较好想但不太好写,写了一半弃了 d1t2[SDOI2018]战略游戏 建出圆方树,每次建虚树,答案就是虚树上的原点个数减去询问的 ...