wechat-api
Version:
微信公共平台Node库 API
358 lines (339 loc) • 9.3 kB
JavaScript
var util = require('./util');
var wrapper = util.wrapper;
var postJSON = util.postJSON;
var path = require('path');
var fs = require('fs');
var formstream = require('formstream');
/**
* 获取客服聊天记录
* 详细请看:http://mp.weixin.qq.com/wiki/index.php?title=获取客服聊天记录
*
* Opts:
* ```
* {
* "starttime" : 123456789,
* "endtime" : 987654321,
* "openid": "OPENID", // 非必须
* "pagesize" : 10,
* "pageindex" : 1,
* }
* ```
* Examples:
* ```
* api.getRecords(opts, callback);
* ```
* Callback:
*
* - `err`, 调用失败时得到的异常
* - `result`, 调用正常时得到的对象
*
* Result:
* ```
* {
* "recordlist": [
* {
* "worker": " test1",
* "openid": "oDF3iY9WMaswOPWjCIp_f3Bnpljk",
* "opercode": 2002,
* "time": 1400563710,
* "text": " 您好,客服test1为您服务。"
* },
* {
* "worker": " test1",
* "openid": "oDF3iY9WMaswOPWjCIp_f3Bnpljk",
* "opercode": 2003,
* "time": 1400563731,
* "text": " 你好,有什么事情? "
* },
* ]
* }
* ```
* @param {Object} opts 查询条件
* @param {Function} callback 回调函数
*/
exports.getRecords = function (opts, callback) {
this.preRequest(this._getRecords, arguments);
};
/*!
* 获取客服聊天记录的未封装版本
*/
exports._getRecords = function (opts, callback) {
// https://api.weixin.qq.com/cgi-bin/customservice/getrecord?access_token=ACCESS_TOKEN
var url = this.prefix + 'customservice/getrecord?access_token=' + this.token.accessToken;
this.request(url, postJSON(opts), wrapper(callback));
};
/**
* 获取客服基本信息
* 详细请看:http://dkf.qq.com/document-3_1.html
*
* Examples:
* ```
* api.getCustomServiceList(callback);
* ```
* Callback:
*
* - `err`, 调用失败时得到的异常
* - `result`, 调用正常时得到的对象
*
* Result:
* ```
* {
* "kf_list": [
* {
* "kf_account": "test1@test",
* "kf_nick": "ntest1",
* "kf_id": "1001"
* },
* {
* "kf_account": "test2@test",
* "kf_nick": "ntest2",
* "kf_id": "1002"
* },
* {
* "kf_account": "test3@test",
* "kf_nick": "ntest3",
* "kf_id": "1003"
* }
* ]
* }
* ```
* @param {Function} callback 回调函数
*/
exports.getCustomServiceList = function (callback) {
this.preRequest(this._getCustomServiceList, arguments);
};
/*!
* 获取客服基本信息的未封装版本
*/
exports._getCustomServiceList = function (callback) {
// https://api.weixin.qq.com/cgi-bin/customservice/getkflist?access_token= ACCESS_TOKEN
var url = this.prefix + 'customservice/getkflist?access_token=' + this.token.accessToken;
this.request(url, {dataType: 'json'}, wrapper(callback));
};
/**
* 获取在线客服接待信息
* 详细请看:http://dkf.qq.com/document-3_2.html
*
* Examples:
* ```
* api.getOnlineCustomServiceList(callback);
* ```
*
* Callback:
*
* - `err`, 调用失败时得到的异常
* - `result`, 调用正常时得到的对象
*
* Result:
* ```
* {
* "kf_online_list": [
* {
* "kf_account": "test1@test",
* "status": 1,
* "kf_id": "1001",
* "auto_accept": 0,
* "accepted_case": 1
* },
* {
* "kf_account": "test2@test",
* "status": 1,
* "kf_id": "1002",
* "auto_accept": 0,
* "accepted_case": 2
* }
* ]
* }
* ```
* @param {Function} callback 回调函数
*/
exports.getOnlineCustomServiceList = function (callback) {
this.preRequest(this._getOnlineCustomServiceList, arguments);
};
/*!
* 获取在线客服接待信息的未封装版本
*/
exports._getOnlineCustomServiceList = function (callback) {
// https://api.weixin.qq.com/cgi-bin/customservice/getonlinekflist?access_token= ACCESS_TOKEN
var url = this.prefix + 'customservice/getonlinekflist?access_token=' + this.token.accessToken;
this.request(url, {dataType: 'json'}, wrapper(callback));
};
/**
* 添加客服账号
* 详细请看:http://mp.weixin.qq.com/wiki/9/6fff6f191ef92c126b043ada035cc935.html
*
* Examples:
* ```
* api.addKfAccount('test@test', 'nickname', 'password', callback);
* ```
*
* Callback:
*
* - `err`, 调用失败时得到的异常
* - `result`, 调用正常时得到的对象
*
* Result:
* ```
* {
* "errcode" : 0,
* "errmsg" : "ok",
* }
* ```
* @param {String} account 账号名字,格式为:前缀@公共号名字
* @param {String} nick 昵称
* @param {String} password 密码,可以直接传递明文,wechat模块自动进行md5加密
* @param {Function} callback 回调函数
*/
exports.addKfAccount = function (account, nick, password, callback) {
this.preRequest(this._addKfAccount, arguments);
};
var md5 = function (input) {
var crypto = require('crypto');
var hash = crypto.createHash('md5');
return hash.update(input).digest('hex');
};
/*!
* 添加客服账号的未封装版本
*/
exports._addKfAccount = function (account, nick, password, callback) {
// https://api.weixin.qq.com/customservice/kfaccount/add?access_token=ACCESS_TOKEN
var prefix = 'https://api.weixin.qq.com/';
var url = prefix + 'customservice/kfaccount/add?access_token=' + this.token.accessToken;
var data = {
"kf_account": account,
"nickname": nick,
"password": md5(password),
};
this.request(url, postJSON(data), wrapper(callback));
};
/**
* 设置客服账号
* 详细请看:http://mp.weixin.qq.com/wiki/9/6fff6f191ef92c126b043ada035cc935.html
*
* Examples:
* ```
* api.updateKfAccount('test@test', 'nickname', 'password', callback);
* ```
*
* Callback:
*
* - `err`, 调用失败时得到的异常
* - `result`, 调用正常时得到的对象
*
* Result:
* ```
* {
* "errcode" : 0,
* "errmsg" : "ok",
* }
* ```
* @param {String} account 账号名字,格式为:前缀@公共号名字
* @param {String} nick 昵称
* @param {String} password 密码,可以直接传递明文,wechat模块自动进行md5加密
* @param {Function} callback 回调函数
*/
exports.updateKfAccount = function (account, nick, password, callback) {
this.preRequest(this._updateKfAccount, arguments);
};
/*!
* 设置客服账号的未封装版本
*/
exports._updateKfAccount = function (account, nick, password, callback) {
// https://api.weixin.qq.com/customservice/kfaccount/add?access_token=ACCESS_TOKEN
var prefix = 'https://api.weixin.qq.com/';
var url = prefix + 'customservice/kfaccount/update?access_token=' + this.token.accessToken;
var data = {
"kf_account": account,
"nickname": nick,
"password": md5(password),
};
this.request(url, postJSON(data), wrapper(callback));
};
/**
* 删除客服账号
* 详细请看:http://mp.weixin.qq.com/wiki/9/6fff6f191ef92c126b043ada035cc935.html
*
* Examples:
* ```
* api.deleteKfAccount('test@test', callback);
* ```
*
* Callback:
*
* - `err`, 调用失败时得到的异常
* - `result`, 调用正常时得到的对象
*
* Result:
* ```
* {
* "errcode" : 0,
* "errmsg" : "ok",
* }
* ```
* @param {String} account 账号名字,格式为:前缀@公共号名字
* @param {Function} callback 回调函数
*/
exports.deleteKfAccount = function (account, callback) {
this.preRequest(this._deleteKfAccount, arguments);
};
/*!
* 删除客服账号的未封装版本
*/
exports._deleteKfAccount = function (account, callback) {
// https://api.weixin.qq.com/customservice/kfaccount/del?access_token=ACCESS_TOKEN
var prefix = 'https://api.weixin.qq.com/';
var url = prefix + 'customservice/kfaccount/del?access_token=' + this.token.accessToken + '&kf_account=' + account;
this.request(url, {dataType: 'json'}, wrapper(callback));
};
/**
* 设置客服头像
* 详细请看:http://mp.weixin.qq.com/wiki/9/6fff6f191ef92c126b043ada035cc935.html
*
* Examples:
* ```
* api.setKfAccountAvatar('test@test', '/path/to/avatar.png', callback);
* ```
*
* Callback:
*
* - `err`, 调用失败时得到的异常
* - `result`, 调用正常时得到的对象
*
* Result:
* ```
* {
* "errcode" : 0,
* "errmsg" : "ok",
* }
* ```
* @param {String} account 账号名字,格式为:前缀@公共号名字
* @param {String} filepath 头像路径
* @param {Function} callback 回调函数
*/
exports.setKfAccountAvatar = function (account, filepath, callback) {
this.preRequest(this._setKfAccountAvatar, arguments);
};
/*!
* 上传多媒体文件的未封装版本
*/
exports._setKfAccountAvatar = function (account, filepath, callback) {
// http://api.weixin.qq.com/customservice/kfaccount/uploadheadimg?access_token=ACCESS_TOKEN&kf_account=KFACCOUNT
var that = this;
fs.stat(filepath, function (err, stat) {
if (err) {
return callback(err);
}
var form = formstream();
form.file('media', filepath, path.basename(filepath), stat.size);
var prefix = 'http://api.weixin.qq.com/';
var url = prefix + 'customservice/kfaccount/uploadheadimg?access_token=' + that.token.accessToken + '&kf_account=' + account;
var opts = {
dataType: 'json',
type: 'POST',
timeout: 60000, // 60秒超时
headers: form.headers(),
stream: form
};
that.request(url, opts, wrapper(callback));
});
};