跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonSaaSAI

Python 实现 Coze API 集成:OAuth 授权与消息交互

介绍如何使用 Python 集成扣子(Coze)API,实现 OAuth 2.0 授权认证及机器人交互功能。内容包括环境依赖安装、JWT 令牌生成逻辑、访问令牌获取流程,以及封装完整的 CozeBot 类进行会话创建、消息发送与历史查询。通过 requests 和 pyjwt 库完成 HTTP 请求与签名验证,提供从初始化到对话运行的完整代码示例,帮助开发者快速接入 Coze 智能体服务。

信号故障发布于 2026/3/28更新于 2026/10/26109 浏览

在智能应用开发中,与第三方 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}")

目录

  1. 🔑 OAuth 授权流程
  2. 步骤一:进入应用创建入口
  3. 步骤二:配置应用基本信息与权限
  4. 🛠️ 环境准备与依赖安装
  5. ⚙️ 核心配置参数
  6. 用户 ID
  7. 应用 ID
  8. 空间 ID
  9. 公钥
  10. 私钥
  11. 🔐 JWT 令牌生成与 Token 获取
  12. 🤖 Coze 机器人交互类实现
  13. 初始化与会话创建
  14. 消息发送与接收
  15. 对话历史查询
  16. 🚀 运行示例

更多推荐文章

查看全部
  • 入职未满三年的工作总结与经验复盘
  • OpenClaw 暴露面分析:AI 代理框架的安全隐患与防护
  • Python tkinter 实现随机生日祝福弹窗实战
  • Google Colab 免费环境部署 LLaMA-13B 与 LangChain 实践
  • 国内大模型岗位面试经验总结与面经分享
  • 6 篇新论文:记忆、长上下文、医疗评测与机器人策略
  • 前端地图开发:主流 SDK 引入方式与初始化配置详解
  • faster-whisper 快速部署与性能优化指南
  • 自然语言处理在教育领域的应用与实战
  • 本地代码上传 Gitee 实战:Git 配置与推送详解
  • 深入解析 LlamaIndex Workflows:基于 Workflows 构建 ReAct 模式 AI 智能体
  • TypeScript 核心概念与高频面试题解析
  • Flutter 2 迁移实践与空安全详解
  • C++26 反射机制概述与典型应用场景
  • Ubuntu 22.04 离线部署 Qwen3-4B 模型:vLLM 与 Docker 多卡配置指南
  • 基于 OpenClaw 与优云智算的 AI 自动化创作及公众号发布流程
  • Python+AI 入门完整指南
  • Trae 插件全方位解析:AI 驱动的智能编程助手
  • C++跨平台开发:工程难题与解决方案深度解析
  • 预训练语言模型与 BERT 实战应用

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online