Created
July 23, 2021 06:00
-
-
Save nulIptr/becd27becbfbfc842f33d398a9ea00dc to your computer and use it in GitHub Desktop.
包含answerfeed and metadata
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: xiaoice core xiaopeng test | |
description: 包含answerfeed and metadata | |
host: EXCEL | |
api_set: {} | |
script: | |
content: | | |
var PARTNERS = {}; | |
const INT_CORE_CHAT_URL = | |
"http://localhost:3000/int-xiaoicecore-commercialshare.trafficmanager.cn/api/chitchat/reply?workflow={{workflow}}"; | |
const PPE_CORE_CHAT_URL = | |
"http://localhost:3000/prod-xiaoicecore-commercialppe2.trafficmanager.cn/api/chitchat/reply?workflow={{workflow}}"; | |
const PROD_CORE_CHAT_URL = | |
"http://localhost:3000/prod-xiaoicecore-commercialshare.trafficmanager.cn/api/chitchat/reply?workflow={{workflow}}"; | |
tryCatch(setup); | |
$("#run").click(() => tryCatch(run)); | |
console.log(_.VERSION); | |
async function run() { | |
await Excel.run(async (context) => { | |
const sheet = context.workbook.worksheets.getItem("Queries"); | |
var uRange = sheet.getUsedRange(); | |
uRange.load("address"); | |
uRange.load("rowCount"); | |
await context.sync(); | |
var count = uRange.rowCount; | |
if (count > 1500) { | |
count = 1500; | |
} | |
var qRanges = sheet.getRange("A2:A" + count.toString()).load("values"); | |
await context.sync(); | |
var queries = qRanges.values; | |
var responseTimes = []; | |
for (var i = 0; i < queries.length; i++) { | |
if (queries[i] == undefined || queries[i][0].toString() == "") { | |
break; | |
} | |
var startTime = Date.now(); | |
var response = await getApiQuery(queries[i][0]) | |
.then((res) => res.json()) | |
.catch((error) => console.log(error)); | |
var t = Date.now() - startTime; | |
var bRanges = sheet.getRange("B" + (2 + i).toString() + ":E" + (2 + i).toString()); | |
var p = Math.floor((i / queries.length) * 100 + 2); | |
if (p > 100) { | |
p = 100; | |
} | |
if (i == queries.length - 1) { | |
p = 100; | |
} | |
if (p < 100) { | |
$("#run").prop("disabled", true); | |
} else { | |
$("#run").prop("disabled", false); | |
} | |
$("#Progress").text("进度 " + p.toFixed(0) + "%"); | |
if (response == undefined || response.length == 0) { | |
bRanges.values = [["No Reply", "No AnswerFeed", t]]; | |
} else { | |
bRanges.values = [[response[0].Content.Text, t, response[0].Content.Metadata.AnswerFeed, response[0].Content.Metadata.MetadataPassthroughToPartner]]; | |
} | |
context.sync(); | |
} | |
}); | |
} | |
async function getApiQuery(msg) { | |
var pid = $("#PartnerId") | |
.find(":selected") | |
.val(); | |
var p = PARTNERS[pid.toString()]; | |
var workflow = p["Workflow"]; | |
var isSingleTurn = $("#SingleTurn").is(":checked"); | |
var env = $("#Env") | |
.find(":selected") | |
.val(); | |
var url = PROD_CORE_CHAT_URL.replace("{{workflow}}", workflow); | |
switch (env) { | |
case "int": | |
url = INT_CORE_CHAT_URL.replace("{{workflow}}", workflow); | |
break; | |
case "ppe": | |
url = PPE_CORE_CHAT_URL.replace("{{workflow}}", workflow); | |
break; | |
default: | |
break; | |
} | |
let uuid = | |
Date.now().toString(36) + | |
Math.random() | |
.toString(36) | |
.substring(2); | |
if (!isSingleTurn) { | |
uuid = "Test-User-Id-From-Excel"; | |
} | |
var data = { | |
MasterPuid: uuid, | |
SenderPuid: uuid, | |
MasterUuid: uuid, | |
SenderUuid: uuid, | |
Content: { | |
Text: msg, | |
Metadata: { | |
Character: p["Character"] | |
} | |
}, | |
PartnerInfo: { | |
PartnerId: pid.toString().split("-")[0] | |
} | |
}; | |
Object.keys(p["Metadata"]).forEach((k) => { | |
if (p["Metadata"][k] != undefined) { | |
data.Content.Metadata[k] = p["Metadata"][k]; | |
} | |
}); | |
return fetch(url, { | |
headers: new Headers({ | |
"Content-Type": "application/json", | |
Accept: "application/json" | |
}), | |
method: "POST", | |
body: JSON.stringify(data) | |
}); | |
} | |
async function setup() { | |
await Excel.run(async (context) => { | |
const sheet = context.workbook.worksheets.getItem("Partners"); | |
var uRange = sheet.getUsedRange(); | |
uRange.load("address"); | |
uRange.load("rowCount"); | |
await context.sync(); | |
var count = uRange.rowCount; | |
const partners = sheet.getRange("A2:E" + count.toString()); | |
partners.load("values"); | |
await sheet.context.sync(); | |
var c = context.workbook.getActiveCell(); | |
$("#PartnerId") | |
.children() | |
.remove() | |
.end(); | |
partners.values.forEach(function(item) { | |
$("#PartnerId").append("<option>" + item[0] + "</option>"); | |
PARTNERS["" + item[0]] = { | |
PartnerId: item[0], | |
PartnerName: item[1], | |
Workflow: item[2], | |
Character: item[3], | |
Metadata: JSON.parse(item[4]) | |
}; | |
}); | |
$("#PartnerId").on("change", function() { | |
var pid = $(this) | |
.find(":selected") | |
.val(); | |
var p = PARTNERS[pid.toString()]; | |
$("#PartnerName").text(p["PartnerName"]); | |
$("#Workflow").text(p["Workflow"]); | |
$("#Character").text(p["Character"]); | |
}); | |
await context.sync(); | |
}); | |
} | |
async function tryCatch(callback) { | |
try { | |
await callback(); | |
} catch (error) { | |
console.log(error); | |
$("Error").text(error); | |
} | |
} | |
language: typescript | |
template: | |
content: "<section class=\"xiaoice ms-font-m\">\n\t<h3>Xiaoice Workflow Api Tester</h3>\n\t<p><b>使用说明:</b></p>\n\t<p>\n\t\t1. 把需要跑的数据复制到第一列,点击PartnerId的下拉列表,选择一个Partner。<br/>\n 2. 然后Workflow和Character会自动更新,不需要手动修改<br/>\n\t\t3. 默认是单轮的,如果需要多轮对话,取消单轮的选项<br/>\n\t\t4. 默认是prod的环境,如果需要切换,选择环境下拉菜单选项\n\t</p>\n\t\t<p>PartnerName: <span id=\"PartnerName\">VankeIot</span> Workflow: <span id=\"Workflow\">CharacterXiaowanIot</span>\n\t\t\tCharacter: <span id=\"Character\">xiaowan-iot</span>\n\t\t\t<p> Partner:\n\t\t\t\t<select id=\"PartnerId\" Size=\"1\"></select> <br/><br/>\n\n单轮聊天: <input type=\"checkbox\" id=\"SingleTurn\" checked=\"checked\" title=\"单轮\"/> <br/><br/>API环境: <select id=\"Env\" Size=\"1\">\n<option value=\"int\">Int</option>\n<option value=\"ppe\">PPE</option>\n<option value=\"prod\" selected=\"true\">Prod</option>\n</select>\n\n\n\t</p>\n\t<p><span id=\"Progress\">进度 0%</span></p>\n\t\t<!--\t\t<button id=\"setup\" class=\"ms-Button\">\n\t\t\t <span class=\"ms-Button-label\">初始化</span>\n\t\t\t </button>-->\n\t\t\t\t<button id=\"run\" class=\"ms-Button\">\n <span class=\"ms-Button-label\">开始</span>\n </button>\n\n\t\t\t\t<p>\n\t\t\t\t\t<p id=\"Error\"></p>\n</section>" | |
language: html | |
style: | |
content: | | |
section.xiaoice { | |
margin-top: 20px; | |
} | |
section.xiaoice .ms-Button, section.setup .ms-Button { | |
display: block; | |
margin-bottom: 5px; | |
margin-left: 20px; | |
min-width: 80px; | |
} | |
language: css | |
libraries: |- | |
https://appsforoffice.microsoft.com/lib/1/hosted/office.js | |
@types/office-js | |
office-ui-fabric-js@1.4.0/dist/css/fabric.min.css | |
office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css | |
core-js@2.4.1/client/core.min.js | |
@types/core-js | |
jquery@3.1.1 | |
@types/jquery@3.3.1 | |
moment@2.29.1 | |
@types/moment | |
lodash@4.17.21 | |
@types/lodash |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment