""" 版本号:1.0 日期:2024/11/14 描述: """ import uuidimport jwt import time import requests# OAuth应用的相关信息,需从扣子平台获取并替换 APP_ID = "" # auth应用id PUBLIC_KEY_FINGERPRINT = "" # 公钥 PRIVATE_KEY_PATH = "private_key.pem" # 私钥文件路径# 扣子API的Endpoint API_ENDPOINT = "api.coze.cn"def generate_jwt():""" 生成JWT""" # 读取私钥文件with open(PRIVATE_KEY_PATH, 'r') as f:private_key = f.read()# JWT头部信息header = {"alg": "RS256","typ": "JWT","kid": PUBLIC_KEY_FINGERPRINT}# JWT负载信息payload = {"iss": APP_ID,"aud": API_ENDPOINT,"iat": int(time.time()),"exp": int(time.time()) + 86400, # 这里设置JWT过期时间为1小时,可根据需求调整"jti": uuid.uuid4().hex # 需替换为真正的随机字符串,每次生成JWT时应不同}# 生成JWTjwt_token = jwt.encode(payload, private_key, algorithm='RS256', headers=header)return jwt_tokendef get_access_token(jwt_token):""" 使用JWT获取访问令牌""" url = "https://api.coze.cn/api/permission/oauth2/token"headers = {"Content-Type": "application/json","Authorization": f"Bearer {jwt_token}"}data = {"grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer","duration_seconds": 86399 # 可根据需求调整有效期,最大为86399秒(24小时)}response = requests.post(url, headers=headers, json=data)if response.status_code == 200:return response.json()["access_token"]else:print(f"获取访问令牌失败,错误码: {response.status_code},错误信息: {response.text}")return Nonedef get_conversion_id(access_token):create_url = ' https://api.coze.cn/v1/conversation/create'headers = {'Authorization': f'Bearer {access_token}','Content-Type': 'application/json'}res = requests.post(create_url, headers=headers)return res.json()['data']['id']def chat_with_bot(access_token, conversation_id):url = 'https://api.coze.cn/v3/chat?conversation_id='+conversation_idheaders = {'Authorization': f'Bearer {access_token}','Content-Type': 'application/json'}data = {"bot_id": "", # 智能体id,就是智能体详情url后面的那个id"user_id": '1234566758',"stream": False,"auto_save_history": True,"additional_messages": [{"role": "user", "content": "你是", "content_type": "text"}]}res = requests.post(url, headers=headers, json=data)print(res.json())return res.json()['data']['id']def get_chat_content(i, c, a):url = 'https://api.coze.cn/v3/chat/retrieve'headers = {'Authorization': f'Bearer {a}','Content-Type': 'application/json'}data = {"conversation_id": i,"chat_id": c}res = requests.get(url, headers=headers, json=data)print(res.json())if __name__ == "__main__":jwt_token = generate_jwt()print(f"生成的JWT: {jwt_token}")access_token = get_access_token(jwt_token)if access_token:print(f"获取的访问令牌: {access_token}")# access_token = 'czs_85DxsJ631VZ7owpzB2ucDmo0iiT0cs3UifDhuvD3yRUEhaDH4GU2pbvWXY4aiNwm'conversion_id = get_conversion_id(access_token)chat_id = chat_with_bot(access_token, conversion_id)time.sleep(1)get_chat_content(conversion_id, chat_id, access_token)