アクセストークンは、音声対話サービスを呼び出すために使用できる資格情報です。このトピックでは、アクセストークンを取得する方法について説明します。
前提条件
アカウントの AccessKey ID と AccessKey Secret を取得済みであること。詳細については、「音声対話をアクティブ化する」をご参照ください。
Alibaba Cloud SDK を使用して、クラウドからアクセストークンをリクエストできます。このリクエストを送信するときは、Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret を提供する必要があります。クライアントからサーバーにトークンリクエストを送信して、アクセストークンを取得することもできます。詳細については、「HTTP または HTTPS リクエストを送信してアクセストークンを取得する」をご参照ください。
アクセストークンを使用する前に、ExpireTime パラメーターをチェックして、アクセストークンの有効期間を示すタイムスタンプを確認する必要があります。アクセストークンの有効期限が切れた場合は、新しいアクセストークンを取得する必要があります。
手順
音声対話コンソール にログオンします。
[概要] ページの右上隅にある アクセストークンを取得する をクリックします。
SDK を使用して、アクセストークンを使用して音声対話サービスを呼び出してテストできます。このアクセストークンはテスト目的のみです。
次のコードはサンプルレスポンスを示しています。
{ "NlsRequestId": "aed8c1af075347819118ff6bf811****", "RequestId": "0989F63E-5069-4AB0-822B-5BD2D953****", "Token": { "ExpireTime": 1527592757, "Id": "124fc7526f434b8c8198d6196b0a****", "UserId": "12345678****" } }サンプルレスポンスのパラメーター:
Id パラメーターは、リクエストで指定されたアクセストークンの ID を示します。
ExpireTime パラメーターは、アクセストークンの有効期間を表すタイムスタンプを示します。単位:秒。たとえば、値
1527592757は、アクセストークンが2018年 5月 29日 19:19:17 (UTC+8)より前に有効であることを示します。
トラブルシューティング
SDK を使用してアクセストークンを取得するときにエラーが発生した場合は、エラーのトラブルシューティングを行います。詳細については、「エラーコード一覧」をご参照ください。
最も一般的なエラーは、
Request was denied due to user flow control.です。このエラーは、トークンリクエストが送信される頻度が上限を超えているため、API リクエストが Alibaba Cloud API Gateway によって拒否されたことを示します。このエラーを回避するには、高頻度でアクセストークンを取得するためのリクエストを送信しないでください。アクセストークンを取得したら、アクセストークンの有効期間内であれば複数回使用できます。スレッド、プロセス、またはサーバーをまたいでアクセストークンを使用できます。
モバイルクライアントでアクセストークンを取得する
サーバーに Alibaba Cloud SDK for Java を統合してアクセストークンを取得することをお勧めします。
サーバーに Alibaba Cloud SDK for Java を統合します。次に、サーバーは HTTP GET リクエストを送信して */gettoken メソッドを呼び出し、アクセストークンを取得します。
クライアントは */gettoken メソッドを呼び出して、サーバーからアクセストークンと有効期間を取得します。
クライアントはアクセストークンを使用して音声対話サービスにアクセスします。クライアントは、音声対話サービスを呼び出す前に、アクセストークンを取得するためのリクエストを送信します。
クライアントはアクセストークンをローカルキャッシュに保存します。アクセストークンの有効期限が切れるまで、クライアントはキャッシュされたアクセストークンを使用して音声対話サービスに引き続きアクセスできます。キャッシュされたアクセストークンの有効期限が切れた場合、クライアントはサーバーから新しいアクセストークンを取得し、ローカルキャッシュを更新します。
SDK を使用してアクセストークンを取得する
Java のデモ
Maven サーバーから最新バージョンの Alibaba Cloud SDK for Java をダウンロードします。デモの ZIP ファイルをダウンロード。
<dependency>
<groupId>com.alibaba.nls</groupId>
<artifactId>nls-sdk-common</artifactId>
<version>2.1.6</version>
</dependency>AccessToken token = new AccessToken("your akID", "your akSecret"); // AccessKey ID と AccessKey Secret を設定します。
token.apply();
String accessToken = token.getToken();
long expireTime = token.getExpireTime();上記の Java コードをサーバーで実行します。Android ユーザーは、サーバーまたは PC クライアントでコードを実行して、アクセストークンを取得する必要があります。データセキュリティを確保するために、サーバーをセットアップし、クライアントを使用してサーバーからアクセストークンをリクエストすることをお勧めします。
C++ のデモ
Linux に次のツールをインストールします。
glibc 2.5 以降
Ccc4 または Ccc5
Windows に次のツールをインストールします。Visual Studio 2013 または Visual Studio 2015。
Windows でプロジェクトを作成します。
デモをコンパイルします。
デモが
path/toディレクトリに抽出されているとします。Linux ターミナルで次のコマンドを実行して、デモをコンパイルして実行します。オペレーティングシステムが CMake をサポートしている場合:
Linux ターミナルに CMake 2.4 以降がインストールされていることを確認します。
ディレクトリを切り替えます:
cd path/to/sdk/lib。ファイルを抽出します:
tar -zxvpf linux.tar.gz。ディレクトリを切り替えます:
cd path/to/sdk。コンパイルスクリプトを実行します:
./build.sh。ディレクトリを切り替えます:
cd path/to/sdk/demo。デモを実行します:
./tokenDemo <yourAccessKeySecret> <yourAccessKeyId>。
オペレーティングシステムが CMake をサポートしていない場合:
ディレクトリを切り替えます:
cd path/to/sdk/lib。ファイルを抽出します:
tar -zxvpf linux.tar.gz。ディレクトリを切り替えます:
cd path/to/sdk/demo。g++ コマンドを実行してデモをコンパイルします:
g++ -o tokenDemo tokenDemo.cpp -I path/to/sdk/include/ -L path/to/sdk/lib/linux -ljsoncpp -lssl -lcrypto -lcurl -luuid -lnlsCommonSdk -D_GLIBCXX_USE_CXX11_ABI=0。ライブラリパスを指定します:
export LD_LIBRARY_PATH=path/to/sdk/lib/linux/。デモを実行します:
./tokenDemo <yourAccessKeySecret> <yourAccessKeyId>。
アクセストークンを取得します。
次のサンプルコードは、アクセストークンを取得する方法の例を示しています。
#include <iostream> #include "Token.h" using std::cout; using std::endl; using namespace AlibabaNlsCommon; // アクセストークンの ID を取得します。 int getTokenId(const char* keySecret, const char* keyId) { NlsToken nlsTokenRequest; /* Alibaba Cloud アカウントの AccessKey Secret を設定します。*/ nlsTokenRequest.setKeySecret(keySecret); /* Alibaba Cloud アカウントの AccessKey ID を設定します。*/ nlsTokenRequest.setAccessKeyId(keyId); /* アクセストークンを取得します。0 が返された場合、リクエストは成功です。-1 が返された場合、リクエストは失敗しました。*/ if (-1 == nlsTokenRequest.applyNlsToken()) { cout << "Failed: " << nlsTokenRequest.getErrorMsg() << endl; /* 失敗の原因 */ return -1; } else { cout << "TokenId: " << nlsTokenRequest.getToken() << endl; /* アクセストークンの ID */ cout << "TokenId expireTime: " << nlsTokenRequest.getExpireTime() << endl; /* アクセストークンの有効期間を示すタイムスタンプ(秒単位)*/ return 0; } }
PHP のデモ
この例では、最新バージョンの Alibaba Cloud SDK for PHP を使用しています。詳細については、「Alibaba Cloud SDK for PHP」を参照してください。以前のバージョンの Alibaba Cloud SDK for PHP を引き続き使用できます。ただし、最新バージョンにアップデートすることをお勧めします。詳細については、「aliyun-openapi-php-sdk」を参照してください。
Alibaba Cloud SDK for PHP をインストールする前に、環境で PHP V5.5 以降のバージョンが使用されていることを確認してください。詳細については、「Alibaba Cloud SDK for PHP をインストールする」を参照してください。
手順:
グローバルクライアントを作成します。
API リクエストを作成し、パラメーターを設定します。
API リクエストを送信し、レスポンスまたは例外を処理します。
<?php
require __DIR__ . '/vendor/autoload.php';
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
/**
* ステップ 1:グローバルクライアントを作成します。
* RAM ユーザーの AccessKey ID と AccessKey Secret を使用して認証を完了します。
*/
AlibabaCloud::accessKeyClient(
"<your-access-key-id>", // AccessKey ID
"<your-access-key-secret>") // AccessKey Secret
->regionId("ap-southeast-1")
->asDefaultClient();
try {
$response = AlibabaCloud::nlsCloudMeta()
->v20180518()
->createToken()
->request();
print $response . "\n";
$token = $response["Token"];
if ($token != NULL) {
print "トークンを取得しました:\n";
print_r($token);
}
else {
print "トークンの取得に失敗しました\n";
}
} catch (ClientException $exception) {
// エラーメッセージを取得します。
print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
// エラーメッセージを取得します。
print_r($exception->getErrorMessage());
}CommonRequest メソッドを使用してアクセストークンを取得する
Alibaba Cloud SDK を使用してアクセストークンを取得する場合は、リモートプロシージャコール ( RPC ) スタイルで API 操作を呼び出すことをお勧めします。RPC スタイルで共通 API リクエストを開始するには、次のパラメーターを指定する必要があります。
パラメーター | 値 | 説明 |
domain | nlsmeta.ap-southeast-1.aliyuncs.com | 音声対話のエンドポイント。値は固定です。 |
region_id | ap-southeast-1 | リクエストされた音声対話サービスのリージョン ID 。値は固定です。 |
action | CreateToken | 呼び出す API 操作。値は固定です。 |
version | 2019-07-17 | API のバージョン番号。値は固定です。 |
Java のデモ
Java の依存関係を追加します。
Alibaba Cloud SDK for Java のコアライブラリ ( V3.7.1 ) と fastjson ライブラリを追加します。
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.7.1</version> </dependency> <!-- http://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>アクセストークンを取得します。
次のサンプルコードは、アクセストークンを取得する方法の例を示しています。
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.CommonRequest; import com.aliyuncs.CommonResponse; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.http.MethodType; import com.aliyuncs.http.ProtocolType; import com.aliyuncs.profile.DefaultProfile; import java.text.SimpleDateFormat; import java.util.Date; public class CreateTokenDemo { // リクエストされた音声対話サービスのリージョン ID 。 private static final String REGIONID = "ap-southeast-1"; // リクエストされた音声対話サービスのエンドポイント。 private static final String DOMAIN = "nlsmeta.ap-southeast-1.aliyuncs.com"; // API のバージョン番号。 private static final String API_VERSION = "2019-07-17"; // 呼び出す API 操作。 private static final String REQUEST_ACTION = "CreateToken"; // レスポンスパラメーター。 private static final String KEY_TOKEN = "Token"; private static final String KEY_ID = "Id"; private static final String KEY_EXPIRETIME = "ExpireTime"; public static void main(String args[]) throws ClientException { if (args.length < 2) { System.err.println("CreateTokenDemo need params: <AccessKey Id> <AccessKey Secret>"); System.exit(-1); } String accessKeyId = args[0]; String accessKeySecret = args[1]; // DefaultAcsClient インスタンスを作成し、インスタンスを初期化します。 DefaultProfile profile = DefaultProfile.getProfile( REGIONID, accessKeyId, accessKeySecret); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setDomain(DOMAIN); request.setVersion(API_VERSION); request.setAction(REQUEST_ACTION); request.setMethod(MethodType.POST); request.setProtocol(ProtocolType.HTTPS); CommonResponse response = client.getCommonResponse(request); System.out.println(response.getData()); if (response.getHttpStatus() == 200) { JSONObject result = JSON.parseObject(response.getData()); String token = result.getJSONObject(KEY_TOKEN).getString(KEY_ID); long expireTime = result.getJSONObject(KEY_TOKEN).getLongValue(KEY_EXPIRETIME); System.out.println("取得したトークン: " + token + "、有効期間を示すタイムスタンプ ( 単位:秒 ): " + expireTime); // 10 桁のタイムスタンプを UTC+8 の時刻に変換します。 String expireDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(expireTime * 1000)); System.out.println("アクセストークンの有効期間 ( UTC+8 ): " + expireDate); } else { System.out.println("トークンの取得に失敗しました。") // トークンの取得に失敗しました } } }
Python のデモ
pip を使用して SDK をインストールします。
次のコマンドを実行して、Alibaba Cloud SDK for Python V2.13.3 をインストールします。
pip install aliyun-python-sdk-core==2.13.3 # Alibaba Cloud SDK for Python のコアライブラリをインストールします。アクセストークンを取得します。
サンプルコード:
# -*- coding: utf8 -*- from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest # AcsClient インスタンスを作成します。 client = AcsClient( "<Your AccessKey ID>", // AccessKey ID "<Your AccessKey secret>", // AccessKey Secret "ap-southeast-1" ); # リクエストを作成し、リクエストパラメーターを設定します。 request = CommonRequest() request.set_method('POST') request.set_domain('nlsmeta.ap-southeast-1.aliyuncs.com') request.set_version('2019-07-17') request.set_action_name('CreateToken') response = client.do_action_with_exception(request) print(response)
GO のデモ
サンプルコード:
package main
import (
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)
func main() {
client, err := sdk.NewClientWithAccessKey("ap-southeast-1", "<yourAccessKey Id>", "<yourAccessKey Secret>") // AccessKey ID と AccessKey Secret を設定します
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Method = "POST"
request.Domain = "nlsmeta.ap-southeast-1.aliyuncs.com"
request.ApiName = "CreateToken"
request.Version = "2019-07-17"
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpStatus())
fmt.Print(response.GetHttpContentString())
}Node.js のデモ
Node.js 用 SDK をインストールします。
npm を使用して Node.js の依存モジュールをインストールすることをお勧めします。Node.js 用のすべての公式 Alibaba Cloud SDK は、@alicloud ディレクトリに保存されています。
たとえば、Node.js 用 SDK が
/path/to/aliyun-openapi-Node.js-sdkフォルダーにダウンロードされているとします。SDK コアライブラリに基づいてアプリケーションを開発する場合は、次のコマンドを実行して @alicloud/pop-core モジュールをインストールします。次のコマンドの
--saveオプションは、モジュールをアプリケーションの package.json ファイルに依存モジュールとして書き込みます。npm install @alicloud/pop-core --save説明GitHub から SDK をダウンロードすることもできます。詳細については、「GitHub から SDK をダウンロードする」を参照してください。
アクセストークンを取得します。
サンプルコード:
var RPCClient = require('@alicloud/pop-core').RPCClient; var client = new RPCClient({ accessKeyId: '<yourAccessKey Id>', // AccessKey ID accessKeySecret: '<yourAccessKey Secret>', // AccessKey Secret endpoint: 'http://nlsmeta.ap-southeast-1.aliyuncs.com', apiVersion: '2019-07-17' }); // => Promise を返します // => request(Action, params, options) client.request('CreateToken').then((result) => { console.log(result.Token); });
.NET のデモ
Alibaba Cloud SDK for .NET をインストールします。
アクセストークンを取得するために使用される .NET デモでは、Alibaba Cloud SDK for .NET の CommonRequest メソッドを使用して、RPC スタイルで pctowap open platform ( POP ) API リクエストを送信します。Alibaba Cloud SDK for .NET の詳細については、「SDK for .NET を使用する」をご参照ください。
Alibaba Cloud SDK for .NET の CommonRequest メソッドの使用方法の詳細については、「CommonRequest を使用して API 操作を呼び出す」をご参照ください。
Alibaba Cloud SDK for .NET のコアライブラリのみをインストールする必要があります。Alibaba Cloud SDK for .NET をインストールする場合は、ダイナミックリンクライブラリ ( DLL ) ファイルまたはプロジェクトへの参照を追加できます。詳細については、「SDK for .NET を使用する」をご参照ください。
アクセストークンを取得します。
サンプルコード:
using System; using Aliyun.Acs.Core; using Aliyun.Acs.Core.Exceptions; using Aliyun.Acs.Core.Profile; class Sample { static void Main(string[] args) { // リクエストを開始するためのクライアントインスタンスを作成します。 IClientProfile profile = DefaultProfile.GetProfile( "ap-southeast-1", "<yourAccessKey Id>", // AccessKey ID "<yourAccessKey Secret>"); // AccessKey Secret DefaultAcsClient client = new DefaultAcsClient(profile); try { // リクエストを作成します。 CommonRequest request = new CommonRequest(); request.Domain = "nlsmeta.ap-southeast-1.aliyuncs.com"; request.Version = "2019-07-17"; // この API リクエストは RPC スタイルです。Action パラメーターを、呼び出す RPC API 操作に設定します。 request.Action = "CreateToken"; // リクエストを開始し、レスポンスを取得します。 CommonResponse response = client.GetCommonResponse(request); System.Console.WriteLine(response.Data); } catch (ServerException ex) { System.Console.WriteLine(ex.ToString()); } catch (ClientException ex) { System.Console.WriteLine(ex.ToString()); } } }