# 智能PPT生成(新版)
有奖调研 (opens new window)诚邀您参与我们星火智能PPT生成服务有奖调研,参与问卷即有机会获取超大服务包
# 接口调用流程图
常见问题:
1、新版和旧版相比有什么变化? 新版提供了200+主题模板,并且联网搜索、ai配图等功能
2、新版的模板全部免费吗? 新版的200+主题模板全部免费使用,不再额外扣量;更多新颖实用的模板正在陆续上架
3、新版和旧版的接口可以混用吗? 新版的接口地址与旧版不同,虽然两者的调用流程相似,但新版接口和旧版接口不能混用
4、如何查看旧版接口文档地址? 联系上方技术支持,获取旧版接口文档,注意:旧版接口已不再维护
# 接口调用示例
部分开发语言Demo如下,其他开发语言请参照文档进行开发,欢迎大家到讯飞开放平台社区 (opens new window)交流集成经验。
智能PPT生成(新版)Demo Java语言 (opens new window)
智能PPT生成(新版)Demo Python语言 (opens new window)
# 接口与鉴权
# 接口域名
zwapi.xfyun.cn
# 获取签名
在HTTP请求头 header 中设置参数:
appId
,timestamp
,signature
String appId = "应用ID";
String secret = "应用的秘钥";
long timestamp = System.currentTimeMillis()/1000;
String signature = ApiAuthAlgorithm.getSignature(appId, secret, timestamp);
request.setHeader("appId",appId);
request.setHeader("timestamp",str(timestamp));
request.setHeader("signature",signature);
字段名 | 类型 | 描述 | 必须 | 默认值 |
---|---|---|---|---|
appId | String | 应用ID | Y | |
timestamp | String | 时间戳,单位: s,与服务端时间相差五分钟之内 | Y | |
signature | String | 签名 | Y |
# DEMO
ApiAuthAlgorithm.class
鉴权类
public class ApiAuthAlgorithm {
private static final char[] MD5_TABLE = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
/**
* 获取签名
*
* @param appId 签名的key
* @param secret 签名秘钥
* @return 返回签名
*/
public String getSignature(String appId, String secret, long ts) {
try {
String auth = md5(appId + ts);
return hmacSHA1Encrypt(auth, secret);
} catch (SignatureException e) {
return null;
}
}
/**
* sha1加密
*
* @param encryptText 加密文本
* @param encryptKey 加密键
* @return 加密
*/
private String hmacSHA1Encrypt(String encryptText, String encryptKey) throws SignatureException {
byte[] rawHmac;
try {
byte[] data = encryptKey.getBytes(StandardCharsets.UTF_8);
SecretKeySpec secretKey = new SecretKeySpec(data, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secretKey);
byte[] text = encryptText.getBytes(StandardCharsets.UTF_8);
rawHmac = mac.doFinal(text);
} catch (InvalidKeyException e) {
throw new SignatureException("InvalidKeyException:" + e.getMessage());
} catch (NoSuchAlgorithmException e) {
throw new SignatureException("NoSuchAlgorithmException:" + e.getMessage());
}
return new String(Base64.encodeBase64(rawHmac));
}
private String md5(String cipherText) {
try {
byte[] data = cipherText.getBytes();
// 信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// MessageDigest对象通过使用 update方法处理数据, 使用指定的byte数组更新摘要
mdInst.update(data);
// 摘要更新之后,通过调用digest()执行哈希计算,获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
int j = md.length;
char[] str = new char[j * 2];
int k = 0;
for (byte byte0 : md) { // i = 0
str[k++] = MD5_TABLE[byte0 >>> 4 & 0xf]; // 5
str[k++] = MD5_TABLE[byte0 & 0xf]; // F
}
// 返回经过加密后的字符串
return new String(str);
} catch (Exception e) {
return null;
}
}
}
# 错误码
错误码 | 描述 | 处理方式 |
---|---|---|
20002 | 参数错误 | 确认接口入参 |
20005 | 大纲生成失败 | 查看是否存在敏感词汇,尝试重新生成 |
20006 | PPT生成失败 | PPT导出错误,请重新生成或联系技术人员 |
20007 | 鉴权错误 | 检查鉴权信息 |
9999 | 系统异常 | 确认鉴权信息、请求方式、请求参数是否有误,或联系技术人员排查相关日志 |
# 接口列表
# 1、PPT主题列表查询
1.1 接口地址:
https://zwapi.xfyun.cn/api/ppt/v2/template/list
1.2 请求示例:
{
"style": "简约",
"color": "红色",
"industry": "教育培训",
"pageNum": 1,
"pageSize": 10
}
1.3 请求查询参数:
POST,application/json
注意:请求体不能为空,至少有一项。
名称 | 类型 | 描述 | 必须 | 默认值 |
---|---|---|---|---|
style | String | 风格类型: "简约","卡通","商务","创意","国风","清新","扁平","插画","节日" | N | |
color | String | 颜色类型: "蓝色","绿色","红色","紫色","黑色","灰色","黄色","粉色","橙色" | N | |
industry | String | 行业类型: "科技互联网","教育培训","政务","学院","电子商务","金融战略","法律","医疗健康","文旅体育","艺术广告","人力资源","游戏娱乐" | N | |
pageNum | Integer | 页数 | N | 1 |
pageSize | Integer | 每页数量 | N | 10 |
1.4 响应参数:
{
"flag": true,
"code": 0,
"desc": "成功",
"count": null,
"data": {
"total": 110,
"records": [
{
"templateIndexId": "202407171E27C9D",
"pageCount": 5,
"type": "system_template",
"color": "蓝色",
"industry": "教育培训",
"style": "卡通",
"detailImage": "{\"titleCoverImageLarge\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_W7Ct1g1723193798025-04123504173892696.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM3OTk7YWxnbz1obWFjLXNoYTI1NjtzaWc9TDFIc01LbjFuNnNhSlZLZ21MK0VNdXhnSTBkdzBzM0VnbjdpL290dWd2VT0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\",\"titleCoverImage\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_WAl06h1723193799949-04329013386342242.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM4MDA7YWxnbz1obWFjLXNoYTI1NjtzaWc9YTFSbVJGaWpqQ3lYendNVzhHZVdvVXFQWStxNVNzN0ppck9lczZnMU00dz0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\",\"catalogueCoverImage\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_AA2WnD1723193801664-05558363837592131.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM4MDE7YWxnbz1obWFjLXNoYTI1NjtzaWc9Ymw0UVlick9jTjVVU1hkMHU2QXFjSUZTM2JtNmVWUk9FLytkc2NWU0JjUT0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\",\"chapterCoverImage\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_5Vs2cK1723193803147-042723137781772724.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM4MDM7YWxnbz1obWFjLXNoYTI1NjtzaWc9RmxFQTk5RWY3RElSUkEwMWQ2QUFmTi9aTFR6YVNKeU55MVJ5NUc3T05QWT0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\",\"contentCoverImage\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_FVPl8y1723193804494-07550240915105764.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM4MDQ7YWxnbz1obWFjLXNoYTI1NjtzaWc9cTJJeE5sYTdaTk52VlBnRTAvbjQrZDRBeWptUDdERStxc3BvRWorQTZRZz0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\",\"endCoverImage\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_DV5MCg1723193805753-07957067972264273.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM4MDY7YWxnbz1obWFjLXNoYTI1NjtzaWc9RlIraDdTMFJkUVhoc1BkMCs4dldNSWRGNkNZdGlFZ3V6TlZlTkJGK1NLMD0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\"}"
},
...
],
"pageNum": 1
}
}
1.5 响应描述
响应字段 | 类型 | 描述 |
---|---|---|
flag | Boolean | 响应标识 |
code | Integer | 错误码 |
desc | String | 错误详情 |
count | Integer | 不用关注,预留 |
data.total | Long | PPT主题列表总数 |
data.records | array | PPT主题列表集合 |
data.records[]. templateIndexId | String | 供用户检索模板的ID |
data.records[]. pageCount | Integer | 总页数 |
data.records[]. type | String | 类型 |
data.records[]. color | String | 颜色类型 |
data.records[]. industry | String | 行业类型 |
data.records[]. style | String | 风格类型 |
data.records[]. detailImage | String | 详细图 |
data.records[]. payType | String | 模板支付方式,注意:所有模板均已免费使用 |
# 2、PPT生成(直接根据用户输入要求,获得最终PPT)
2.1 接口描述:
基于用户提示、文档等相关内容生成PPT,字数不得超过8000字,文件限制10M。
2.2 接口地址:
https://zwapi.xfyun.cn/api/ppt/v2/create
2.3 请求查询参数:
POST,multipart/form-data
名称 | 类型 | 描述 | 必须 | 默认值 |
---|---|---|---|---|
query | String | 用户生成PPT要求(最多8000字;query、file、fileUrl必填其一) 注意:query不能为空字符串、仅包含空格的字符串 | N | |
file | MultipartFile | 上传文件 (file、fileUrl、query必填其一,如果传file或者fileUrl,fileName必填) | N | |
fileUrl | String | 文件地址(file、fileUrl、query必填其一,如果传file或者fileUrl,fileName必填) | N | |
fileName | String | 文件名(带文件名后缀;如果传file或者fileUrl,fileName必填) | N | |
templateId | String | 直接供用户检索模板的ID,从PPT主题列表查询中获取 | N | |
businessId | String | 业务ID(非必传)- 业务方自行决定是否使用 | N | |
author | String | PPT作者名:用户自行选择是否设置作者名 | N | 智文 |
isCardNote | Boolean | 是否生成PPT演讲备注 | N | false |
search | Boolean | 是否联网搜索 | N | false |
language | String | 语种 | N | cn |
isFigure | Boolean | 是否自动配图 | N | false |
aiImage | String | ai配图类型: normal、advanced (isFigure为true的话生效); normal-普通配图,20%正文配图;advanced-高级配图,50%正文配图 | N |
2.4 可选参数列表:
language:
- cn:中文(简体)
- en:英语
- ja:日语
- ru:俄语
- ko:韩语
- de:德语
- fr:法语
- pt:葡萄牙语
- es:西班牙语
- it:意大利语
- th:泰语
2.5 请求响应:
{
"flag": true,
"code": 0,
"desc": "成功",
"count": null,
"data": {
"sid": "7416b894bdd54ccc95bab7400113989e",
"coverImgSrc": "https://bjcdn.openstorage.cn/xinghuo-privatedata/zhiwen/2024-11-07/3d19478b-cac2-47c2-a238-ae25b9d4b900/81b87056834d4a1fb923dcf03bea4918.png",
"title": "合肥天气趋势分析",
"subTitle": "探索气候变化与城市生活影响",
"outline": null
}
}
2.6 响应描述
响应字段 | 类型 | 描述 |
---|---|---|
flag | Boolean | 响应标识 |
code | Integer | 错误码 |
desc | String | 错误详情 |
count | Integer | 不用关注,预留 |
data.sid | string | 请求唯一id |
data.CoverImgSrc | string | PPT封面图链接 |
data.title | string | PPT主标题 |
data.subTitle | string | PPT副标题 |
data.outline | string | PPT大纲 |
# 3、大纲生成
3.1 接口地址:
https://zwapi.xfyun.cn/api/ppt/v2/createOutline
3.2 请求参数查询
POST,multipart/form-data
名称 | 类型 | 描述 | 必须 | 默认值 |
---|---|---|---|---|
query | String | 用户生成PPT要求(最多8000字) 注意:query不能为空字符串、仅包含空格的字符串 | Y | |
businessId | String | 业务ID(非必传)- 业务方自行决定是否使用 | N | |
language | String | 语种 | N | cn |
search | Boolean | 是否联网搜索 | N | false |
3.3 请求响应
{
"flag": true,
"code": 0,
"desc": "成功",
"count": null,
"data": {
"sid": "a88306c606c746178c2816b996c45125",
"outline": {
"title": "秋分时节的农业管理策略",
"subTitle": "提升农作物产量的关键措施",
"chapters": [
{
"chapterTitle": "秋分简介",
"chapterContents": [
{
"chapterTitle": "定义与时间"
},
{
"chapterTitle": "历史背景"
}
]
},
{
"chapterTitle": "秋分的天文意义",
"chapterContents": [
{
"chapterTitle": "昼夜平分"
},
{
"chapterTitle": "太阳直射点变化"
}
]
}
]
}
}
}
3.4 响应描述
响应字段 | 类型 | 描述 |
---|---|---|
flag | Boolean | 响应标识 |
code | Integer | 错误码 |
desc | String | 错误详情 |
count | Integer | 不用关注,预留 |
data.sid | string | 请求大纲唯一id,后续通过大纲生成ppt可能需要 |
data.outline | object | 大纲数据 |
data.outline.title | string | PPT主标题 |
data.outline.subTitle | string | PPT副标题 |
data.outline.chapters[].chapterTitle | string | 章节、子章节标题名称 |
data.outline.chapters[].chapterContents[] | array | 二级大纲内容 |
3.5 大纲结构体说明(data.outline)
public class Outline {
// 主标题
private String title;
// 副标题
private String subTitle;
/**
* 文档的章节列表。
*/
private List<Outline.Chapter> chapters;
public static class Chapter {
// 章节、子章节标题名称
String chapterTitle;
// 二级大纲chapterContents为空
List<Outline.Chapter> chapterContents = null;
}
}
# 4、自定义大纲生成
4.1 接口描述:
基于用户提示、文档等相关内容生成PPT大纲。
query参数不得超过8000字,上传文件支持pdf(不支持扫描件)、doc、docx、txt、md格式的文件,注意:txt格式限制100万字以内,其他文件限制10M。
4.2 接口地址:
https://zwapi.xfyun.cn/api/ppt/v2/createOutlineByDoc
4.3 请求查询参数:
POST,multipart/form-data
名称 | 类型 | 描述 | 必须 | 默认值 |
---|---|---|---|---|
query | String | 用户生成PPT要求(最多8000字) 注意:query不能为空字符串、仅包含空格的字符串 | N | |
file | MultipartFile | 上传文件 (file、fileUrl必填其一) | N | |
fileUrl | String | 文件地址(file、fileUrl必填其一) | N | |
fileName | String | 文件名(带文件名后缀;fileName必填) | Y | |
businessId | String | 业务ID(非必传)- 业务方自行决定是否使用 | N | |
language | String | 语种 | N | cn |
search | Boolean | 是否联网搜索 | N | false |
4.4请求响应与说明
见3.3、3.4小节说明
# 5、通过大纲生成PPT
5.1 接口地址:
https://zwapi.xfyun.cn/api/ppt/v2/createPptByOutline
5.2 请求示例:
{
"outline": {
"title": "烧烤制作方法",
"subTitle": "从食材准备到成品展示",
"chapters": [
{
"chapterTitle": "烧烤概述",
"chapterContents": [
{
"chapterTitle": "烧烤定义与起源与发展",
"chapterContents": null
}
]
}
]
},
"language": "cn",
"isCardNote": true,
"aiImage": "advanced",
"search":true,
"isFigure":true,
"author":"测试",
"query":"烧烤"
}
5.3 请求查询参数:
POST,application/json
名称 | 类型 | 描述 | 必须 | 默认值 |
---|---|---|---|---|
query | String | 用户生成PPT要求(最多8000字) 注意:query不能为空字符串、仅包含空格的字符串 | Y | |
outlineSid | String | 已生成大纲后,响应返回的请求大纲唯一id (见 3.4 小节返回字段data.sid) | N | |
outline | JSONObject | 大纲内容(不得超过20个一级大纲--outline.chapters[].chapterTitle,见 3.4 小节返回字段data.outline) | Y | |
templateId | String | 直接供用户检索模板的ID,从PPT主题列表查询中获取;见 1.5 小节返回字段templateIndexId;为空的话,从free模板中随机取一个 | N | |
businessId | String | 业务ID(非必传)- 业务方自行决定是否使用 | N | |
author | String | PPT作者名:用户自行选择是否设置作者名 | N | 讯飞智文 |
isCardNote | Boolean | 是否生成PPT演讲备注 | N | false |
search | Boolean | 是否联网搜索 | N | false |
language | String | 语种(保证传入大纲语种与输入PPT语种一致) | N | cn |
fileUrl | String | 文件地址 | N | |
fileName | String | 文件名(带文件名后缀) ,传fileUrl的话必填 | N | |
isFigure | Boolean | 是否自动配图 | N | false |
aiImage | String | ai配图类型: normal、advanced (isFigure为true的话生效); normal-普通配图,20%正文配图;advanced-高级配图,50%正文配图 | N |
5.4 请求响应与说明
见2.5、2.6小节说明
# 6、PPT进度查询
6.1 接口地址:
https://zwapi.xfyun.cn/api/ppt/v2/progress?sid={}
6.2 请求查询参数:
注:该接口设置限流,三秒访问一次
GET
名称 | 类型 | 描述 | 必须 |
---|---|---|---|
sid | String | 请求唯一ID | Y |
{
"flag": true,
"code": 0,
"desc": "成功",
"count": null,
"data": {
"pptStatus": "done",
"aiImageStatus": "done",
"cardNoteStatus": "done",
"pptUrl": "https://bjcdn.openstorage.cn/xinghuo-privatedata/zhiwen/2024-11-07/7c8fde0c-2d3e-4a1d-a6bb-b1a5688f10c0/9b1c22980ddf478c9557eedbc51a4d2d.pptx",
"errMsg": null,
"totalPages": 21,
"donePages": 21
}
}
6.3 响应描述
响应字段 | 类型 | 描述 |
---|---|---|
flag | Boolean | 响应标识 |
code | Integer | 错误码 |
desc | String | 错误详情 |
count | Integer | 不用关注,预留 |
data.pptStatus | String | PPT构建状态:building(构建中),done(已完成),build_failed(生成失败) |
data.aiImageStatus | String | ai配图状态:building(构建中),done(已完成) |
data.cardNoteStatus | String | 演讲备注状态:building(构建中),done(已完成) |
data.pptUrl | String | 生成PPT的地址 |
data.errMsg | String | 生成PPT的失败信息 |
data.totalPages | Integer | 生成PPT的总页数 |
data.donePages | Integer | 生成PPT的完成页数 (ai配图和演讲备注为异步任务,ppt页数完成,不代表配图和演讲备注也完成) |
# 扣量说明
- 基于query直接生成ppt:扣除10点量,1个并发,若需要增加备注,则增加5点量
- 基于query生成大纲:扣除2点量1个并发
- 基于sid,获取大纲(可修改)生成ppt:扣除8点量1个并发
- 基于大纲生成ppt:8点量,若需要生成备注:额外扣除5点量
- PPT自动配图:普通4点量,高级8点量
- PPT需要生成演讲备注:5点量
- PPT多语种翻译:仅生成大纲,扣1点量;大纲生成PPT,扣2点量;
- 开启联网搜索:2点量