カスタムスキルをウェブサービスとしてホスティングする
クラウド内のAlexaサービスからリクエストを受け付けて応答を返すウェブサービスを実装することにより、Alexa用のカスタムスキルを開発できます。
Alexaから送信されたリクエストを処理するには、ウェブサービスで特定の要件を満たす必要があり、またAlexa Skills Kitインターフェース規格に準拠する必要があります。詳細については、カスタムスキルをウェブサービスとしてホスティングするを参照してください。
ASK SDK Express Adapter
Alexa Skills Kit SDK(ASK SDK)for Nodeでは、リクエストとタイムスタンプの検証用のボイラープレートコードがask-sdk-express-adapterパッケージで提供されています。このパッケージでは、SkillRequestSignatureVerifierクラスおよびTimestampVerifierクラスをエクスポートすることにより、検証コンポーネントを提供します。また、このパッケージはExpressAdapterクラスを提供します。このクラスは、検証機能とスキル呼び出し機能をまとめて、Expressアプリケーションにリクエストハンドラーを容易に登録できるようにします。
インストール
NPMを使用してask-sdk-express-adapter
パッケージをスキルプロジェクトに追加できます(npm install --save ask-sdk-express-adapter
)。
Expressフレームワークを使ったウェブアプリケーション
ExpressAdapterクラスは、SkillBuilder
オブジェクトからスキルインスタンスを登録し、getRequestHandlers
メソッドを提供します。このメソッドは、Expressアプリケーションに登録できるリクエストハンドラーの配列を返します。
ExpressAdapter
インスタンスのブール値パラメーターverifySignature
およびverifyTimeStamp
を設定し、テスト目的として、リクエストまたはタイムスタンプの検証を有効または無効にできます。また、スキルを呼び出す前に入力リクエストに適用する必要がある、追加のカスタムベリファイア(verifier)も提供されます。
使い方
const express = require('express');
const { ExpressAdapter } = require('ask-sdk-express-adapter');
const app = express();
const skillBuilder = Alexa.SkillBuilders.custom();
const skill = skillBuilder.create();
const adapter = new ExpressAdapter(skill, true, true);
app.post('/', adapter.getRequestHandlers());
app.listen(3000);
import express from 'express';
import { ExpressAdapter } from 'ask-sdk-express-adapter';
const app = express();
const skillBuilder = Alexa.SkillBuilders.custom();
const skill = skillBuilder.create();
const adapter = new ExpressAdapter(skill, true, true);
app.post('/', adapter.getRequestHandlers());
app.listen(3000);
Expressフレームワークを使わないウェブアプリケーション
Expressフレームワークを使わない場合は、ウェブアプリケーションでの使用のためにSkillRequestSignatureVerifierおよびTimestampVerifierが提供されています。
使い方
const { SkillRequestSignatureVerifier, TimestampVerifier } = require('ask-sdk-express-adapter');
const skillBuilder = Alexa.SkillBuilders.custom();
const skill = skillBuilder.create();
// このコードスニペットは、リクエスト本文がテキストとヘッダーとして既に使用されていることを前提としています
try {
await new SkillRequestSignatureVerifier().verify(textBody, requestHeaders);
await new TimestampVerifier().verify(textBody);
} catch (err) {
// サーバーがエラーメッセージを返します
}
const response = skill.invoke(JSON.parse(textBody));
// サーバーがJSON形式で応答を送信します
import { SkillRequestSignatureVerifier, TimestampVerifier } from 'ask-sdk-express-adapter';
const skillBuilder = Alexa.SkillBuilders.custom();
const skill = skillBuilder.create();
// このコードスニペットは、リクエスト本文がテキストとヘッダーとして既に使用されていることを前提としています
try {
await new SkillRequestSignatureVerifier().verify(textBody, requestHeaders);
await new TimestampVerifier().verify(textBody);
} catch (err) {
// サーバーがエラーメッセージを返します
}
const response = skill.invoke(JSON.parse(textBody));
// サーバーがJSON形式で応答を送信します
最終更新日: 2020 年 03 月 18 日