使用 Python 实现与扣子 (Coze) API 的回调功能
本文详细介绍了Python与Coze API的集成方法,重点讲解了OAuth2.0授权流程和JWT令牌生成。主要内容包括:1) 环境准备与依赖安装;2) 核心配置参数获取;3) JWT令牌生成与Token获取实现;4) 完整的CozeBot交互类实现,包含会话创建、消息发送接收和对话历史查询功能;5) 运行示例展示API调用全过程。通过清晰的代码示例和调试信息,为开发者提供了与Coze API集成
在当下的智能应用开发中,与第三方 API 进行高效集成是关键环节之一。本文将详细介绍如何使用 Python 实现与扣子 (Coze) API 的回调功能集成,包括 OAuth 授权流程、会话管理及消息交互的完整实现方案。
🔑 OAuth 授权流程
Coze API 采用 OAuth 2.0 授权框架,通过 JWT (JSON Web Token) 实现安全的身份验证。整个授权流程分为以下步骤:
步骤一:进入应用创建入口
在左侧导航栏点击「API 管理」,切换到「授权」标签页,点击右上角「创建新应用」,开始 OAuth 应用的创建流程。

步骤二:配置应用基本信息与权限
进入「创建新应用」页面后:
-
密钥生成:点击「+ 创建 Key」,生成用于 JWT 签名的公钥和私钥(私钥会自动下载,需妥善保管)。
-
权限配置:在「权限」区域勾选「全选」,确保应用获得 Bot 管理、会话管理、回调应用等所有必要权限,为后续 API 调用提供完整的权限支持。

🛠️ 环境准备与依赖安装
首先需要安装必要的 Python 依赖库:
pip install requests pyjwt cryptography
-
requests:用于发送 HTTP 请求与 Coze API 交互 -
pyjwt:用于生成和解析 JWT 令牌 -
cryptography:提供加密算法支持,用于 JWT 签名
⚙️ 核心配置参数
在开始编码前,需要准备以下配置参数(从 Coze 开放平台获取):
# 用户 ID
USER_ID = "..."
# 应用 ID
APP_ID = "..."
# 空间 ID
BOT_ID = "..."
# 公钥
PUBLIC_KEY = "..."
# 私钥
PRIVATE_KEY = """
-----BEGIN PRIVATE KEY-----
......
-----END PRIVATE KEY-----
"""
🔐 JWT 令牌生成与 Token 获取
实现获取访问令牌的核心函数:
def get_access_token() -> str:
# 生成 JWT
payload = {
"iat": int(time.time()),
"exp": int(time.time()) + 600, # 10分钟有效期
"jti": str(uuid.uuid4()), # 防重放攻击
"aud": "api.coze.cn",
"iss": APP_ID,
"session_name": USER_ID # 用户隔离标识
}
headers = {"kid": PUBLIC_KEY}
new_jwt = jwt.encode(payload, PRIVATE_KEY, algorithm="RS256", headers=headers)
print("【调试】生成 JWT 前 50 字符:", new_jwt[:50])
# 获取 Token
url = "https://api.coze.cn/api/permission/oauth2/token"
body = {
"grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
"duration_seconds": 86399
}
response = requests.post(url, json=body, headers={"Authorization": f"Bearer {new_jwt}"})
new_token = response.json()["access_token"]
print("【调试】获取 token 前 50 字符:", new_token[:50])
return new_token
🤖 Coze 机器人交互类实现
封装一个完整的 Coze 机器人交互类,包含会话管理和消息交互功能:
初始化与会话创建
class CozeBot:
def __init__(self, bot_id: str, user_id: str):
self.bot_id = bot_id
self.user_id = user_id
self.token = get_access_token()
self.sess_id = self.create_session()
def create_session(self) -> str:
# 创建会话
url = "https://api.coze.cn/v1/conversation/create"
body = {
"bot_id": self.bot_id,
"meta_data": {"user_id": self.user_id} # 用户隔离
}
# 重试机制
for i in range(3):
response = requests.post(url, json=body, headers={"Authorization": f"Bearer {self.token}"})
print(f"【调试】第{i + 1}次创建会话返回:", response.status_code, response.text)
if response.status_code == 200 and response.json().get("code") == 0:
return response.json()["data"]["id"]
time.sleep(2)
raise RuntimeError("创建会话连续失败")
消息发送与接收
def chat(self, query: str) -> str:
# 插入用户消息
url = f"https://api.coze.cn/v1/conversation/message/create?conversation_id={self.sess_id}"
body = {
"role": "user",
"content_type": "text",
"content": query
}
response = requests.post(url, json=body, headers={"Authorization": f"Bearer {self.token}"})
print("【调试】插入消息返回:", response.status_code, response.text)
# 发起对话请求
url = f"https://api.coze.cn/v3/chat?conversation_id={self.sess_id}"
body = {
"bot_id": self.bot_id,
"user_id": self.user_id,
"stream": False, # 流式输出开关
"auto_save_history": True,
"additional_messages": [{
"role": "user",
"type": "question",
"content_type": "text",
"content": query
}]
}
response = requests.post(url, json=body, headers={"Authorization": f"Bearer {self.token}"})
return response.json()["data"]["messages"][-1]["content"]
对话历史查询
def get_round_messages(self):
# 获取本轮对话的完整消息记录
url = f"https://api.coze.cn/v1/conversation/message/list?conversation_id={self.sess_id}"
response = requests.post(url, headers={"Authorization": f"Bearer {self.token}"})
if response.status_code != 200:
raise RuntimeError("获取对话消息失败: " + response.text)
messages_data = response.json()["data"]
return [(m["role"], m["content"]) for m in messages_data]
🚀 运行示例
if __name__ == "__main__":
# 初始化智能体
bot = CozeBot(BOT_ID, USER_ID)
# 发起对话
answer = bot.chat("你好,请介绍下你自己")
print("Bot 回答:", answer)
# 查看完整对话历史
print("\n=== 对话历史 ===")
for role, content in bot.get_round_messages():
print(f"{role}: {content}")
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)