#!/usr/bin/env python
# encoding: utf-8
"""
wangwang.py
Created by 徐 光硕 on 2011-11-18.
Copyright (c) 2011 __MyCompanyName__. All rights reserved.
"""
from api import TOP, TOPRequest, TOPDate
[docs]class EService(TOP):
'''wangwang.eservice'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(EService, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.models = {'waiting_time_list_on_days':WaitingTimesOnDay, 'msgs':Msg, 'chatpeers':Chatpeer, 'staff_eval_details':EvalDetail, 'staff_eval_stat_on_days':StaffEvalStatOnDay, 'group_member_list':GroupMember, 'loginlogs':LoginLog, 'non_reply_stat_on_days':NonReplyStatOnDay,'online_times_list_on_days':OnlineTimesOnDay,'reply_stat_list_on_days':ReplyStatOnDay,'staff_stream_weights':StreamWeight}
self.fields = ['waiting_time_list_on_days','msgs','ret','count', 'chatpeers', 'log_file_url', 'staff_eval_details', 'result_code','result_count', 'staff_eval_stat_on_days', 'group_member_list', 'user_id', 'loginlogs','non_reply_stat_on_days','online_times_list_on_days','reply_stat_list_on_days', 'staff_stream_weights','result_code','result_count','total_weight']
[docs] def avgwaittime_get(self, service_staff_id, start_date, end_date, session):
'''taobao.wangwang.eservice.avgwaittime.get 平均等待时长
根据客服ID和日期,获取该客服"当日接待的所有客户的平均等待时长"。 备注:
- 1、如果是操作者ID=被查者ID,返回被查者ID的"当日接待的所有客户的平均等待时长"。
- 2、如果操作者是组管理员,他可以查询他的组中的所有子帐号的"当日接待的所有客户的平均等待时长"。
- 3、如果操作者是主账户,他可以查询所有子帐号的"当日接待的所有客户的平均等待时长"。
- 4、被查者ID可以是多个,用 "," 隔开,id数不能超过30。
- 5、开始时间与结束时间之间的间隔不能超过7天
- 6、不能查询90天以前的数据 7、不能查询当天的记录'''
request = TOPRequest('taobao.wangwang.eservice.avgwaittime.get')
request['service_staff_id'] = service_staff_id
request['start_date'] = start_date
request['end_date'] = end_date
self.create(self.execute(request, session))
return self.waiting_time_list_on_days
[docs] def chatlogs_get(self, chat_id, start_date, end_date, charset, session):
'''taobao.wangwang.eservice.chatpeers.get 获取聊天对象列表,查询时间段<=7天,只支持xml返回
获取聊天对象列表,查询时间段<=7天,只支持xml返回'''
request = TOPRequest('taobao.wangwang.eservice.chatlog.get')
request['chat_id'] = chat_id
request['charset'] = charset
request['start_date'] = start_date
request['end_date'] = end_date
self.create(self.execute(request, session))
return self.chatpeers
[docs] def chatpeers_get(self, from_id, to_id, start_date, end_date, session):
'''taobao.wangwang.eservice.chatpeers.get 获取聊天对象列表,查询时间段<=7天,只支持xml返回'''
request = TOPRequest('taobao.wangwang.eservice.chatpeers.get')
request['from_id'] = from_id
request['to_id'] = to_id
request['start_date'] = start_date
request['end_date'] = end_date
self.create(self.execute(request, session))
return self.msgs
[docs] def chatrecord_get(self, service_staff_id, start_date, end_date, session):
'''taobao.wangwang.eservice.chatrecord.get 聊天记录查询
该接口会返回一个聊天记录的下载地址。 请于5分钟以后使用该链接下载(因为文件大小的不同,生成日志的时间会延长到50分钟),该链接有如下限制:
- 1.该链接的有效期为3个小时,逾期作废。
- 2.同一链接只能使用一次。
用户点击地址,下载聊天记录压缩包(压缩包中含有1个文件或多个文件,查询了几个用户的聊天记录,就含有几个文本文件)。 备注:
- 1、如果是操作者ID=被查者ID,返回被查者ID的"聊天记录"。
- 2、如果操作者是组管理员,他可以查询他的组中的所有子帐号的"聊天记录"。
- 3、如果操作者是主账户,他可以查询所有子帐号的"聊天记录"。
- 4、被查者ID可以是多个,用 "," 隔开,id数不能超过30。
- 5、开始时间与结束时间之间的间隔不能超过7天
- 6、不能查询30天以前的记录
- 7、不能查询当天的数据'''
request = TOPRequest('taobao.wangwang.eservice.chatrecord.get')
request['service_staff_id'] = service_staff_id
request['start_date'] = start_date
request['end_date'] = end_date
self.create(self.execute(request, session))
return self.log_file_url
[docs] def evals_get(self, service_staff_id, start_date, end_date, session):
'''taobao.wangwang.eservice.evals.get 获取评价详细
根据用户id查询用户对应的评价详细情况, 主账号id可以查询店铺内子账号的评价 组管理员可以查询组内账号的评价 非管理员的子账号可以查自己的评价'''
request = TOPRequest('taobao.wangwang.eservice.evals.get')
request['service_staff_id'] = service_staff_id
request['start_date'] = start_date
request['end_date'] = end_date
self.create(self.execute(request, session))
return self.staff_eval_details
[docs] def evaluation_get(self, service_staff_id, start_date, end_date, session):
'''taobao.wangwang.eservice.evaluation.get 客服评价统计
根据操作者ID,返回被查者ID指定日期内每个帐号每日的"客服评价统计" 备注:
- 1、如果是操作者ID=被查者ID,返回被查者ID的"客服评价统计"。
- 2、如果操作者是组管理员,他可以查询他的组中的所有子帐号的"客服评价统计"。
- 3、如果操作者是主账户,他可以查询所有子帐号的"客服评价统计"。
- 4、被查者ID可以是多个,用 "," 隔开,id数不能超过30。
- 5、开始时间与结束时间之间的间隔不能超过7天
- 6、不能查询90天以前的数据
- 7、不能查询当天的记录'''
request = TOPRequest('taobao.wangwang.eservice.evaluation.get')
request['service_staff_id'] = service_staff_id
request['start_date'] = start_date
request['end_date'] = end_date
self.create(self.execute(request, session))
return self.staff_eval_stat_on_days
[docs] def groupmember_get(self, manager_id, session):
'''taobao.wangwang.eservice.groupmember.get 获取组成员列表
用某个组管理员账号查询,返回该组组名、和该组所有组成员ID(E客服的分流设置)。 用旺旺主帐号查询,返回所有组的组名和该组所有组成员ID。 返回的组成员ID可以是多个,用 "," 隔开。 被查者ID只能传入一个。 组成员中排名最靠前的ID是组管理员ID'''
request = TOPRequest('taobao.wangwang.eservice.groupmember.get')
request['manager_id'] = manager_id
self.create(self.execute(request, session))
return self.group_member_list
[docs] def loginlogs_get(self, service_staff_id, start_date, end_date, session):
'''taobao.wangwang.eservice.loginlogs.get 获取登录日志
通过用户id查询用户自己或者子账户的登录日志: 主账号可以查询自己和店铺子账户的登录日志 组管理员可以查询自己和组内子账号的登录日志 非组管理员的子账户只能查询自己的登录日志'''
request = TOPRequest('taobao.wangwang.eservice.loginlogs.get')
request['service_staff_id'] = service_staff_id
request['start_date'] = start_date
request['end_date'] = end_date
self.create(self.execute(request, session))
return self.loginlogs
[docs] def noreplynum_get(self, service_staff_id, start_date, end_date, session):
'''taobao.wangwang.eservice.noreplynum.get 客服未回复人数
根据操作者ID,返回被查者ID指定日期内每个帐号每日的"未回复情况" 备注:
- 1、如果是操作者ID=被查者ID,返回被查者ID的"未回复情况"(未回复人数、未回复的ID)。
- 2、如果操作者是组管理员,他可以查询他的组中的所有子帐号的"未回复情况"。
- 3、如果操作者是主账户,他可以查询所有子帐号的"未回复情况"。
- 4、被查者ID可以是多个,用 "," 隔开,id数不能超过30。
- 5、开始时间与结束时间之间的间隔不能超过7天
- 6、不能查询90天以前的数据
- 7、不能查询当天的记录'''
request = TOPRequest('taobao.wangwang.eservice.noreplynum.get')
request['service_staff_id'] = service_staff_id
request['start_date'] = start_date
request['end_date'] = end_date
self.create(self.execute(request, session))
return self.non_reply_stat_on_days
[docs] def onlinetime_get(self, service_staff_id, start_date, end_date, session):
'''taobao.wangwang.eservice.onlinetime.get 日累计在线时长
描述:根据客服ID和日期,获取该客服"当日在线时长"。 备注:
- 1、如果是操作者ID=被查者ID,返回被查者ID的"当日在线时长"。
- 2、如果操作者是组管理员,他可以查询他的组中的所有子帐号的"当日在线时长"。
- 3、如果操作者是主账户,他可以查询所有子帐号的"当日在线时长"。
- 4、被查者ID可以是多个,用 "," 隔开,id数不能超过30。
- 5、日累计在线时长定义:当日该用户累计的旺旺在线时长
- 6、开始时间与结束时间之间的间隔不能超过7天
- 7、不能查询90天以前的数据
- 8、不能查询当天的记录'''
request = TOPRequest('taobao.wangwang.eservice.onlinetime.get')
request['service_staff_id'] = service_staff_id
request['start_date'] = start_date
request['end_date'] = end_date
self.create(self.execute(request, session))
return self.online_times_list_on_days
[docs] def receivenum_get(self, service_staff_id, start_date, end_date, session):
'''taobao.wangwang.eservice.receivenum.get 客服接待数
根据操作者ID,返回被查者ID指定时间段内每个帐号的"已接待人数" 备注:
- 1、如果是操作者ID=被查者ID,返回被查者ID的"已接待人数"。
- 2、如果操作者是组管理员,他可以查询他的组中的所有子帐号的"已接待人数"。
- 3、如果操作者是主账户,他可以查询所有子帐号的"已接待人数"。
- 4、被查者ID可以是多个,用 "," 隔开,id数不能超过30。
- 5、规则:某客服在1天内和同一个客户交流了多次,已回复人数算1。
- 6、"已接待人数"定义:买家、卖家彼此发过至少1条消息 ,不论谁先发都可以。 4、被查者ID可以是多个,用 "," 隔开,id数不能超过30。
- 7、开始时间与结束时间之间的间隔不能超过7天
- 8、不能查询90天以前的数据
- 9、不能查询当天的记录'''
request = TOPRequest('taobao.wangwang.eservice.receivenum.get')
request['service_staff_id'] = service_staff_id
request['start_date'] = start_date
request['end_date'] = end_date
self.create(self.execute(request, session))
return self.reply_stat_list_on_days
[docs] def streamweigths_get(self, session):
'''taobao.wangwang.eservice.streamweigths.get 获取分流权重接口
获取当前登录用户自己的店铺内的分流权重设置'''
request = TOPRequest('taobao.wangwang.eservice.streamweigths.get')
self.create(self.execute(request, session))
return self.staff_stream_weights
[docs]class WaitingTimesOnDay(TOP):
'''客户等待(客服)平均时长列表'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(WaitingTimesOnDay, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.models = {'waiting_date':TOPDate, 'waiting_time_by_ids':WaitingTimeById}
self.fields = ['waiting_date','waiting_time_by_ids']
[docs]class NonReplyStatOnDay(TOP):
'''未回复统计列表(按天)'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(NonReplyStatOnDay, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.models = {'nonreply_date':TOPDate, 'nonreply_stat_by_ids':NonreplyStatById}
self.fields = ['nonreply_date','nonreply_stat_by_ids']
[docs]class StaffEvalStatOnDay(TOP):
'''客服评价统计列表(按天)'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(StaffEvalStatOnDay, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.models = {'eval_date':TOPDate, 'staff_eval_stat_by_ids':StaffEvalStatById}
self.fields = ['eval_date','staff_eval_stat_by_ids']
[docs]class OnlineTimesOnDay(TOP):
'''某天的客服在线时长列表'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(OnlineTimesOnDay, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.models = {'online_date':TOPDate, 'online_time_by_ids':OnlineTimeById}
self.fields = ['online_date','online_time_by_ids']
[docs]class Msg(TOP):
'''聊天消息内容'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(Msg, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.fields = ['direction','time','content']
[docs]class NonreplyStatById(TOP):
'''客服未回复统计'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(NonreplyStatById, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.fields = ['service_staff_id','non_reply_num','non_reply_customId']
[docs]class StaffEvalStatById(TOP):
'''客服评价统计'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(StaffEvalStatById, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.models = {'evaluations':Evaluation}
self.fields = ['service_staff_id','evaluations']
[docs]class ReplyStatOnDay(TOP):
'''(某天)回复统计列表'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(ReplyStatOnDay, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.models = {'reply_date':TOPDate, 'reply_stat_by_ids':ReplyStatById}
self.fields = ['reply_date','reply_stat_by_ids']
[docs]class Evaluation(TOP):
'''客服评价'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(Evaluation, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.fields = ['evaluation_name','evaluation_num']
[docs]class OnlineTimeById(TOP):
'''在线时长'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(OnlineTimeById, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.fields = ['service_staff_id','online_times']
[docs]class WaitingTimeById(TOP):
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
'''平均等待时长'''
super(WaitingTimeById, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.fields = ['service_staff_id','avg_waiting_times']
[docs]class ReplyStatById(TOP):
'''客服回复统计'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(ReplyStatById, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.fields = ['user_id','reply_num']
[docs]class LoginLog(TOP):
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
'''登录日志'''
super(LoginLog, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.fields = ['time','type']
[docs]class EvalDetail(TOP):
'''评价详细'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(EvalDetail, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.models = {'send_time':TOPDate, 'eval_time':TOPDate}
self.fields = ['eval_sender','eval_recer','send_time','eval_time','eval_code']
[docs]class StreamWeight(TOP):
'''分流权重'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(StreamWeight, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.fields = ['user','weight']
[docs]class Chatpeer(TOP):
'''聊天对象ID列表'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(Chatpeer, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.fields = ['uid','date']
[docs]class GroupMember(TOP):
'''组及其成员列表'''
def __init__(self, API_KEY=None, APP_SECRET=None, ENVIRONMENT=None):
super(GroupMember, self).__init__( API_KEY, APP_SECRET, ENVIRONMENT )
self.fields = ['group_name','member_list','group_id']