我们将在本教程中使用的所有文件都可以在此GitHub存储库中使用。
>
意图 - 目的允许我们根据用户所说的内容来定义程序将执行哪些操作。样本意图是“转换货币”。然后,我们列出用户是否要转换货币的所有可能的短语或句子。例如,用户可以说“ @sys.number:number @currency:@currency in @currency:tocurrency:tocurrency?’在此示例中,我们使用了两个实体: @sys.number和@currency。实体之后使用结肠允许我们为该实体定义一个别名。然后可以在我们的代码中使用此别名来获取实体的价值。我们需要给相同的实体一个不同的别名,以便我们可以在代码中分别对待它们。为了使人类理解上述意图,我们要做的就是替代具有实际价值观的实体。因此,用户可能会说“日元中的900美元是多少?对于Tocurrency @currency。
别名 - 别名提供了一种指代代码中特定实体的方法,正如我们先前在意图的解释中所看到的那样。
>
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
>现在我们对主要概念有了了解,我们可以继续构建一个简单的应用程序。我们要构建的第一件事是将当前时间置于特定位置的应用。
>
接下来,转到代理页面,并单击“创建代理”按钮创建新代理。在创建新代理的页面中,输入名称,描述和语言,然后保存。
>这为您提供了订阅密钥,开发人员访问令牌和客户端访问令牌。您可以使用这些来从客户端(浏览器)或服务器向API提出请求。从服务器中提出请求的一个优点是将您的凭据隐藏。
接下来,安装guzzle。我们将使用Guzzle 5向API.AI.
提出请求。然后,创建一个新的php文件(time.php)并添加以下代码,以便我们可以使用文件中的guzzle。
之后,定义您的API键:
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>自然,在真实的应用中,您可能会在某种本地配置文件中保留凭据外面的凭据。
我们现在可以向API.AI提出请求。为了提出请求,我们需要将开发人员访问令牌和订阅密钥作为标题传递。然后,我们将请求的正文作为JSON传递。请求主体应包含查询和lang键。查询通过邮政请求从客户端提交。该应用程序查询的一个示例是“西班牙巴塞罗那几点钟?”或“目前在日本伊克布库罗的时间是多少?”。返回的响应是一个JSON字符串,因此我们通过调用$响应的JSON方法将其转换为数组。
<span>composer require guzzlehttp/guzzle:~5.0</span>
>这是我们在上述请求时得到的示例响应:
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>
如果我们获得200个状态代码,则意味着请求成功。我们需要的数据存储在结果项目中。在这种情况下,我们只需要从参数提取位置。如果未返回位置,那么我们只会告诉用户找不到位置。
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
如果找到位置,我们向Google Geocoding API提出请求,以将位置转换为坐标。如果状态可以,这意味着我们得到了结果。因此,我们只从第一个结果提取纬度和经度值。
><span>composer require guzzlehttp/guzzle:~5.0</span>接下来,我们将获得当前的UNIX时间戳。我们将此值与纬度和经度一起传递,以查询我们向Google TimeZone API的请求。然后,我们提取可以使用date_default_timezone_set方法临时设置时区的TimeZoneID。最后,我们只是将格式的时间输出给用户。
>
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>>让我们继续前往客户端。创建一个带有以下代码的index.html文件:
>
<span>$google_api_key = 'YOUR_GOOGLE_API_KEY'; </span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN'; </span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>我们正在使用jQuery(用于事件处理)和响应式voice.js。响应式声音库使我们能够将文本转换为语音。我们用它来说明我们从服务器获得的结果。
>我们也有语音识别。JS,我们用于将语音转换为文本。这使用网络语音API。可悲的是,在写作时,它仍然仅在一些浏览器上得到部分支持,因此本教程将假定您使用Chrome(确实支持它)。
>让我们解释以上文件。首先是我们将用来存储当前语音识别对象的全局变量。
接下来是StarTreagnition方法。这是创建一个新的语音识别对象。这将要求用户使用麦克风。接下来,我们将语言设置为英语并开始语音识别。然后,我们聆听Onstart活动。当触发此事件时,这意味着语音识别已经开始。发生这种情况时,我们调用Updaterec方法,该方法更改了按钮的文本,以启动和停止语音识别。我们还聆听on Result事件,当用户停止讲话几秒钟时,该事件会触发。这包含语音识别的结果。我们必须循环浏览结果,并在每个结果中使用成绩单项来获取所需的文本。完成此操作后,我们调用SETINPUT方法,该方法更改查询文本字段的值,并调用将查询提交到服务器的发送方法。接下来,我们称之为停止语音识别并更新UI的停止认知方法。我们还需要在ONEND事件中进行同样的事情。
><span>$query = $_POST['query']; //the users query </span><span> </span><span>$response = $client->post('https://api.api.ai/v1/query', array( </span><span> 'headers' => array( </span><span> 'Authorization' => "Bearer {$apiai_key}", </span><span> 'ocp-apim-subscription-key' => $apiai_subscription_key, </span><span> 'Content-Type' => 'application/json; charset=utf-8' </span><span> ), </span><span> 'json' => array( </span><span> "query" => $query, </span><span> "lang" => "en" </span><span> ) </span><span>)); </span><span> </span><span>$result = $response->json();</span>
这是Updaterec方法。
>Array ( [id] => eb69f468-6e1a-41c9-883d-6ac7c71cd187 1739117986 => 2015-05-16T09:19:47.519Z [result] => Array ( [source] => domains [resolvedQuery] => What's the current time in Barcelona Spain? [speech] => [action] => clock.time [parameters] => Array ( [location] => Barcelona Spain ) [metadata] => Array ( [inputContexts] => Array ( ) [outputContexts] => Array ( ) [contexts] => Array ( ) ) ) [status] => Array ( [code] => 200 [errorType] => success ) )
setInput方法。
<span>if(!empty($result['result']) && !empty($result['result']['parameters']['location'])){ </span><span> $location = $result['result']['parameters']['location']; </span><span> </span><span>}else{ </span><span> echo "Sorry, I could not find that location."; </span><span>}</span>
>停止认知方法。
<span>$place_response = $client->get("http://maps.googleapis.com/maps/api/geocode/json?address={$location}&sensor=false"); </span><span> </span><span>$place_result = $place_response->json(); </span><span> </span><span>if($place_result['status'] == 'OK'){ </span><span> </span><span> $lat = $place_result['results'][0]['geometry']['location']['lat']; </span><span> $lng = $place_result['results'][0]['geometry']['location']['lng']; </span><span>}</span>除此之外,我们还拥有SwitchRevention方法,每当用户单击按钮以触发语音识别以开始或停止时。
用户按查询字段上的Enter键时,这也触发要发送到服务器的查询。
<span>$timestamp = time(); //get the current unix timestamp </span><span> </span><span>$time_response = $client->get("https://maps.googleapis.com/maps/api/timezone/json?location={$lat},{$lng}×tamp={$timestamp}&key={$google_api_key}"); </span><span> </span><span>$time_result = $time_response->json(); </span><span> </span><span>if($time_result['status'] == 'OK'){ </span><span> $timezone = $time_result['timeZoneId']; </span><span> </span><span> date_default_timezone_set($timezone); </span><span> </span><span> echo 'It's currently ' . date('l, F j, Y g:i A') . ' in ' . $location; </span><span>}</span>>
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>语音cognition.js文件中的大多数代码来自该要旨,该要点显示了如何在客户端上使用api.ai的示例。
下一步是我们向服务器提交查询的main.js文件。一旦得到响应,我们就会使用响应式声音将其说出来,并将其输出在响应容器中。这样,我们可以从视觉上检查响应。
<span>composer require guzzlehttp/guzzle:~5.0</span>>
我们将要构建的下一个应用程序允许用户将特定金额从一种货币转换为另一种货币。
首先,创建一个新代理并称其为货币转换器。
>
>
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>“用户说”部分是我们定义用户所说的示例以触发此特定意图的示例。我们在这里做的是将实体用作用户可能使用的实际值的替代。 @sys.number可以参考任何数字。 @Currency可以指我们创建货币实体时先前添加的任何货币。实体后使用结肠使我们可以为其分配一个别名。然后可以使用此别名来获取用户在代码中使用的值。
>。
“动作”部分是我们定义要执行此特定意图的操作或方法的地方。在这种情况下,我们不会定义任何内容,因为我们只是创建一个只能做一件事的应用程序。>
>“履行”部分是我们在使用意图后要输出的语音模板定义模板。例如,我们可以说以下内容:
<span>$google_api_key = 'YOUR_GOOGLE_API_KEY'; </span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN'; </span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>>在我们获得的结果中,这将在语音项目上可用。从那里,我们可以执行替换字符串,以将这些变量替换为我们获得的实际值。但是,让我们把它作为空白的这个应用程序。
>完成后,单击“保存”按钮以保存意图。
>
>现在我们准备继续进行代码。然后,在工作目录中创建一个Exchange-rate.php文件,添加以下代码:<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>从上面的代码中可以看到
>,它基本上与我们在上一个应用程序中的早期相同。只有这一次,我们添加了$ CurrencyLayer_Apikey变量。这将存储我们从CurrencyLayer.com获得的API密钥,这是一种API,它使我们能够从一种货币到另一种货币获得当前的汇率。如果您想跟进,请继续注册API键。
> 接下来,我们检查是否有任何结果,并提取所需的数据。在这种情况下,我们需要获取用户希望转换的货币,将其转换为金额的货币。。
然后,我们向API提出请求,然后从结果中提取汇率:<span>composer require guzzlehttp/guzzle:~5.0</span>
我们从API中获得的结果如下:
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>
>现在我们有了当前的汇率,我们现在要做的就是将速率乘以用户提供的数量,然后输出结果。
<span>$google_api_key = 'YOUR_GOOGLE_API_KEY'; </span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN'; </span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>在客户端,我们仍然使用与第一个应用程序上早期使用的相同的HTML和文件。如果您关注的话,您可以继续将相同的文件放入工作目录中。
>
<span>$query = $_POST['query']; //the users query </span><span> </span><span>$response = $client->post('https://api.api.ai/v1/query', array( </span><span> 'headers' => array( </span><span> 'Authorization' => "Bearer {$apiai_key}", </span><span> 'ocp-apim-subscription-key' => $apiai_subscription_key, </span><span> 'Content-Type' => 'application/json; charset=utf-8' </span><span> ), </span><span> 'json' => array( </span><span> "query" => $query, </span><span> "lang" => "en" </span><span> ) </span><span>)); </span><span> </span><span>$result = $response->json();</span>>唯一的区别是我们发送请求的URL。将其指向您的Exchange-rate.php的位置:
>
Array ( [id] => eb69f468-6e1a-41c9-883d-6ac7c71cd187 1739117986 => 2015-05-16T09:19:47.519Z [result] => Array ( [source] => domains [resolvedQuery] => What's the current time in Barcelona Spain? [speech] => [action] => clock.time [parameters] => Array ( [location] => Barcelona Spain ) [metadata] => Array ( [inputContexts] => Array ( ) [outputContexts] => Array ( ) [contexts] => Array ( ) ) ) [status] => Array ( [code] => 200 [errorType] => success ) )结论
在本教程中,我们学会了如何使用API.AI来创建启用语音的PHP应用程序。浏览器支持仍然非常有限,因为网络语音API仍未得到广泛实现。但是API.AI支持除Web之外的其他平台。 Android,Cordova,.net,iOS就是几个例子。这意味着我们可以使用API.AI,而不必担心这些平台上的支持。如果您想了解更多信息,请务必查看他们的文档。我们在本教程中使用的文件可在此GitHub存储库中可用。
<span>if(!empty($result['result']) && !empty($result['result']['parameters']['location'])){ </span><span> $location = $result['result']['parameters']['location']; </span><span> </span><span>}else{ </span><span> echo "Sorry, I could not find that location."; </span><span>}</span>在语音控制的php应用程序上的常见问题(常见问题解答)api.ai
构建语音控制的PHP应用程序的先决条件是什么,使用API.AI构建语音控制的PHP应用 - 面向编程。您还需要对API.AI及其工作方式有工作知识。此外,您需要拥有可以托管PHP应用程序的服务器。最后,您需要在服务器上安装API.AI php SDK。
>
>如何在PHP应用程序中提高语音识别的准确性?>我可以在我的php应用程序中使用api.ai进行文本到语音吗? AI用于PHP应用程序中的文本到语音。 API.AI提供了将文本转换为语音的方法。您可以使用这些方法使您的应用程序向用户说出响应或说明。
>
>我可以将api.ai用于语音控制的Web应用程序吗?使用API.AI进行语音控制的Web应用程序。 API.AI PHP SDK可用于任何PHP应用程序,包括Web应用程序。您可以使用JavaScript在浏览器中捕获用户的语音输入,然后将其发送到您的PHP后端进行处理。以上是使用API.AI的语音控制PHP应用的详细内容。更多信息请关注PHP中文网其他相关文章!