网站做的好是不是影响就大,旅游前 做攻略有什么网站好用,深圳做网站费用,手机网站建设咨询使用ESP32接入Coze API实现聊天机器人的教程
本示例将使用ESP32开发板通过WiFi接入 Coze API#xff0c;实现一个简单的聊天机器人功能。用户可以通过串口向机器人输入问题#xff0c;ESP32将通过Coze API与智能体进行通信#xff0c;并返回对应的回复。本文将详细介绍了如…使用ESP32接入Coze API实现聊天机器人的教程
本示例将使用ESP32开发板通过WiFi接入 Coze API实现一个简单的聊天机器人功能。用户可以通过串口向机器人输入问题ESP32将通过Coze API与智能体进行通信并返回对应的回复。本文将详细介绍了如何通过HTTP请求和JSON解析来与API进行交互并给出完整的代码示例。
一、准备工作
首先我们要获取Coze API 访问令牌和机器人 ID
在扣子Coze平台上API 访问令牌API Access Token和机器人 IDBot ID是两个关键的参数它们用于身份验证和区分不同的机器人。
API 访问令牌API Access Token
API 访问令牌是一种安全机制用于验证你的身份确保你有权访问扣子平台的 API。每个令牌都是唯一的并且与你的扣子账户相关联。
获取 API 访问令牌的步骤 登录扣子平台。 https://www.coze.cn/home 注册进入账户 然后点击API 管理部分。 查找生成 API 访问令牌的选项点击生成新的访问令牌。 系统会为你生成一个访问令牌通常会有一个复制按钮复制该令牌保存起来。
✨注意事项
访问令牌通常包含字母和数字长度较长需要妥善保管不要泄露给他人。访问令牌一旦生成通常无法再次查看只能重新生成。如果丢失需要重新生成新的令牌并更新所有使用旧令牌的地方。
机器人 IDBot ID
机器人 ID 是一个用于区分不同机器人的唯一标识符。在扣子平台上每个机器人都有一个唯一的 ID。
获取机器人 ID 的步骤 进入你的机器人列表。 点击你想要接入 API 的机器人查看此时的URL bot/后面的一串数字就是机器人 ID。
二、示例代码中的使用
在 ESP32 代码中API 访问令牌和机器人 ID 被用于构建 HTTP 请求以便与扣子平台的 API 进行通信。
const String api_access_token pat_ugo1Q9BN1sPvc9dDNQawLtrY***********************; // API 访问令牌
const String chat_bot_id 74202200**********; // 机器人 ID在发送 HTTP 请求时API 访问令牌被添加到请求头中用于身份验证
http_client.addHeader(Authorization, Bearer api_access_token);机器人 ID 被添加到请求体中用于指定请求发送到哪个机器人
json_request[bot_id] chat_bot_id;这样当 ESP32 发送请求到扣子平台时平台能够验证请求的合法性并将其正确地路由到指定的机器人进行处理。
完整代码 arduino框架
#include WiFi.h
#include HTTPClient.h
#include ArduinoJson.hconst char* wifi_ssid ; // WiFi 网络名称
const char* wifi_password ; // WiFi 密码const String api_access_token pat_ugo1Q9BN1sPvc9dDNQawLtr**************; // API 访问令牌
const String chat_bot_id 742022000*******; // 机器人 ID用于区分不同的聊天机器人void setup() {Serial.begin(9600);// 第1步连接到 WiFiWiFi.begin(wifi_ssid, wifi_password);while (WiFi.status() ! WL_CONNECTED) { // 如果尚未连接到 WiFi等待并继续尝试连接delay(1000);Serial.println(正在连接到WiFi...);}Serial.println(已连接到WiFi);Serial.print(请输入问题: );
}void loop() {// 第2步检查是否有用户输入if (Serial.available()) {String user_input Serial.readStringUntil(\n); // 读取用户输入直到遇到换行符user_input.trim(); // 去除输入前后的空白字符确保输入干净Serial.println(user_input); // 在串口打印用户输入的内容// 检查 WiFi 是否连接if (WiFi.status() ! WL_CONNECTED) {Serial.println(错误: WiFi 未连接);return;}// 第3步创建 HTTPClient 对象并配置请求HTTPClient http_client; // 创建 HTTPClient 对象管理 HTTP 请求http_client.begin(https://api.coze.cn/open_api/v2/chat); http_client.addHeader(Authorization, Bearer api_access_token);http_client.addHeader(Content-Type, application/json); // 设置请求头指定内容类型为 JSON// 第4步创建 JSON 请求体DynamicJsonDocument json_request(1024);json_request[bot_id] chat_bot_id;json_request[user] 123123123;json_request[query] user_input;json_request[stream] false;String request_body; // 存储 JSON serializeJson(json_request, request_body); // JSON 文档序列化为字符串// 第5步发送 HTTP POST 请求并获取响应int http_response_code http_client.POST(request_body); // 发送 POST 请求String server_response;if (http_response_code 0) {server_response http_client.getString(); } else {Serial.print(POST请求出错: );Serial.println(http_response_code);server_response 错误: String(http_response_code);}http_client.end();// 第6步解析并处理服务器响应DynamicJsonDocument json_response(1024); // 创建用于解析响应的 JSON 文档DeserializationError json_error deserializeJson(json_response, server_response); // 解析服务器响应的 JSON 数据if (json_error) { // 如果解析失败Serial.print(解析JSON失败: );Serial.println(json_error.c_str()); return; }// 第7步提取并输出消息内容JsonArray messages json_response[messages]; // 获取响应中的消息数组for (JsonVariant message : messages) { // 遍历每个消息获取消息内容String message_content message[content].asString(); if (!message_content.startsWith({) !message_content.startsWith(RPCError)) {Serial.println(message_content);}}Serial.print(请输入问题: );}
}
三、总结
参考资料扣子 API快速文档