DialogFlow中使用PHP实现时如何请求姓名/位置权限?
在PHP Webhook中实现Actions on Google的位置权限请求
其实PHP完全可以实现类似Actions on Google JavaScript里askForPermission的功能,核心原因是:权限请求本质是返回特定格式的JSON响应给Dialogflow,不管用什么后端语言,只要能构造出符合要求的响应结构就行,不需要专门的PHP辅助函数,咱们手动拼对应的JSON就能搞定。
下面给你一步步拆解实现方法:
1. 确定需要的权限类型
位置相关的常用权限有两种:
DEVICE_PRECISE_LOCATION:获取精确的经纬度位置DEVICE_COARSE_LOCATION:获取粗略的地理位置(比如城市级别)
你可以根据业务需求选择其中一种或两种都要。
2. 构造权限请求的PHP响应
在你的Webhook PHP脚本里,直接构造符合Actions on Google规范的JSON响应即可,示例代码如下:
<?php header('Content-Type: application/json'); // 构建权限请求响应结构 $permissionResponse = [ "payload" => [ "google" => [ "expectUserResponse" => true, "richResponse" => [ "items" => [ [ "simpleResponse" => [ "textToSpeech" => "我需要获取你的位置信息,请问可以吗?" ] ] ] ], "systemIntent" => [ "intent" => "actions.intent.PERMISSION", "parameters" => [], "data" => [ "@type" => "type.googleapis.com/google.actions.v2.PermissionValueSpec", "optContext" => "为了给你提供附近的专属服务", "permissions" => [ "DEVICE_PRECISE_LOCATION" // 这里替换成你需要的权限 ] ] ] ] ] ]; echo json_encode($permissionResponse); ?>
关键字段说明:
expectUserResponse: 设为true,告诉Dialogflow需要等待用户的授权回复richResponse: 给用户展示的提示话术,要清晰说明请求权限的原因,提升授权率systemIntent: 指定权限请求的系统意图actions.intent.PERMISSION,permissions数组里填写你需要的权限类型,optContext是权限请求的补充说明,帮助用户理解授权的用途
3. 接收用户授权后的位置信息
当用户授权后,Dialogflow会把位置信息通过Webhook请求发送到你的PHP脚本,你可以从请求体中提取位置数据,示例代码:
<?php // 获取Dialogflow发送的Webhook请求体 $requestBody = json_decode(file_get_contents('php://input'), true); // 提取位置信息 $location = null; if (isset($requestBody['originalDetectIntentRequest']['payload']['user']['profile']['location'])) { $location = $requestBody['originalDetectIntentRequest']['payload']['user']['profile']['location']; $latitude = $location['coordinates']['latitude']; $longitude = $location['coordinates']['longitude']; } // 处理位置信息并构造回复 if ($location) { $fulfillmentText = "已获取到你的位置:纬度{$latitude},经度{$longitude}"; } else { $fulfillmentText = "无法获取你的位置信息,你可以稍后再尝试授权~"; } $response = [ "fulfillmentText" => $fulfillmentText ]; header('Content-Type: application/json'); echo json_encode($response); ?>
补充说明
虽然没有官方的PHP辅助库,但只要严格遵循Actions on Google的响应格式规范,就能实现和JavaScript辅助函数完全一致的效果。你可以参考Actions on Google官方文档里的权限请求响应结构,将其转换为PHP数组后再编码成JSON即可。
内容的提问来源于stack exchange,提问作者Octopus
相关产品推荐
相关产品推荐

