将 QnA 用户问题和答案添加到 Node JS 中的 Insights 遥测
Add QnA users questions and answers to Insights telemetry in Node JS
我需要使用遥测技术向我的 Azure 机器人见解发送 QnA 用户问题和答案。已经尝试过本教程:
而这个 SO 帖子:
- How to get the Qna Maker "Q" from Analytics Application Insights?
事情是,首先它是为 LUIS 完成的,没有为 Insights 提供额外的信息,也没有为 QnA 提供任何信息...第二个是为 C# 编写的...
我需要使用 NodeJS 向 customEvents 日志发送关于 Azure 洞察力的问题和答案,但我找不到方法,有什么帮助吗?
提前致谢。
///// 编辑:
这是我目前得到的(只发布了与遥测和 QnA 相关的代码,这些代码已经可以正常工作):
Index.js
const { ApplicationInsightsTelemetryClient, TelemetryInitializerMiddleware } = require('botbuilder-applicationinsights');
const { TelemetryLoggerMiddleware } = require('botbuilder-core');
function getTelemetryClient(instrumentationKey) {
if (instrumentationKey) {
return new ApplicationInsightsTelemetryClient(instrumentationKey);
}
return new NullTelemetryClient();
}
const server = restify.createServer();
server.use(restify.plugins.bodyParser());
var telemetryClient = getTelemetryClient(process.env.InstrumentationKey);
var telemetryLoggerMiddleware = new TelemetryLoggerMiddleware(telemetryClient);
var initializerMiddleware = new TelemetryInitializerMiddleware(telemetryLoggerMiddleware);
adapter.use(initializerMiddleware);
const mybot = new MYBOT(conversationState,userState, telemetryClient);
mybot.js
class MYBOT extends ActivityHandler {
constructor(conversationState,userState,telemetryClient) {
super();
this.conversationState = conversationState;
this.userState = userState;
this.telemetryClient = telemetryClient;
}
}
//This is how I get my qna result:
console.log(this.telemetryClient);
var result = await this.qnaMaker.getAnswers(context);
如您所见,我将 telemetryClient 传递给 bot 文件,如果我控制台记录该项目,我将获得完整的遥测对象,但我如何将用户问题和答案传递给它,以便节省洞察力 customevents? ?
找到了解决方法,以防正在寻找 Node 可能解决方案之一的人可能需要它:
基本上,我们使用官方文档中描述的相同遥测代码过程来实例化 index.js 上的遥测:
const { ApplicationInsightsTelemetryClient, TelemetryInitializerMiddleware } = require('botbuilder-applicationinsights');
const { TelemetryLoggerMiddleware } = require('botbuilder-core');
function getTelemetryClient(instrumentationKey) {
if (instrumentationKey) {
return new ApplicationInsightsTelemetryClient(instrumentationKey);
}
return new NullTelemetryClient();
}
const server = restify.createServer();
server.use(restify.plugins.bodyParser());
var telemetryClient = getTelemetryClient(process.env.InstrumentationKey);
var telemetryLoggerMiddleware = new TelemetryLoggerMiddleware(telemetryClient);
var initializerMiddleware = new TelemetryInitializerMiddleware(telemetryLoggerMiddleware);
adapter.use(initializerMiddleware);
const mybot = new MYBOT(conversationState,userState, telemetryClient);
然后,我们将其传递给 bot 文件(bot.js 或您正在使用的文件):
class MYBOT extends ActivityHandler {
constructor(conversationState,userState,telemetryClient) {
super();
this.conversationState = conversationState;
this.userState = userState;
this.telemetryClient = telemetryClient;
}
}
在后面的代码中,您可以使用 telemetry.trackEvent 方法(官方文档仅在 C# 中),但基本上,它允许您创建自定义事件想要跟踪代码中的特定事件,例如当您的机器人出现错误或找不到用户的答案时。根据前几行的代码将是这样的:
this.telemetryClient.trackEvent(
{name: "myEvent",
properties: {my_user_question: 'Context activity text here or your captured question',
my_bot_answer: 'bot reply or whatever'}
}
); // name and properties are part of the sintaxys, values inside properties object as you may need.
这样,在 Azure insights customEvents 模型上,您将看到使用您使用的事件名称捕获的记录,以及属性对象作为 customdimensions 字段中的字典。
我需要使用遥测技术向我的 Azure 机器人见解发送 QnA 用户问题和答案。已经尝试过本教程:
而这个 SO 帖子:
- How to get the Qna Maker "Q" from Analytics Application Insights?
事情是,首先它是为 LUIS 完成的,没有为 Insights 提供额外的信息,也没有为 QnA 提供任何信息...第二个是为 C# 编写的...
我需要使用 NodeJS 向 customEvents 日志发送关于 Azure 洞察力的问题和答案,但我找不到方法,有什么帮助吗?
提前致谢。
///// 编辑:
这是我目前得到的(只发布了与遥测和 QnA 相关的代码,这些代码已经可以正常工作):
Index.js
const { ApplicationInsightsTelemetryClient, TelemetryInitializerMiddleware } = require('botbuilder-applicationinsights');
const { TelemetryLoggerMiddleware } = require('botbuilder-core');
function getTelemetryClient(instrumentationKey) {
if (instrumentationKey) {
return new ApplicationInsightsTelemetryClient(instrumentationKey);
}
return new NullTelemetryClient();
}
const server = restify.createServer();
server.use(restify.plugins.bodyParser());
var telemetryClient = getTelemetryClient(process.env.InstrumentationKey);
var telemetryLoggerMiddleware = new TelemetryLoggerMiddleware(telemetryClient);
var initializerMiddleware = new TelemetryInitializerMiddleware(telemetryLoggerMiddleware);
adapter.use(initializerMiddleware);
const mybot = new MYBOT(conversationState,userState, telemetryClient);
mybot.js
class MYBOT extends ActivityHandler {
constructor(conversationState,userState,telemetryClient) {
super();
this.conversationState = conversationState;
this.userState = userState;
this.telemetryClient = telemetryClient;
}
}
//This is how I get my qna result:
console.log(this.telemetryClient);
var result = await this.qnaMaker.getAnswers(context);
如您所见,我将 telemetryClient 传递给 bot 文件,如果我控制台记录该项目,我将获得完整的遥测对象,但我如何将用户问题和答案传递给它,以便节省洞察力 customevents? ?
找到了解决方法,以防正在寻找 Node 可能解决方案之一的人可能需要它:
基本上,我们使用官方文档中描述的相同遥测代码过程来实例化 index.js 上的遥测:
const { ApplicationInsightsTelemetryClient, TelemetryInitializerMiddleware } = require('botbuilder-applicationinsights');
const { TelemetryLoggerMiddleware } = require('botbuilder-core');
function getTelemetryClient(instrumentationKey) {
if (instrumentationKey) {
return new ApplicationInsightsTelemetryClient(instrumentationKey);
}
return new NullTelemetryClient();
}
const server = restify.createServer();
server.use(restify.plugins.bodyParser());
var telemetryClient = getTelemetryClient(process.env.InstrumentationKey);
var telemetryLoggerMiddleware = new TelemetryLoggerMiddleware(telemetryClient);
var initializerMiddleware = new TelemetryInitializerMiddleware(telemetryLoggerMiddleware);
adapter.use(initializerMiddleware);
const mybot = new MYBOT(conversationState,userState, telemetryClient);
然后,我们将其传递给 bot 文件(bot.js 或您正在使用的文件):
class MYBOT extends ActivityHandler {
constructor(conversationState,userState,telemetryClient) {
super();
this.conversationState = conversationState;
this.userState = userState;
this.telemetryClient = telemetryClient;
}
}
在后面的代码中,您可以使用 telemetry.trackEvent 方法(官方文档仅在 C# 中),但基本上,它允许您创建自定义事件想要跟踪代码中的特定事件,例如当您的机器人出现错误或找不到用户的答案时。根据前几行的代码将是这样的:
this.telemetryClient.trackEvent(
{name: "myEvent",
properties: {my_user_question: 'Context activity text here or your captured question',
my_bot_answer: 'bot reply or whatever'}
}
); // name and properties are part of the sintaxys, values inside properties object as you may need.
这样,在 Azure insights customEvents 模型上,您将看到使用您使用的事件名称捕获的记录,以及属性对象作为 customdimensions 字段中的字典。