Google 帐户链接前请求参数的操作
Google Action asking for parameters before account linking
我正在为我的 google 操作使用 OAuth Authorisation Flow,出于某种原因,它要求参数,然后启动帐户链接,然后再次要求参数。
示例响应:
代码
app.intent('Create Channel Intent', async (conv, params) => {
if (!conv.user.access.token) {
conv.ask(new SignIn());
} else {
var locale = conv.user.locale;
if (locale === 'hi-IN') {
var accessToken = conv.user.access.token;
var channelNameRaw = params.channelname;
var channelNameData = await helperFunctions.hinditranslate(channelNameRaw);
var channelNameLwr = channelNameData.toLowerCase();
var channelName = helperFunctions.replaceWhitespacesFunc(channelNameLwr);
const headers = await helperFunctions.login(accessToken);
const speechText = await helperFunctions.createChannel(channelName, headers);
conv.ask(speechText);
} else {
var accessToken = conv.user.access.token;
var channelNameRaw = params.channelname;
var channelNameData = channelNameRaw.toLowerCase();
var channelName = helperFunctions.replaceWhitespacesFunc(channelNameData);
const headers = await helperFunctions.login(accessToken);
const speechText = await helperFunctions.createChannel(channelName, headers);
conv.ask(speechText);
}
}
});
对话流
您不应将训练短语添加到您的登录事件意图中。如果请求登录许可的意图有训练phares就足够了。因为它指向 actions_intent_SIGN_IN 事件并在那里继续,除非用户尚未登录。我猜你在一个意图中做了这两个动作,所以这让它变得混乱并试图调用相同的意图并询问参数。
如果您必须使用这种方式,请尝试使用上下文,以便您可以在第二次调用时将参数值传递给此 Intent。
我 %99 确定您的 intent 的树懒填充已关闭。
您的创建频道意图将频道名称作为必需参数。如果没有 Sloth-filling,意图将不会调用您的 server/code,直到满足每个必需的参数。
发生的事情是:
- 您正在调用创建频道意图,它要求输入频道名称,因为它是必需的
- 用户提供频道名称,意图在满足所有必需参数后调用您的代码。
- 您的代码触发 sign_in 意图,因为用户尚未登录。
- 用户授予触发 actions_intent_SIGN_IN 事件的权限
- 您的创建频道意图已被调用,因为它以 actions_intent_SIGN_IN 作为触发器并要求提供频道名称,因为此意图是全新的。
要修复,请执行以下操作之一:
- 在意图底部启用 sloth-filling。
- 添加输出上下文并将#[CONTEXT-NAME].channelname 作为默认值添加到 channelname 参数(无手镯)。当鼠标悬停在参数上时,您可以通过单击出现的三点来分配默认值。
- 从您的创建频道意图中拆分捕获 sign_in 事件
希望对您有所帮助。
我正在为我的 google 操作使用 OAuth Authorisation Flow,出于某种原因,它要求参数,然后启动帐户链接,然后再次要求参数。
示例响应:
代码
app.intent('Create Channel Intent', async (conv, params) => {
if (!conv.user.access.token) {
conv.ask(new SignIn());
} else {
var locale = conv.user.locale;
if (locale === 'hi-IN') {
var accessToken = conv.user.access.token;
var channelNameRaw = params.channelname;
var channelNameData = await helperFunctions.hinditranslate(channelNameRaw);
var channelNameLwr = channelNameData.toLowerCase();
var channelName = helperFunctions.replaceWhitespacesFunc(channelNameLwr);
const headers = await helperFunctions.login(accessToken);
const speechText = await helperFunctions.createChannel(channelName, headers);
conv.ask(speechText);
} else {
var accessToken = conv.user.access.token;
var channelNameRaw = params.channelname;
var channelNameData = channelNameRaw.toLowerCase();
var channelName = helperFunctions.replaceWhitespacesFunc(channelNameData);
const headers = await helperFunctions.login(accessToken);
const speechText = await helperFunctions.createChannel(channelName, headers);
conv.ask(speechText);
}
}
});
对话流
您不应将训练短语添加到您的登录事件意图中。如果请求登录许可的意图有训练phares就足够了。因为它指向 actions_intent_SIGN_IN 事件并在那里继续,除非用户尚未登录。我猜你在一个意图中做了这两个动作,所以这让它变得混乱并试图调用相同的意图并询问参数。
如果您必须使用这种方式,请尝试使用上下文,以便您可以在第二次调用时将参数值传递给此 Intent。
我 %99 确定您的 intent 的树懒填充已关闭。
您的创建频道意图将频道名称作为必需参数。如果没有 Sloth-filling,意图将不会调用您的 server/code,直到满足每个必需的参数。
发生的事情是:
- 您正在调用创建频道意图,它要求输入频道名称,因为它是必需的
- 用户提供频道名称,意图在满足所有必需参数后调用您的代码。
- 您的代码触发 sign_in 意图,因为用户尚未登录。
- 用户授予触发 actions_intent_SIGN_IN 事件的权限
- 您的创建频道意图已被调用,因为它以 actions_intent_SIGN_IN 作为触发器并要求提供频道名称,因为此意图是全新的。
要修复,请执行以下操作之一:
- 在意图底部启用 sloth-filling。
- 添加输出上下文并将#[CONTEXT-NAME].channelname 作为默认值添加到 channelname 参数(无手镯)。当鼠标悬停在参数上时,您可以通过单击出现的三点来分配默认值。
- 从您的创建频道意图中拆分捕获 sign_in 事件
希望对您有所帮助。