AlexaスキルとWebをつなぐ ― Quick Links & Skill Messaging 実装完全ガイド[GPT-5による下調べ]

Alexaスキルは、音声コマンドだけで操作するものと思われがちですが、実は Webや外部サービスと連携する仕組み も用意されています。
これを活用すると、単なる「声で操作するアシスタント」から一歩進んで、自分のシステムやサービスのイベントをトリガーにAlexaを呼び出す といった応用が可能になります。

たとえば次のようなユースケースが考えられます。

  • APIが公開されていないサービスと連携したい場合
    → Web画面のボタン一つでAlexaスキルを起動し、音声で続きの処理をしてもらう。
    → サービス間連携を作り込むほどではないが、Alexaを「外部システムへの声の窓口」として手軽に利用できる。
  • システムイベントをきっかけにAlexaを呼び出したい場合
    • IoT機器のセンサーイベント:温度が一定以上になったらスキルを起動し、音声でユーザーに通知
    • バックエンド業務システムのイベント:在庫が閾値を下回ったらAlexaに知らせ、担当者へ音声リマインド
    • カレンダーやワークフローのイベント:予定開始直前にスキルを自動起動し、関連情報を読み上げる
    • 家庭向けユースケース:玄関のスマートロックが開いたら自動でスキルを立ち上げ「おかえりなさい」と案内

こうした「音声以外でAlexaを呼び出す」仕組みを作ると、従来の音声コマンド起動では難しかった サービス間の橋渡しシステムイベントに基づく自動アクション が実現できます。

この記事では、そのために利用できる Quick Links for AlexaSkill Messaging API の実装方法を、エンジニア向けに解説します。


1. Alexaスキルの動作基盤

Alexaスキルは以下の流れで動きます。

  1. ユーザーが話しかける
  2. Alexaクラウドが発話を解析し、スキルにリクエストを送信
  3. スキルのエンドポイント(AWS Lambda / HTTPSサーバー)が処理
  4. 結果を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アプリから取得

  1. Alexaアプリで対象スキルを開く
  2. 「シェア」または「詳細」リンクをコピー
  3. 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からスキルを開くボタン」を試すのが一番の近道です。

コメント

タイトルとURLをコピーしました