diff --git a/api/src/main/java/com/coze/openapi/api/BotAPI.java b/api/src/main/java/com/coze/openapi/api/BotAPI.java index 0f2fcbe6..5b0389e5 100644 --- a/api/src/main/java/com/coze/openapi/api/BotAPI.java +++ b/api/src/main/java/com/coze/openapi/api/BotAPI.java @@ -3,6 +3,7 @@ import com.coze.openapi.client.bots.CreateBotReq; import com.coze.openapi.client.bots.CreateBotResp; import com.coze.openapi.client.bots.ListBotResp; +import com.coze.openapi.client.bots.ListBotV2Resp; import com.coze.openapi.client.bots.PublishBotReq; import com.coze.openapi.client.bots.PublishBotResp; import com.coze.openapi.client.bots.UpdateBotReq; @@ -14,10 +15,12 @@ import retrofit2.http.Body; import retrofit2.http.GET; import retrofit2.http.POST; +import retrofit2.http.Path; import retrofit2.http.Query; import retrofit2.http.Tag; public interface BotAPI { + @Deprecated @GET("/v1/space/published_bots_list") Call> list( @Query("space_id") String spaceID, @@ -25,9 +28,23 @@ Call> list( @Query("page_size") Integer pageSize, @Tag BaseReq baseReq); + @GET("/v1/bots") + Call> list( + @Query("workspace_id") String workspaceID, + @Query("publish_status") String publishStatus, + @Query("connector_id") String connectorID, + @Query("page_index") Integer page, + @Query("page_size") Integer pageSize, + @Tag BaseReq baseReq); + + @Deprecated @GET("/v1/bot/get_online_info") Call> retrieve(@Query("bot_id") String botID, @Tag BaseReq baseReq); + @GET("/v1/bots/{bot_id}") + Call> retrieve(@Path("bot_id") String botID, @Query("is_published") Boolean isPublished, + @Tag BaseReq baseReq); + @POST("/v1/bot/create") Call> create(@Body CreateBotReq req, @Tag BaseReq baseReq); diff --git a/api/src/main/java/com/coze/openapi/client/bots/ListBotReq.java b/api/src/main/java/com/coze/openapi/client/bots/ListBotReq.java index 0e057980..c7c33762 100644 --- a/api/src/main/java/com/coze/openapi/client/bots/ListBotReq.java +++ b/api/src/main/java/com/coze/openapi/client/bots/ListBotReq.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +@Deprecated @Data @SuperBuilder @NoArgsConstructor diff --git a/api/src/main/java/com/coze/openapi/client/bots/ListBotResp.java b/api/src/main/java/com/coze/openapi/client/bots/ListBotResp.java index abcb40d8..2ad3cf26 100644 --- a/api/src/main/java/com/coze/openapi/client/bots/ListBotResp.java +++ b/api/src/main/java/com/coze/openapi/client/bots/ListBotResp.java @@ -13,6 +13,7 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +@Deprecated @Data @Builder @NoArgsConstructor diff --git a/api/src/main/java/com/coze/openapi/client/bots/ListBotV2Req.java b/api/src/main/java/com/coze/openapi/client/bots/ListBotV2Req.java new file mode 100644 index 00000000..6f063acf --- /dev/null +++ b/api/src/main/java/com/coze/openapi/client/bots/ListBotV2Req.java @@ -0,0 +1,28 @@ +package com.coze.openapi.client.bots; + +import com.coze.openapi.client.common.BaseReq; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class ListBotV2Req extends BaseReq { + @JsonProperty("workspace_id") + private String workspaceID; + @JsonProperty("publish_status") + private String publishStatus; + @JsonProperty("connector_id") + private String connectorID; + @JsonProperty("page_num") + private Integer pageNum; + @JsonProperty("page_size") + private Integer pageSize; +} diff --git a/api/src/main/java/com/coze/openapi/client/bots/ListBotV2Resp.java b/api/src/main/java/com/coze/openapi/client/bots/ListBotV2Resp.java new file mode 100644 index 00000000..484e0de7 --- /dev/null +++ b/api/src/main/java/com/coze/openapi/client/bots/ListBotV2Resp.java @@ -0,0 +1,28 @@ +package com.coze.openapi.client.bots; + +import java.util.List; + +import com.coze.openapi.client.bots.model.BotSimpleInfo; +import com.coze.openapi.client.common.BaseResp; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +@EqualsAndHashCode(callSuper = true) +public class ListBotV2Resp extends BaseResp { + @JsonProperty("items") + private List items; + + @JsonProperty("total") + private Integer total; +} diff --git a/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotReq.java b/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotReq.java index eecc8991..02c5b026 100644 --- a/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotReq.java +++ b/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotReq.java @@ -9,6 +9,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +@Deprecated @Data @SuperBuilder @AllArgsConstructor diff --git a/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotResp.java b/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotResp.java index 120e8911..b2dfbf07 100644 --- a/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotResp.java +++ b/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotResp.java @@ -9,6 +9,7 @@ import lombok.ToString; import lombok.experimental.SuperBuilder; +@Deprecated @Data @SuperBuilder @NoArgsConstructor diff --git a/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotV2Req.java b/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotV2Req.java new file mode 100644 index 00000000..4668eb7b --- /dev/null +++ b/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotV2Req.java @@ -0,0 +1,27 @@ +package com.coze.openapi.client.bots; + +import com.coze.openapi.client.common.BaseReq; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class RetrieveBotV2Req extends BaseReq { + @JsonProperty("bot_id") + private String botID; + + @JsonProperty("is_published") + private Boolean isPublished; + + public static RetrieveBotV2Req of(String botID, Boolean isPublished) { + return RetrieveBotV2Req.builder().botID(botID).isPublished(isPublished).build(); + } +} diff --git a/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotV2Resp.java b/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotV2Resp.java new file mode 100644 index 00000000..dce2ef11 --- /dev/null +++ b/api/src/main/java/com/coze/openapi/client/bots/RetrieveBotV2Resp.java @@ -0,0 +1,19 @@ +package com.coze.openapi.client.bots; + +import com.coze.openapi.client.bots.model.Bot; +import com.coze.openapi.client.common.BaseResp; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class RetrieveBotV2Resp extends BaseResp { + private Bot bot; +} diff --git a/api/src/main/java/com/coze/openapi/client/bots/model/Bot.java b/api/src/main/java/com/coze/openapi/client/bots/model/Bot.java index 4cb51560..6dded016 100644 --- a/api/src/main/java/com/coze/openapi/client/bots/model/Bot.java +++ b/api/src/main/java/com/coze/openapi/client/bots/model/Bot.java @@ -53,9 +53,24 @@ public class Bot { @JsonProperty("knowledge") private BotCommonKnowledge knowledge; + @JsonProperty("variables") + private List variables; + + @JsonProperty("owner_user_id") + private String ownerUserId; + + @JsonProperty("voice_info_list") + private List voiceInfoList; + @JsonProperty("shortcut_commands") private List shortcutCommands; @JsonProperty("workflow_info_list") private List workflowInfoList; + + @JsonProperty("background_image_info") + private BotBackgroundImageInfo backgroundImageInfo; + + @JsonProperty("default_user_input_type") + private String defaultUserInputType; } diff --git a/api/src/main/java/com/coze/openapi/client/bots/model/BotBackgroundImageInfo.java b/api/src/main/java/com/coze/openapi/client/bots/model/BotBackgroundImageInfo.java new file mode 100644 index 00000000..07fefb2e --- /dev/null +++ b/api/src/main/java/com/coze/openapi/client/bots/model/BotBackgroundImageInfo.java @@ -0,0 +1,64 @@ +package com.coze.openapi.client.bots.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BotBackgroundImageInfo { + @JsonProperty("web_background_image") + private BackgroundImageDetail webBackgroundImage; + + @JsonProperty("mobile_background_image") + private BackgroundImageDetail mobileBackgroundImage; + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class BackgroundImageDetail { + @JsonProperty("image_url") + private String imageUrl; + + @JsonProperty("theme_color") + private String themeColor; + + @JsonProperty("canvas_position") + private CanvasPosition canvasPosition; + + @JsonProperty("gradient_position") + private GradientPosition gradientPosition; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CanvasPosition { + @JsonProperty("top") + private Double top; + @JsonProperty("left") + private Double left; + @JsonProperty("width") + private Double width; + @JsonProperty("height") + private Double height; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class GradientPosition { + @JsonProperty("left") + private Double left; + @JsonProperty("right") + private Double right; + } +} diff --git a/api/src/main/java/com/coze/openapi/client/bots/model/BotSimpleInfo.java b/api/src/main/java/com/coze/openapi/client/bots/model/BotSimpleInfo.java new file mode 100644 index 00000000..edfc6244 --- /dev/null +++ b/api/src/main/java/com/coze/openapi/client/bots/model/BotSimpleInfo.java @@ -0,0 +1,38 @@ +package com.coze.openapi.client.bots.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BotSimpleInfo { + @JsonProperty("id") + private String id; + + @JsonProperty("name") + private String name; + + @JsonProperty("icon_url") + private String iconUrl; + + @JsonProperty("updated_at") + private Long updatedAt; + + @JsonProperty("description") + private String description; + + @JsonProperty("is_published") + private Boolean isPublished; + + @JsonProperty("published_at") + private Long publishedAt; + + @JsonProperty("owner_user_id") + private String ownerUserId; +} diff --git a/api/src/main/java/com/coze/openapi/client/bots/model/BotVariable.java b/api/src/main/java/com/coze/openapi/client/bots/model/BotVariable.java new file mode 100644 index 00000000..4d409f94 --- /dev/null +++ b/api/src/main/java/com/coze/openapi/client/bots/model/BotVariable.java @@ -0,0 +1,32 @@ +package com.coze.openapi.client.bots.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BotVariable { + @JsonProperty("enable") + private Boolean enable; + + @JsonProperty("channel") + private String channel; + + @JsonProperty("keyword") + private String keyword; + + @JsonProperty("description") + private String description; + + @JsonProperty("default_value") + private String defaultValue; + + @JsonProperty("prompt_enable") + private Boolean promptEnable; +} diff --git a/api/src/main/java/com/coze/openapi/client/bots/model/BotVoice.java b/api/src/main/java/com/coze/openapi/client/bots/model/BotVoice.java new file mode 100644 index 00000000..0fb1a36e --- /dev/null +++ b/api/src/main/java/com/coze/openapi/client/bots/model/BotVoice.java @@ -0,0 +1,20 @@ +package com.coze.openapi.client.bots.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BotVoice { + @JsonProperty("voice_id") + private String voiceId; + + @JsonProperty("language_code") + private String languageCode; +} diff --git a/api/src/main/java/com/coze/openapi/service/service/bots/BotService.java b/api/src/main/java/com/coze/openapi/service/service/bots/BotService.java index f2048b1d..26ea0966 100644 --- a/api/src/main/java/com/coze/openapi/service/service/bots/BotService.java +++ b/api/src/main/java/com/coze/openapi/service/service/bots/BotService.java @@ -1,8 +1,22 @@ package com.coze.openapi.service.service.bots; import com.coze.openapi.api.BotAPI; -import com.coze.openapi.client.bots.*; +import com.coze.openapi.client.bots.CreateBotReq; +import com.coze.openapi.client.bots.CreateBotResp; +import com.coze.openapi.client.bots.ListBotReq; +import com.coze.openapi.client.bots.ListBotResp; +import com.coze.openapi.client.bots.ListBotV2Req; +import com.coze.openapi.client.bots.ListBotV2Resp; +import com.coze.openapi.client.bots.PublishBotReq; +import com.coze.openapi.client.bots.PublishBotResp; +import com.coze.openapi.client.bots.RetrieveBotReq; +import com.coze.openapi.client.bots.RetrieveBotResp; +import com.coze.openapi.client.bots.RetrieveBotV2Req; +import com.coze.openapi.client.bots.RetrieveBotV2Resp; +import com.coze.openapi.client.bots.UpdateBotReq; +import com.coze.openapi.client.bots.UpdateBotResp; import com.coze.openapi.client.bots.model.Bot; +import com.coze.openapi.client.bots.model.BotSimpleInfo; import com.coze.openapi.client.bots.model.SimpleBot; import com.coze.openapi.client.common.BaseResponse; import com.coze.openapi.client.common.pagination.PageFetcher; @@ -46,6 +60,8 @@ public PageResp list(ListBotReq req) { .build(); } + + private PageFetcher getSimpleBotPageFetcher(ListBotReq req) { String spaceID = req.getSpaceID(); @@ -66,11 +82,57 @@ private PageFetcher getSimpleBotPageFetcher(ListBotReq req) { return pageFetcher; } + public PageResp list(ListBotV2Req req) { + if (req == null) { + throw new IllegalArgumentException("req is required"); + } + + Integer pageNum = req.getPageNum() == null ? 1 : req.getPageNum(); + Integer pageSize = req.getPageSize() == null ? 20 : req.getPageSize(); + PageFetcher pageFetcher = getSimpleBotPageFetcher(req); + + // 创建分页器 + PageNumBasedPaginator paginator = new PageNumBasedPaginator<>(pageFetcher, pageSize); + + // 获取当前页数据 + PageRequest initialRequest = PageRequest.builder().pageNum(pageNum).pageSize(pageSize).build(); + + PageResponse firstPage = pageFetcher.fetch(initialRequest); + + return PageResp.builder().total(firstPage.getTotal()).items(firstPage.getData()).iterator(paginator) + .logID(firstPage.getLogID()).hasMore(firstPage.isHasMore()).build(); + } + + private PageFetcher getSimpleBotPageFetcher(ListBotV2Req req) { + String workspaceID = req.getWorkspaceID(); + String publishStatus = req.getPublishStatus(); + String connectorID = req.getConnectorID(); + // 创建分页获取器 + PageFetcher pageFetcher = request -> { + BaseResponse resp = Utils + .execute(api.list(workspaceID, publishStatus, connectorID, request.getPageNum(), request.getPageSize(), req)); + return PageResponse.builder() + .hasMore(resp.getData().getItems().size() == request.getPageSize()) + .data(resp.getData().getItems()) + .pageNum(request.getPageNum()) + .pageSize(request.getPageSize()) + .total(resp.getData().getTotal()) + .logID(resp.getLogID()) + .build(); + }; + return pageFetcher; + } + public RetrieveBotResp retrieve(RetrieveBotReq req) { BaseResponse resp = Utils.execute(api.retrieve(req.getBotID(), req)); return RetrieveBotResp.builder().bot(resp.getData()).logID(resp.getLogID()).build(); } + public RetrieveBotV2Resp retrieve(RetrieveBotV2Req req) { + BaseResponse resp = Utils.execute(api.retrieve(req.getBotID(), req.getIsPublished(), req)); + return RetrieveBotV2Resp.builder().bot(resp.getData()).logID(resp.getLogID()).build(); + } + public CreateBotResp create(CreateBotReq req) { return Utils.execute(api.create(req, req)).getData(); } diff --git a/example/src/main/java/example/bot/BotRetrieveV2Example.java b/example/src/main/java/example/bot/BotRetrieveV2Example.java new file mode 100644 index 00000000..77d6a1fa --- /dev/null +++ b/example/src/main/java/example/bot/BotRetrieveV2Example.java @@ -0,0 +1,73 @@ +package example.bot; + +import java.io.IOException; +import java.util.Iterator; + +import com.coze.openapi.client.bots.ListBotV2Req; +import com.coze.openapi.client.bots.RetrieveBotV2Req; +import com.coze.openapi.client.bots.RetrieveBotV2Resp; +import com.coze.openapi.client.bots.model.Bot; +import com.coze.openapi.client.bots.model.BotSimpleInfo; +import com.coze.openapi.client.common.pagination.PageResp; +import com.coze.openapi.service.auth.TokenAuth; +import com.coze.openapi.service.service.CozeAPI; + +/* +This example is for describing how to retrieve a bot, fetch published bot list from the API. +The document for those interface: +* */ +public class BotRetrieveV2Example { + public static void main(String[] args) throws IOException { + // Get an access_token through personal access token or oauth. + String token = System.getenv("COZE_API_TOKEN"); + String botID = System.getenv("COZE_BOT_ID"); + if (token == null || token.isEmpty()) { + throw new IllegalArgumentException("COZE_API_TOKEN environment variable is required"); + } + if (botID == null || botID.isEmpty()) { + throw new IllegalArgumentException("COZE_BOT_ID environment variable is required"); + } + TokenAuth authCli = new TokenAuth(token); + + // Init the Coze client through the access_token. + CozeAPI coze = + new CozeAPI.Builder() + .baseURL(System.getenv("COZE_API_BASE")) + .auth(authCli) + .readTimeout(10000) + .build(); + ; + + /* + * retrieve a bot + * */ + RetrieveBotV2Resp botInfo = coze.bots().retrieve(RetrieveBotV2Req.of(botID,null)); + Bot bot = botInfo.getBot(); + System.out.println(bot); + System.out.println(botInfo.getLogID()); + + /* + * get published bot list + * */ + + Integer pageNum = 1; + String workspaceID = System.getenv("WORKSPACE_ID"); + ListBotV2Req listBotReq = + ListBotV2Req.builder().workspaceID(workspaceID).pageNum(pageNum).pageSize(10).build(); + PageResp botList = coze.bots().list(listBotReq); + + // 2. The SDK encapsulates an iterator, which can be used to turn pages backward automatically. + Iterator iterator = botList.getIterator(); + while (iterator.hasNext()) { + iterator.forEachRemaining(System.out::println); + } + + // the page result will return followed information + System.out.println("total: " + botList.getTotal()); + System.out.println("has_more: " + botList.getHasMore()); + System.out.println("logID: " + botList.getLogID()); + for (BotSimpleInfo item : botList.getItems()) { + System.out.println(item); + } + } +}