61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
import httpx
|
|
from app.services.token_manager import get_access_token
|
|
|
|
|
|
WECHAT_API_BASE = "https://qyapi.weixin.qq.com"
|
|
|
|
|
|
async def send_msg(touser: str, open_kfid: str, msgtype: str, content: str) -> dict:
|
|
"""主动发送消息给客户"""
|
|
token = await get_access_token()
|
|
url = f"{WECHAT_API_BASE}/cgi-bin/kf/send_msg?access_token={token}"
|
|
|
|
body = {
|
|
"touser": touser,
|
|
"open_kfid": open_kfid,
|
|
"msgtype": msgtype,
|
|
}
|
|
if msgtype == "text":
|
|
body["text"] = {"content": content}
|
|
|
|
async with httpx.AsyncClient() as client:
|
|
resp = await client.post(url, json=body)
|
|
return resp.json()
|
|
|
|
|
|
async def list_accounts(offset: int = 0, limit: int = 100) -> dict:
|
|
"""获取客服账号列表"""
|
|
access_token = await get_access_token()
|
|
url = f"{WECHAT_API_BASE}/cgi-bin/kf/account/list?access_token={access_token}"
|
|
body = {"offset": offset, "limit": limit}
|
|
async with httpx.AsyncClient() as client:
|
|
resp = await client.post(url, json=body)
|
|
return resp.json()
|
|
|
|
|
|
async def sync_msg(open_kfid: str, cursor: str = "", token: str = "", limit: int = 100) -> dict:
|
|
"""拉取客服消息(轮询模式)"""
|
|
access_token = await get_access_token()
|
|
url = f"{WECHAT_API_BASE}/cgi-bin/kf/sync_msg?access_token={access_token}"
|
|
|
|
body = {
|
|
"cursor": cursor,
|
|
"token": token,
|
|
"limit": limit,
|
|
"open_kfid": open_kfid,
|
|
}
|
|
|
|
async with httpx.AsyncClient() as client:
|
|
resp = await client.post(url, json=body)
|
|
return resp.json()
|
|
|
|
|
|
async def list_accounts(offset: int = 0, limit: int = 100) -> dict:
|
|
"""获取客服账号列表"""
|
|
access_token = await get_access_token()
|
|
url = f"{WECHAT_API_BASE}/cgi-bin/kf/account/list?access_token={access_token}"
|
|
body = {"offset": offset, "limit": limit}
|
|
async with httpx.AsyncClient() as client:
|
|
resp = await client.post(url, json=body)
|
|
return resp.json()
|