Google智能助理:帐户关联和操作sdk:无法看到登录消息

时间:2018-04-23 15:19:37

标签: actions-on-google google-home

我想使用Actions Sdk在Google智能助理应用程序上启用帐户关联。 我已经在AoG控制台的帐户关联部分提供了相关信息: 授权类型是授权代码。 我使用Auth0作为Oauth服务器,我检查了端点是否正常工作。

使用模拟器调用应用程序时,服务器应用程序发送以下json响应:

{
  "expectUserResponse": true,
  "finalResponse": null,
  "expectedInputs": [{
    "possibleIntents": [{
      "intent": "actions.intent.SIGN_IN",
      "inputValueData": null
    }],
    "inputPrompt": {
      "richInitialPrompt": {
        "items": [{
          "simpleResponse": {
            "textToSpeech": "Merci de vous authentifier",
            "ssml": null,
            "displayText": "Merci de vous authentifier"
          }
        }]
      }
    }
  }], 
  "conversationToken": null, 
  "isInSandbox": false
}

我当时希望看到如下消息:看起来您的帐户...没有链接

助手立即将以下请求发送到服务器,而不是那样:

{
  "user": {
    "userId": "ABwppHGK6fClByrbLlS8WDM4xfY0qEck5i_kOGMhlJtuj64SjC-8qDqlH3xZ3BN7f9Yz1JDza-sc",
    "locale": "fr-CA",
    "lastSeen": "2018-04-23T14:12:02Z"
  },
  "conversation": {"conversationId": "1524493058716", "type": "NEW"},
  "inputs": [{
    "intent": "actions.intent.SIGN_IN",
    "rawInputs": [{"inputType": "KEYBOARD"}],
    "arguments": [{
      "name": "SIGN_IN",
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.SignInValue",
        "status": "ERROR"
      }
    }]
  }],
  "surface": {
    "capabilities": [
      {"name": "actions.capability.WEB_BROWSER"}, 
      {"name": "actions.capability.MEDIA_RESPONSE_AUDIO"}, 
      {"name": "actions.capability.SCREEN_OUTPUT"}, 
      {"name": "actions.capability.AUDIO_OUTPUT"}
    ]
  },
  "isInSandbox": true,
  "availableSurfaces": [
    {
      "capabilities": [
        {"name": "actions.capability.SCREEN_OUTPUT"}, 
        {"name": "actions.capability.AUDIO_OUTPUT"}
      ]
    }
  ]
}

有人遇到同样的问题吗?感谢

1 个答案:

答案 0 :(得分:0)

我有一个工作示例,但它可能与您正在执行的操作有所不同,因为我要求使用Google Analytics助手的“对话框集成”标签登录,而不是明确地使用SDK。代码是针对Dialogflow的V2,我也有一个用于V1,但它现在是遗留的。

这是我的应用程序启动时触发的BONJOUR意图:

const rp = require('request-promise');

app.intent('BONJOUR', (conv) => {
    console.log("Debug: SAY_HELLO");
    const accessToken = conv.user.access.token;
    console.log("Access Token = "+accessToken);
    //========Auth with OAuth website========
    if (!accessToken) {
        conv.ask(new SignIn());
    } else {
        let options = {
            method: 'GET',
            url: '[...]',//Oauth URL
            headers:{
                authorization: 'Bearer ' + accessToken,
            }
        };
        // I use the RP lib as we need Promises for the V2 of Dialogflow.
        return rp(options).then((body) => {
            let data = JSON.parse(body);
            console.log("auth data ="+JSON.stringify(data));
            //You can access the auth data easily here
            // For example if you want the name, it's in data.given_name, etc...
            //Use conv.ask() to say something here
        }).catch((error) => {
            console.log("Error in auth request"+error);
        })
    }
});

<强>更新

这是我的JSON mais SignIn()被调用,因为我刚测试它,它不起作用(我创建了一个从example接收actions_intent_SIGN_IN事件的intent。它从不要求签名在,我总是在其他地方。)

Response {
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "PLACEHOLDER"
            }
          }
        ]
      },
      "userStorage": "{\"data\":{}}",
      "systemIntent": {
        "intent": "actions.intent.SIGN_IN",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.SignInValueSpec"
        }
      }
    }
  },
  "outputContexts": [
    {
      "name": [...],
      "lifespanCount": 99,
      "parameters": {
        "data": "{}"
      }
    }
  ]
}

之后的请求是:

Request {
  "responseId": "5a711f0e-be66-4311-b776-2085e81e9bde",
  "queryResult": {
    "queryText": "actions_intent_SIGN_IN",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            ""
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "..."
      },
      {
        "name": ".../actions_intent_sign_in",
        "parameters": {
          "SIGN_IN": {
            "@type": "type.googleapis.com/google.actions.v2.SignInValue",
            "status": "ERROR"
          }
        }
      },
      {
        "name": "...",
        "lifespanCount": 98,
        "parameters": {
          "data": "{}"
        }
      },
      {
        "name": "..."
      },
      {
        "name": "..."
      },
      {
        "name": "..."
      },
      {
        "name": "..."
      }
    ],
    "intent": {
      "name": "...",
      "displayName": "Get Signin"
    },
    "intentDetectionConfidence": 1,
    "diagnosticInfo": {},
    "languageCode": "fr-fr"
  },
  "originalDetectIntentRequest": {
    "source": "google",
    "version": "2",
    "payload": {
      "isInSandbox": true,
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.WEB_BROWSER"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.SCREEN_OUTPUT"
          },
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          }
        ]
      },
      "inputs": [
        {
          "rawInputs": [
            {
              "inputType": "KEYBOARD"
            }
          ],
          "arguments": [
            {
              "extension": {
                "@type": "type.googleapis.com/google.actions.v2.SignInValue",
                "status": "ERROR"
              },
              "name": "SIGN_IN"
            }
          ],
          "intent": "actions.intent.SIGN_IN"
        }
      ],
      "user": {
        "userStorage": "{\"data\":{}}",
        "lastSeen": "2018-04-24T12:21:19Z",
        "locale": "fr-FR",
        "userId": "ABwppHHXrOc7N24RC5YS1dMvt7C-MbpzTb5TtzmufeIpGTCINVlReIMb8RKo4SGQMgBY7BUvO1qhn0B-"
      },
      "conversation": {
        "conversationId": "1524572717282",
        "type": "ACTIVE",
        "conversationToken": "[\"_actions_on_google\"]"
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            }
          ]
        }
      ]
    }
  },
  "session": "..."
}

我希望它能以某种方式帮助你。