我想为我的Google Home制作谷歌语音操作应用.但是,根据快速研究,截至12月11日,谷歌不允许Google Home的私人项目.
参考文献:
我了解我可以从API.ai项目中预览应用程序,并将其部署到链接的Google Home设备.
但问题是,部署的应用程序不会持久存在.大约一小时后它就不再可用了.我怎样才能使它成为永久性的(如果有办法)?
UPDATE
根据Leon的回答,我只想扩展如何启用样本的步骤24 hours.
我有一个使用firebase构建的Web应用程序.在我的网络应用程序中,我有google,firebase,twitter注册/登录功能.
现在我想将它与我的api.ai代理集成,并拥有一个无缝的帐户链接.因此,用户将使用移动设备上的googel Home/assistant应用程序连接到我的代理商.在这个阶段,我将拥有谷歌帐户ID,谷歌电子邮件,用户名.
如果用户已经在场,我可以发送我的代理所需的令牌.但如果用户是新用户,我想在我的firebase数据库中创建帐户.我无法手动在firebase中创建联合帐户(来自nodejs应用程序/云功能)!
我知道有可能创建一个电子邮件+虚拟密码帐户,但这不是我想要的.因为用户在尝试登录我的网络应用程序时注册了虚拟密码,所以会使用他们的谷歌登录功能.
如果我创建电子邮件和虚拟密码,流量不好,我将强制用户更改密码并在他们访问我的网络渠道时再次链接他们的Google帐户!
有CLI方法,我可以从文件中导入用户.如果有可能,有人可以帮助我如何在云功能中完成这项工作吗?
node.js firebase-authentication firebase-admin actions-on-google api-ai
我正在使用API AI提供的GUI工具来创建Actions.是否可以获取设备位置?我听说通过请求权限可以实现这一点.这记录在哪里?示例/代码段非常有用.
使用API.AI和Google智能助理,我正在请求获取用户名称和位置的权限.目的是我可以一次请求许可,随后对我的行动的请求将不需要再次询问(因为每次用户与我的行动谈话时,这将导致非常笨拙的对话).
我发现的是,我只是获取与意图相关actions_intent_PERMISSION的信息 - 即使我已经授予了许可,信息也不会在其他意图履行中发送.(在下面的示例代码中 - 它最终会重新请求所有其他意图的权限.)
我也没有在我的Action的调用之间看到这种权限.因此,每次触发操作时,都会(再次)询问他们是否授予操作权限.
这两种行为都很奇怪.通常,应用程序模型不要求我在应用程序的调用之间或者甚至在应用程序"运行"时重新授权对资源的许可.甚至网页也会在会话期间保留授权.我做错了什么,或者这是出于预期的行为?
正在执行的代码(这是在Google Cloud Functions中运行的,并且还有一些通过Promise进行这些调用的其他结构 - 这只是代码的相关部分).在res.send(200)刚刚指示API.AI它应该使用被定义有响应,这工作没有任何问题.的return Promise.resolve(null);只是确保在其他备用/错误条件不执行.
exports.process = function( req, res ){
var app = new ApiAiApp({request:req, response:res});
if( app.isPermissionGranted() ){
res.send( 200 );
return Promise.resolve( null );
} else {
return askPermission( req, res, app );
}
};
var askPermission = function( req, res, app ){
//app.tell('foo');
let namePermission = app.SupportedPermissions.NAME;
let preciseLocationPermission = app.SupportedPermissions.DEVICE_PRECISE_LOCATION;
// Ask for more than one permission. User can authorize …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用DialogFlow(Api.AI)与Firebase Auth连接Google智能助理应用.我的应用程序使用Firebase Auth维护用户帐户和实时数据库来存储数据.我希望能够通过Google智能助理更改用户的数据,也许可以使用类似云功能的内容.要通过Google智能助理进行任何用户更改,我需要将用户的Google智能助理帐户与其Firebase身份验证帐户相关联.当前机制似乎使用此处记录的OAuth流程.
我的问题是,实现这一目标的最佳方法是什么?我是否需要设置自定义OAuth服务器?Google的云网站上有很多关于OAuth的文档,但这些文档似乎都与使用OAuth访问Google的API有关,我无法真正看到在GCP中托管这种链接机制的简单方法.
有这个问题,这是非常接近,但我有不同的是,我没有外部API,我只是想验证自己的用户能够修改在实时数据库及其数据.
谢谢您的帮助!
oauth firebase-authentication google-cloud-functions actions-on-google api-ai
我正在使用API在Google上构建应用,使用API.AI,允许用户通过Google Home与我的应用对话.API.AI允许我在两个男声和两个女声之间进行选择,但是,这四种声音都不是普通的Google Home声音.
有没有办法让Google Home保持正常的声音而不是这四种机器人替代方案?谷歌之家突然切换声音,这很奇怪.
过去,我已经设置了两个用Java编写的独立AWS lambda.一个用于Alexa,一个用于Api.ai. 他们只是向每个助手api返回"Hello world".所以虽然它们很简单,但它们都有效 当我开始为每个代码编写越来越多的代码时,我开始看到我的java代码有多么相似,而我只是通过拥有两个单独的lambdas来重复自己.
快进到今天.
什么我现在工作的是有一个单一的 AWS拉姆达可从处理输入都 Alexa和Api.ai但我遇到了一些麻烦.目前,我的想法是,当运行lambda时,会有一个简单的if语句,如下所示:
以下不是真正的代码,只是我认为我可以做的事情
if (figureOutIfInputType.equals("alexa")){
runAlexaCode();
} else if (figureOutIfInputType.equals("api.ai")){
runApiAiCode();
}
Run Code Online (Sandbox Code Playgroud)
事情是现在我需要以某种方式告诉函数是否被alexa或api.ai调用.
这是我现在的实际java:
public class App implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
System.out.println("myLog: " + input.toString());
return "Hello from AWS";
}
Run Code Online (Sandbox Code Playgroud)
然后我从Alexa和Api.ai运行lambda来查看在java中生成的Object输入.
API.ai
{id=asdf-6801-4a9b-a7cd-asdffdsa, timestamp=2017-07-
28T02:21:15.337Z, lang=en, result={source=agent, resolvedQuery=hi how
are you, action=, actionIncomplete=false, parameters={}, contexts=[],
metadata={intentId=asdf-3a2a-49b6-8a45-97e97243b1d7,
webhookUsed=true, webhookForSlotFillingUsed=false,
webhookResponseTime=182, intentName=myIntent}, fulfillment=
{messages=[{type=0, speech=I have failed}]}, score=1}, status=
{code=200, errorType=success}, sessionId=asdf-a7ac-43c8-8ae8-
bc1bf5ecaad0}
Run Code Online (Sandbox Code Playgroud)
Alexa的
{version=1.0, …Run Code Online (Sandbox Code Playgroud) 我正在使用API.ai在Actions On Google API上构建.为了完成我的一个动作,我需要知道用户的位置和当地时间.
我已经能够成功地要求并收回用户的位置.
但是,我看不到任何获取用户本地时间或时区偏移的方法.有没有办法做到这一点?
(我意识到我可以使用该位置找出偏移量,但这需要另一个API调用或使用另一个库,我宁愿避免.)
提前致谢.
- 更新 -
根据Leon的回答,截至2017年1月18日,该信息目前尚未由API提供.为了获得所需信息,我请求了用户精确位置的权限,该位置返回lat和lng.然后我使用GeoNames 时区API来获取时区偏移量.
如文档中所述,我已经设置了云帐户并激活了dialogflow API。然后,我在我的dialogflow.com帐户中激活了dialogflow V2,并在其中设置了相同的google项目。
我以JSON格式下载了Google凭据,并相应地设置了身份验证的路径。
完成所有这些之后,当我跑步时
from google.cloud import storage
storage_client = storage.Client()
buckets = list(storage_client.list_buckets())
print(buckets)
Run Code Online (Sandbox Code Playgroud)
它给了我错误,
OSError: Project was not passed and could not be determined from the environment.
Run Code Online (Sandbox Code Playgroud)
因此,我在存储客户端本身中设置了项目名称。
storage_client = storage.Client(project='[Project-id]')
Run Code Online (Sandbox Code Playgroud)
因此,这仍然解决了代码问题,我认为它应该自己检测出project-id,而不必像文档中所提供的那样提供项目ID。
完成所有这些之后,我尝试运行以下程序以检查连接,
import dialogflow_v2beta1
client = dialogflow_v2beta1.AgentsClient()
parent = client.project_path('[Project-id]')
response = client.import_agent(parent)
def callback(operation_future):
result = operation_future.result()
response.add_done_callback(callback)
metadata = response.metadata()
Run Code Online (Sandbox Code Playgroud)
此后,我收到以下错误消息,
PermissionDenied: 403 Dialogflow API has not been used in project usable-auth-library before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/dialogflow.googleapis.com/overview?project=usable-auth-library then retry. …Run Code Online (Sandbox Code Playgroud) 我有$dinetype从用户获得的变量.
但我想根据$dinetype变量中设置的值给出响应.除了回答之外,我还需要设置相关的上下文.我如何在DialogFlow中执行此操作?
if($Dinetype=='dineout')
ask ('which restaurant would you like to go to?')
set_context ('awaiting-restaurant')
if($Dinetype=='takeaway')
ask ('When would you like to take away?')
set_context ('awaiting-takeaway-time')
Run Code Online (Sandbox Code Playgroud)
它可编程吗?或者是否可以在UI中实现与上述相同的功能?
api-ai ×10
google-home ×3
alexa ×1
aws-lambda ×1
if-statement ×1
node.js ×1
oauth ×1
python-3.x ×1