Alexaスキルは、音声コマンドだけで操作するものと思われがちですが、実は Webや外部サービスと連携する仕組み も用意されています。
これを活用すると、単なる「声で操作するアシスタント」から一歩進んで、自分のシステムやサービスのイベントをトリガーにAlexaを呼び出す といった応用が可能になります。
たとえば次のようなユースケースが考えられます。
- APIが公開されていないサービスと連携したい場合
→ Web画面のボタン一つでAlexaスキルを起動し、音声で続きの処理をしてもらう。
→ サービス間連携を作り込むほどではないが、Alexaを「外部システムへの声の窓口」として手軽に利用できる。 - システムイベントをきっかけにAlexaを呼び出したい場合
- IoT機器のセンサーイベント:温度が一定以上になったらスキルを起動し、音声でユーザーに通知
- バックエンド業務システムのイベント:在庫が閾値を下回ったらAlexaに知らせ、担当者へ音声リマインド
- カレンダーやワークフローのイベント:予定開始直前にスキルを自動起動し、関連情報を読み上げる
- 家庭向けユースケース:玄関のスマートロックが開いたら自動でスキルを立ち上げ「おかえりなさい」と案内
こうした「音声以外でAlexaを呼び出す」仕組みを作ると、従来の音声コマンド起動では難しかった サービス間の橋渡し や システムイベントに基づく自動アクション が実現できます。
この記事では、そのために利用できる Quick Links for Alexa と Skill Messaging API の実装方法を、エンジニア向けに解説します。
1. Alexaスキルの動作基盤
Alexaスキルは以下の流れで動きます。
- ユーザーが話しかける
- Alexaクラウドが発話を解析し、スキルにリクエストを送信
- スキルのエンドポイント(AWS Lambda / HTTPSサーバー)が処理
- 結果をAlexaクラウド経由でデバイスに返却
開発者は Lambda関数 または HTTPSエンドポイント を用意して、Alexaに登録します。
Lambdaを選ぶのが一番簡単です。
2. Skill IDの取得方法
Quick Linksを作るには、対象スキルの Skill ID が必要です。
2.1 AlexaスキルストアのURLから取得
公開済みスキルの詳細ページには、Skill IDが埋め込まれています。
例:
https://alexa.amazon.co.jp/spa/index.html#skills/amzn1.ask.skill.12345678-abcd-efgh-ijkl-1234567890ab
この amzn1.ask.skill.12345678-abcd-efgh-ijkl-1234567890ab が Skill ID です。
2.2 Alexaアプリから取得
- Alexaアプリで対象スキルを開く
- 「シェア」または「詳細」リンクをコピー
- URL内に Skill ID が含まれています
2.3 開発者コンソール(自分のスキルの場合)
Alexa Developer Console → 対象スキル → Skill ID が明記されています。
3. Quick Links for Alexa
公式ドキュメント:https://developer.amazon.com/ja-JP/docs/alexa/custom-skills/create-a-quick-link-for-your-skill.html
3.1 基本形(スキルを起動する)
https://alexa-skills.amazon.co.jp/apis/custom/skills/<skill-id>/launch
例(日本マーケット):
<a href="https://alexa-skills.amazon.co.jp/apis/custom/skills/amzn1.ask.skill.12345678-abcd-efgh-ijkl-1234567890ab/launch">
Alexaでスキルを起動
</a>
3.2 ディープリンク(タスク呼び出し)
スキル内の特定処理(Custom Task)を直接呼び出せます。
https://alexa-skills.amazon.co.jp/apis/custom/skills/<skill-id>/tasks/<task-name>/versions/1?orderId=12345&campaign=web
<task-name>: スキルで定義したタスク名- クエリで
orderId=12345のように値を渡せる a2z_refを付けるとクリック元の解析も可能
4. スキル側の処理例(Node.js ASK SDK)
4.1 Launchリクエスト(通常起動)
const LaunchRequestHandler = {
canHandle(h) {
return h.requestEnvelope.request.type === 'LaunchRequest';
},
handle(h) {
return h.responseBuilder
.speak('スキルが起動しました')
.reprompt('何をしますか?')
.getResponse();
}
};
4.2 Taskリクエスト(ディープリンク)
const OrderTaskHandler = {
canHandle(h) {
const req = h.requestEnvelope.request;
return req.type === 'LaunchRequest' && req.task?.name === 'MyCustomTask';
},
handle(h) {
const orderId = h.requestEnvelope.request.task.input.orderId;
return h.responseBuilder
.speak(`注文ID ${orderId} を受け付けました`)
.addDirective({
type: 'Tasks.CompleteTask',
status: { code: 200, message: 'OK' }
})
.withShouldEndSession(true)
.getResponse();
}
};
5. Skill Messaging API(サーバー→スキル)
Quick Linksは「ユーザー操作による起動」ですが、サーバーイベントをスキルに送る場合は Skill Messaging API を使います。
5.1 リクエスト例
POST /v1/skillmessages/users/{userId} HTTP/1.1
Host: api.amazonalexa.com
Authorization: Bearer <access-token>
Content-Type: application/json
Body:
{
"data": {
"action": "syncOrder",
"orderId": "12345"
},
"expiresAfterSeconds": 60
}
5.2 注意点
userIdはスキル有効化時に取得可能- デバイスで即時発話はできず、スキルを開いたときに反映
- APIはCORS無効 → 必ずサーバーから呼ぶ
6. シナリオ別まとめ
| 目的 | 手法 | メリット |
|---|---|---|
| Webボタンでスキルを開く | Quick Links (launch) | 実装が最も簡単 |
| 特定処理を呼びたい/ID渡したい | Quick Links (task) | パラメータ渡し可能 |
| サーバーイベントをAlexaに送信 | Skill Messaging API | バックエンドと連携可能 |
まとめ
- Alexaスキルは Lambda/HTTPSエンドポイントで動くWebアプリ
- Skill ID を取得すれば、Webからスキルを呼べる
- Quick Links は「ユーザー操作による起動」に最適
- Skill Messaging API は「サーバーイベントを非同期でスキルへ送る」用途に最適
WebとAlexaを組み合わせると、ユーザー体験は大きく広がります。
まずは Quick Links で「Webからスキルを開くボタン」を試すのが一番の近道です。


コメント