CRM系统对接

概述

目前环信移动客服中的默认访客信息包括:访客昵称、真实姓名、ID、手机、QQ、邮箱、公司、备注等,仅可满足访客基础需求。因具体业务模式不同,当您的企业需要展现更详细、个性化的访客信息时,环信提供了CRM系统对接的功能。

集成方案

可通过 Iframe 窗口集成方式实现访客订单系统或访客关系管理系统的集成。这样当访客发起客服请求的时候,坐席端就可以看到该访客的详细信息以及该访客的订单系统。同理如果有其他第三方系统需要集成,也可以用同样方法进行集成。具体实现方案如下:

第 1 步:制作页面

开发一个web页面,技术可采用HTML/JSP/ASP等,并发布成HTTPS链接,部署到公网。

自定义信息展现功能,需要客户开发一个HTML/JSP/ASP界面,然后按HTTPS协议部署在公网上,以供环信移动客服访问。

默认情况,环信会传递两个参数来供客户界面备用,web页面可获取到的两个参数。这两个参数页面可以从Parameter里取到并使用,如果使用不到,忽略即可。

  • 第一个参数:easemobId(关联的IM服务号,忽略即可)
  • 第二个参数:visitorImId(访客ID)
    • 对于APP/网页渠道访客,visitorImId是访客的环信IM号
    • 对于微信渠道访客,visitorImId是该访客在相应微信公众号上的openid
    • 对于微博渠道访客,visitorImId是该访客在相应微博账号上的粉丝id

此HTTPS页面环信会默认传递两个URL参数,以供客户进行一般化的信息查询。除此之外,如果还需要特定参数,则客户可通过APP发送一个命令消息把参数传递给环信,环信会将这些参数序列化后,重新刷新自定义信息页面。

第 2 步:在环信系统中配置自定义信息接口

在自定义信息设置中填上这个可以公网访问的HTTPS地址并保存,这样就开启了环信自动访问该地址的功能。

具体位置:使用环信移动客服管理员账号登录,选择“管理员模式→设置→自定义信息接口”。该URL路径为该页面能被访问的路径即可,比如:https://IP:port/db.jsp

自定义信息接口

如果需要在提交给客户CRM系统的请求中支持对访客信息相关的参数进行加密,可以设置一个长度大于8位的加密密钥,用于对访客信息相关的参数进行加密,在收到加密的请求后,客户的CRM系统需要使用同样的密钥进行解密。目前采用基于DES算法的对称加密方式。

注:加密机制并不处理以下默认的参数:easemobId(关联的IM服务号)和visitorImId(访客ID)。

设置加密密钥后,客服后台会使用这个密钥加密访客信息相关的参数,客服工作台根据用户设置的URL和加密后的参数,构造一个发给客户CRM系统的请求。CRM系统在收到这个请求后,首先需要使用同样的加密算法和密钥解密相关的参数,然后处理该请求,并向环信移动客服系统返回查询后的访客信息页面。

消息格式示例:

加密前:

"ext": {
        "weichat": {
            "ctrlType": "inviteEnquiry"
        },
        "cmd": {
            "updateVisitorInfoSrc": {
                "params": {
                    "name": "Jack",
                    "age": "40",
                    "sex": "man"
                }
            }
        }
}

加密后:

"ext": {
    "weichat": {
        "ctrlType": "inviteEnquiry"
    },
    "cmd": {
        "updateVisitorInfoSrc": {
            "params": {
                "name": "877523f86f18f55e",
                "age": "e86b4e789891107c",
                "sex": "d221cba8e6efd0ad"
            }
        }
    }
}

注:在没有设置加密密钥的情况下,所有参数采用明文传输,客户的CRM系统一侧也无需进行解密。

第 3 步:自定义查询参数(可选)

编写APP客户端自定义消息的程序。(该步骤可选,如果不需要特殊传参数,可忽略该步骤)

第 4 步:测试

打开APP访客端,点击“联系客服”按钮,发送一条消息到客服人员。观察环信移动客服服务端是否能正常收到消息,观察客服后台系统最右侧的资料Tab页是否显示web页面访客信息,观察切换用户是否能正常显示不同的用户信息、订单信息等。

db.jsp的示例代码如下:

<%@ page import="javax.naming.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.transaction.*" %>
CRM Integration Test:<br>
<%
    String easemobId = request.getParameter("easemobId");//该参数为环信关联的IM服务号,忽略即可
    /**
    * visitorImId是环信ID,可通过该ID查询到用户业务ID,进而查询到订单信息,客户详细信息等。
    * 如果需要额外不能获取的信息,可以借助params里面传递参数来获得。
    */
    String visitorImId = request.getParameter("visitorImId");
    String specialID1 = request.getParameter("specialID1");//可选
    String specialID2 = request.getParameter("specialID2");//可选
    String specialID3 = request.getParameter("specialID3");//可选
    InitialContext ctx = new InitialContext();
    Connection con = null;
	Statement stmt = null;
	ResultSet rs = null;
    try{
        DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/datasource_name");
  		con = ds.getConnection();
  		stmt = con.createStatement();		
  		rs = stmt.executeQuery("select * from user where id = ‘"+ visitorImId + “’” );
    	while(rs.next()) {
    		String name = rs.getString(2);
    		System.out.println("name :" + name);
		String phone = rs.getString(3);
		System.out.println("phone :" + phone);
		String address = rs.getString(4);
		System.out.println("Address :" + address);
		out.println("easemobId :" + easemobId);
		out.println("<br>");
    		out.println("name :" + name);
    		out.println("<br>");
    		out.println("phone :" + phone);
    		out.println("<br>");
    		out.println("address :" + address);
    		out.println("<br>");
    	}
    }catch(Exception e) {
            e.printStackTrace();
    }finally {
        try {
        	stmt.close();
        }catch(Exception e1){
		out.println(e1.toString());
		}    
        try {
        	con.close();
        }catch(Exception e2){}
    }
%>