All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.foxinmy.weixin4j.mp.api.CustomApi Maven / Gradle / Ivy

There is a newer version: 1.10.2
Show newest version
package com.foxinmy.weixin4j.mp.api;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.apache.ByteArrayBody;
import com.foxinmy.weixin4j.http.apache.FormBodyPart;
import com.foxinmy.weixin4j.http.weixin.JsonResult;
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
import com.foxinmy.weixin4j.model.Token;
import com.foxinmy.weixin4j.mp.model.CustomRecord;
import com.foxinmy.weixin4j.mp.model.KfAccount;
import com.foxinmy.weixin4j.mp.model.KfSession;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.util.DigestUtil;
import com.foxinmy.weixin4j.util.IOUtil;

/**
 * 多客服API
 * 
 * @className CustomApi
 * @author jy
 * @date 2014年11月16日
 * @since JDK 1.7
 * @see 多客服说明
 * @see多客服说明
 */
public class CustomApi extends MpApi {

	private final TokenHolder tokenHolder;

	public CustomApi(TokenHolder tokenHolder) {
		this.tokenHolder = tokenHolder;
	}

	/**
	 * 客服聊天记录
	 * 
	 * @param openId
	 *            用户标识 可为空
	 * @param starttime
	 *            查询开始时间
	 * @param endtime
	 *            查询结束时间 每次查询不能跨日查询
	 * @param pagesize
	 *            每页大小 每页最多拉取50条
	 * @param pageindex
	 *            查询第几页 从1开始
	 * @throws WeixinException
	 * @see com.foxinmy.weixin4j.mp.model.CustomRecord
	 * @see 查询客服聊天记录
	 * @see 查询客服聊天记录
	 */
	public List getCustomRecord(String openId, Date starttime,
			Date endtime, int pagesize, int pageindex) throws WeixinException {
		JSONObject obj = new JSONObject();
		obj.put("openId", openId == null ? "" : openId);
		obj.put("starttime", starttime.getTime() / 1000);
		obj.put("endtime", endtime.getTime() / 1000);
		obj.put("pagesize", pagesize > 1000 ? 1000 : pagesize);
		obj.put("pageindex", pageindex);
		String custom_record_uri = getRequestUri("custom_record_uri");
		Token token = tokenHolder.getToken();
		WeixinResponse response = weixinClient.post(
				String.format(custom_record_uri, token.getAccessToken()),
				obj.toJSONString());

		String text = response.getAsJson().getString("recordlist");
		return JSON.parseArray(text, CustomRecord.class);
	}

	/**
	 * 获取公众号中所设置的客服基本信息,包括客服工号、客服昵称、客服登录账号
	 * 
	 * @param isOnline
	 *            是否在线 为ture时可以可以获取客服在线状态(手机在线、PC客户端在线、手机和PC客户端全都在线)、客服自动接入最大值、
	 *            客服当前接待客户数
	 * @return 多客服信息列表
	 * @see com.foxinmy.weixin4j.mp.model.KfAccount
	 * @see 获取客服基本信息
	 * @see 获取客服基本信息
	 * @see 获取在线客服接待信息
	 * @see 获取在线客服接待信息
	 * @throws WeixinException
	 */
	public List listKfAccount(boolean isOnline)
			throws WeixinException {
		Token token = tokenHolder.getToken();
		String text = "";
		if (isOnline) {
			String getonlinekflist_uri = getRequestUri("getonlinekflist_uri");
			WeixinResponse response = weixinClient.get(String.format(getonlinekflist_uri,
					token.getAccessToken()));
			text = response.getAsJson().getString("kf_online_list");
		} else {
			String getkflist_uri = getRequestUri("getkflist_uri");
			WeixinResponse response = weixinClient.get(String.format(getkflist_uri,
					token.getAccessToken()));
			text = response.getAsJson().getString("kf_list");
		}
		return JSON.parseArray(text, KfAccount.class);
	}

