我正在工作的Claudia.js机器人,可以通过Slack,FB信使,并作为一项Alexa技能。据推测,在克劳迪娅,你可以返回纯文本和框架将它返回到正确的“前端”..。我现在拥有的FB和Slack都很好,但是当我通过Alexa“服务模拟器”访问它时,我总是会得到“响应是无效的”。下面是使用Claudia.js的lambda。基本上,它从客户端获取消息,然后将它们转移到另一个Lambda,即"AI“。亚历克莎似乎被第67线呛住了。想法?
const promiseDelay = require('promise-delay');
// const aws = require('aws-sdk');
// const lambda = new aws.Lambda();
const lambda = require('aws-lambda-invoke');
const botBuilder = require('claudia-bot-builder');
const stackTrace = require('stack-trace');
//const slackDelayedReply = botBuilder.slackDelayedReply;
const getIntentName = alexaPayload =>
alexaPayload &&
alexaPayload.request &&
alexaPayload.request.type === 'IntentRequest' &&
alexaPayload.request.intent &&
alexaPayload.request.intent.name;
const api = botBuilder((message, apiRequest) => {
console.log = console.log.bind(null, '[LOG]');
console.info = console.info.bind(null, '[INFO]');
console.error = console.error.bind(null, '[ERROR]');
console.warn = console.warn.bind(null, '[WARN]');
console.info(message, apiRequest);
console.log(apiRequest.body);
const requestData = {
'user-id': {
type: message.type,
ID: message.sender
},
epoch: 1484771343.01,
'payload-type': 'luis',
facets: {},
utterance: 'Seek Showtimes',
payload: {
query: 'Seek Showtime',
topScoringIntent: {
intent: 'SeekShowtime',
score: 1.0
},
intents: [{
intent: 'SeekShowtime',
score: 1
}],
entities: []
}
};
if (message.text) {
return new Promise((resolve, reject) => {
lambda.raw.invoke({
FunctionName: 'ca2',
Payload: JSON.stringify(requestData),
}, (err, done) => {
if (err) {
const trace = stackTrace.parse(err);
console.warn(err);
console.error(trace);
return reject(err);
}
resolve(done);
});
}).then((result) => { // the initial response
const payload = JSON.parse(result.Payload);
console.log(payload.utterance);
return payload.utterance;
}).catch((error) => {
const trace = stackTrace.parse(error);
console.warn(error);
console.error(trace);
return 'Could not setup';
});
} else if (getIntentName(apiRequest.body) === 'ExitApp') {
return {
response: {
outputSpeech: {
type: 'PlainText',
text: 'Bye from Bot!'
},
shouldEndSession: true
}
};
} else {
return {};
}
},
{ platforms: ['facebook', 'slackSlashCommand', 'alexa'] }
);
module.exports = api;Update --即使我硬编码纯文本字符串响应或使用Alexa消息生成器,我仍然可以得到“响应无效”。当服务响应返回“未定义”时。
查看日志,一旦返回响应(用于botBuilder解析并传递给Alexa),此错误将发生[TypeError: Cannot read property 'replace' of undefined]。
另一项最新情况:
如果我用这样的东西替换return payload.utterance
if (type === 'alexa-skill') {
Console.warn('trying to contact alexa');
return "Hi from Alexa";
}问题依然存在。
以下是Json请求的来源,没有问题:
2017-04-27T18:06:30.552Z 3d70c273-2b74-11e7-a1c8-bf3fec00cbff STORE Map { "user-id": Map { "type": "alexa-skill", "ID": "amzn1.ask.account.AF6FUNJDSHGCXPVSAO5HUSRYFBD3SPCJJLILC4HLPS3K3L4AOWIMXPS4ZDDCXQ3ZVIV5L4FOMYD23PWZXEIAKYQBVXIQTPE2WW2PMBIXQIY3TUATXADCVNYO7NYUR2B45EU5GRIWBFHQIPLQVDQZMXD7IYVGTKAV3OWPHROCPR7XIUGNSJEAGQZJOMULSKT5HYSNUNJONASE34Y" }, "epoch": 1484771343.01, "payload-type": "luis", "utterance": "when is Logan playing", "payload": Map { "query": "when is Logan playing" } }下面是从其他lambda (有效载荷)获得的响应:
017-04-27T18:06:32.513Z 3d70c273-2b74-11e7-a1c8-bf3fec00cbff [LOG] mnlpData { StatusCode: 200,
Payload: '{"utterance": "To find movies playing near you, I need to know where you are. Please tell me your zip code.", "AskLocation": 1, "context": {"updated": 1493316392.162429, "user_id": "TEST_ID_TUES_14", "sessions": [{"intents": ["SeekShowtime", "SeekShowtime"], "facet-delta": {}, "facets": {"ity.location": {"ity.zip": "", "ity.code": "", "ity.theatre-name": ""}, "ity.movie": {"ity.title": "", "ity.code": ""}, "ity.time": [], "ity.date": []}, "modes": ["", "SHOWTIME_SWITCH", "AskLocation", "SHOWTIME_SWITCH", "AskLocation"]}], "created": 1493316379.950335, "mode_process_count": 2, "user-id": {"type": "alexa-skill", "ID": "amzn1.ask.account.AF6FUNJDSHGCXPVSAO5HUSRYFBD3SPCJJLILC4HLPS3K3L4AOWIMXPS4ZDDCXQ3ZVIV5L4FOMYD23PWZXEIAKYQBVXIQTPE2WW2PMBIXQIY3TUATXADCVNYO7NYUR2B45EU5GRIWBFHQIPLQVDQZMXD7IYVGTKAV3OWPHROCPR7XIUGNSJEAGQZJOMULSKT5HYSNUNJONASE34Y"}, "utterance": ["To find movies playing near you, I need to know where you are. Please tell me your zip code."]}}' }然后:
2017-04-27T18:06:32.514Z 3d70c273-2b74-11e7-a1c8-bf3fec00cbff [WARN] trying to contact alexa然后是错误:
2017-04-27T18:06:32.514Z 3d70c273-2b74-11e7-a1c8-bf3fec00cbff [TypeError: Cannot read property 'replace' of undefined]发布于 2017-04-28 06:44:43
首先,如果您注意到从其他lambda发送给您的有效负载,您可以看到utterance是一个数组,因此您可能必须传递第一个元素(如果存在)。
通过查看bot构建器的代码,我认为您得到的错误是由于您的alexaAppName未定义的事实,并且当传下来到以base64编码的响应程序时,这个变量的运行替换是不可能的。
我将努力确保我的应用程序名配置正确,并且给出的是一个有效的字符串,如alexa claudia例子所示。
发布于 2017-04-28 06:33:19
如果您还没有,运行claudia update --configure-alexa-skill并输入您的机器人名称,然后使用它在您的alexa技能构建器设置中提供的url。选择HTTPS而不是lambda。
目前,message.text被作为空字符串传递,这意味着您的日志块没有触发,并且在代码的最底部返回一个空对象。通过用字符串替换空对象来自己测试它,alexa测试人员不再抱怨。
那么为什么message.text是一个空字符串呢?Claudia js通过连接为您的意图填充的所有插槽来填充文本字段。如果你的意图没有插槽,那么克劳迪娅会传递一个空字符串。
向您的意图中添加插槽,确保配置了技能,并修复了逻辑语句问题。
https://stackoverflow.com/questions/43476311
复制相似问题