Skip to content

Instantly share code, notes, and snippets.

@nulIptr
Last active June 11, 2021 08:49
Show Gist options
  • Save nulIptr/f7776674c031e9a3ff0eef1335bfe94a to your computer and use it in GitHub Desktop.
Save nulIptr/f7776674c031e9a3ff0eef1335bfe94a to your computer and use it in GitHub Desktop.
包含answerfeed
name: xiaoice core test
description: 包含answerfeed
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-commercialppe.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() + ":D" + (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, response[0].Content.Metadata.AnswerFeed, t]];
}
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