	/**
	 * 新增客服账号
	 * 
	 * @param id
	 *            完整客服账号,格式为:账号前缀@公众号微信号,账号前缀最多10个字符,必须是英文或者数字字符。如果没有公众号微信号,
	 *            请前往微信公众平台设置。
	 * @param name
	 *            客服昵称,最长6个汉字或12个英文字符
	 * @param pwd
	 *            客服账号登录密码
	 * @return 处理结果
	 * @throws WeixinException
	 * @see 客服管理接口返回码
	 * @see 新增客服账号
	 */
	public JsonResult createAccount(String id, String name, String pwd)
			throws WeixinException {
		JSONObject obj = new JSONObject();
		obj.put("kf_account", id);
		obj.put("nickname", name);
		obj.put("password", DigestUtil.MD5(pwd));
		String custom_add_uri = getRequestUri("custom_add_uri");
		Token token = tokenHolder.getToken();
		WeixinResponse response = weixinClient.post(
				String.format(custom_add_uri, token.getAccessToken()),
				obj.toJSONString());
		return response.getAsJsonResult();
	}

	/**
	 * 更新客服账号
	 * 
	 * @param id
	 *            完整客服账号,格式为:账号前缀@公众号微信号,账号前缀最多10个字符,必须是英文或者数字字符。如果没有公众号微信号,
	 *            请前往微信公众平台设置。
	 * @param name
	 *            客服昵称,最长6个汉字或12个英文字符
	 * @param pwd
	 *            客服账号登录密码
	 * @return 处理结果
	 * @throws WeixinException
	 * @see 客服管理接口返回码
	 * @see 新增客服账号
	 */
	public JsonResult updateAccount(String id, String name, String pwd)
			throws WeixinException {
		JSONObject obj = new JSONObject();
		obj.put("kf_account", id);
		obj.put("nickname", name);
		obj.put("password", DigestUtil.MD5(pwd));
		String custom_update_uri = getRequestUri("custom_update_uri");
		Token token = tokenHolder.getToken();
		WeixinResponse response = weixinClient.post(
				String.format(custom_update_uri, token.getAccessToken()),
				obj.toJSONString());
		return response.getAsJsonResult();
	}

	/**
	 * 上传客服头像
	 * 
	 * @param id
	 *            完整客服账号,格式为:账号前缀@公众号微信号
	 * @param headimg
	 *            头像图片文件必须是jpg格式,推荐使用640*640大小的图片以达到最佳效果
	 * @return 处理结果
	 * @throws WeixinException
	 * @throws IOException
	 * @see 客服管理接口返回码
	 * @see 上传客服头像
	 */
	public JsonResult uploadAccountHeadimg(String id, File headimg)
			throws WeixinException, IOException {
		Token token = tokenHolder.getToken();
		String custom_uploadheadimg_uri = getRequestUri("custom_uploadheadimg_uri");
		byte[] bytes = IOUtil.toByteArray(new FileInputStream(headimg));
		WeixinResponse response = weixinClient.post(
				String.format(custom_uploadheadimg_uri, token.getAccessToken(),
						id),
				new FormBodyPart("media", new ByteArrayBody(bytes, headimg
						.getName())));

		return response.getAsJsonResult();
	}

	/**
	 * 删除客服账号
	 * 
	 * @param id
	 *            完整客服账号,格式为:账号前缀@公众号微信号
	 * @return 处理结果
	 * @throws WeixinException
	 * @see 客服管理接口返回码
	 * @see 删除客服账号
	 */
	public JsonResult deleteAccount(String id) throws WeixinException {
		Token token = tokenHolder.getToken();
		String custom_delete_uri = getRequestUri("custom_delete_uri");
		WeixinResponse response = weixinClient.get(String.format(custom_delete_uri,
				token.getAccessToken(), id));

		return response.getAsJsonResult();
	}

	/**
	 * 创建会话
	 * 

* 开发者可以使用本接口,为多客服的客服工号创建会话,将某个客户直接指定给客服工号接待,需要注意此接口不会受客服自动接入数以及自动接入开关限制。 * 只能为在线的客服(PC客户端在线,或者已绑定多客服助手)创建会话。 *

* * @param userOpenId * 用户的userOpenId * @param kfAccount * 完整客服账号,格式为:账号前缀@公众号微信号 * @param text * 附加信息,文本会展示在客服人员的多客服客户端 * @return 处理结果 * @throws WeixinException * @see 创建会话 */ public JsonResult createKfSession(String userOpenId, String kfAccount, String text) throws WeixinException { Token token = tokenHolder.getToken(); String kfsession_create_uri = getRequestUri("kfsession_create_uri"); JSONObject obj = new JSONObject(); obj.put("openid", userOpenId); obj.put("kf_account", kfAccount); obj.put("text", text); WeixinResponse response = weixinClient.post( String.format(kfsession_create_uri, token.getAccessToken()), obj.toJSONString()); return response.getAsJsonResult(); } /** * 关闭会话 * * @param userOpenId * 用户的userOpenId * @param kfAccount * 完整客服账号,格式为:账号前缀@公众号微信号 * @param text * 附加信息,文本会展示在客服人员的多客服客户端 * @return 处理结果 * @throws WeixinException * @see 创建会话 */ public JsonResult closeKfSession(String userOpenId, String kfAccount, String text) throws WeixinException { Token token = tokenHolder.getToken(); String kfsession_close_uri = getRequestUri("kfsession_close_uri"); JSONObject obj = new JSONObject(); obj.put("openid", userOpenId); obj.put("kf_account", kfAccount); obj.put("text", text); WeixinResponse response = weixinClient.post( String.format(kfsession_close_uri, token.getAccessToken()), obj.toJSONString()); return response.getAsJsonResult(); } /** * 获取客户的会话状态:获取客户当前的会话状态。 * * @param userOpenId * 用户的openid * @return 会话对象 * @throws WeixinException * @see com.foxinmy.weixin4j.mp.model.KfSession * @see 获取会话状态 */ public KfSession getKfSession(String userOpenId) throws WeixinException { Token token = tokenHolder.getToken(); String kfsession_get_uri = getRequestUri("kfsession_get_uri"); WeixinResponse response = weixinClient.get(String.format(kfsession_get_uri, token.getAccessToken(), userOpenId)); KfSession session = response .getAsObject(new TypeReference() { }); session.setUserOpenId(userOpenId); return session; } /** * 获取客服的会话列表:获取某个客服正在接待的会话列表。 * * @param kfAccount * 完整客服账号,格式为:账号前缀@公众号微信号,账号前缀最多10个字符,必须是英文或者数字字符。 * @return 会话列表 * @throws WeixinException * @see com.foxinmy.weixin4j.mp.model.KfSession * @see 获取客服的会话列表 */ public List listKfSession(String kfAccount) throws WeixinException { Token token = tokenHolder.getToken(); String kfsession_list_uri = getRequestUri("kfsession_list_uri"); WeixinResponse response = weixinClient.get(String.format(kfsession_list_uri, token.getAccessToken(), kfAccount)); List sessionList = JSON.parseArray(response.getAsJson() .getString("sessionlist"), KfSession.class); return sessionList; } /** * 获取未接入会话列表:获取当前正在等待队列中的会话列表,此接口最多返回最早进入队列的100个未接入会话。
* 缺陷:没有count字段 * @return 会话列表 * @throws WeixinException * @see com.foxinmy.weixin4j.mp.model.KfSession * @see 获取客服的会话列表 */ public List listKfSessionWait() throws WeixinException { Token token = tokenHolder.getToken(); String kfsession_wait_uri = getRequestUri("kfsession_wait_uri"); WeixinResponse response = weixinClient.get(String.format(kfsession_wait_uri, token.getAccessToken())); List sessionList = JSON.parseArray(response.getAsJson() .getString("waitcaselist"), KfSession.class); return sessionList; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy