问题描述
我需要使用遥测功能向QnA用户发送有关Azure机器人见解的问题和解答。已经尝试过本教程:
这则帖子:
- How to get the Qna Maker "Q" from Analytics Application Insights?
- How can I save some custom qna maker data in azure app insights?
事情是这样的,首先,它是为LUIS完成的,没有为Insights提供其他信息,也没有为QnA提供任何信息...为C#编写了第二个信息...
我需要使用NodeJS在Azure见解上向customEvents日志发送问题和答案,但我找不到任何帮助吗?
谢谢。
/////编辑:
这是我到目前为止所得到的(仅发布了与遥测和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,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? / p>
解决方法
找到了一种解决方法,以防正在寻找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,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见解customEvents模型上,您将看到使用您使用的事件名称捕获的记录,并且还将属性对象作为customdimensions字段中的dict。