2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Alexaにスプレッドシートで作ったオリジナル単語帳を読んでもらう

Last updated at Posted at 2023-01-22

はじめに

Alexaを使って簡単に聞き流すタイプの単語帳を作れないかと思ったので作りました。
スキルの公開はしたくなかったので、自分専用です。

ざっくり構成

素材類.png
開発環境を作るのがめんどくさいので今回はAmazon Alexa developer consoleを利用してスキルの開発をします。

Google SpreadSheetを使って単語帳をつくってAPIで返すようにする

外部から叩いて、SpreadSheetの内容を返すようにします

データを作る

  • シートに単語を記入していきます。
    • シート名はシート1になってます
      単語帳 - Google スプレッドシート - Google Chrome 2023_01_22 16_39_17.png

スクリプトを作成する

  • 拡張機能 > Apps Scriptからスクリプトを選択する
    単語帳 - Google スプレッドシート - Google Chrome 2023_01_22 16_42_45.jpg

スクリプトの記載

  • スクリプトの入力画面が出たらコード.gsに以下を記載
function doPost(e) {
   // スプレッドシート&シートオブジェクトを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('シート1');
  
  var sheetData = sheet.getRange('B3:C' + sheet.getLastRow()).getValues();

   // データの成形
  var responseList = [];
  sheetData.map(function(d) {
    responseList.push({ word: d[0], read: d[1] });
  });

  // レスポンス
  var response = {
    data: responseList,
    meta: { status: 'success' }
  };
  return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON);
}

スクリプトをAPI化する

めんどくさいので認証なしのAPIにします


  • デプロイ>新しデプロイ
    「Alexaにスプレッドシートで作ったオリジナル単語帳を読んでもらう」を編集 - Qiita - Google Chrome 2023_01_22 16_50_31.jpg

  • ウェブアプリを選択

「Alexaにスプレッドシートで作ったオリジナル単語帳を読んでもらう」を編集 - Qiita - Google Chrome 2023_01_22 16_50_50.jpg


  • 説明は空でもいいです。わかりやすいように名前つけてもいいです
  • 実行ユーザーは自分だけ実行できるようにします
  • アクセスできるユーザーは全員
  • デプロイを押下してデプロイ
    「Alexaにスプレッドシートで作ったオリジナル単語帳を読んでもらう」を編集 - Qiita - Google Chrome 2023_01_22 16_51_14.jpg

  • ウェブアプリのURLをコピーします
    無題のプロジェクト - プロジェクト編集者 - Apps Script - Google Chrome 2023_01_22 16_57_24.jpg

リクエストを受けつかるか確認する

curl -L -d "hello" 上記でコピーしたURL

ちゃんとレスポンスが返ってきたらOK
MINGW64__c_Users_ssaku 2023_01_22 17_12_20.png

Alexaで応答してもらうようにする

Amazon Alexa developer consoleにログインします

初期構築

* スキルタブ > スキルの作成

Amazon Alexa Console - Amazon Alexa Official Site - Google Chrome 2023_01_22 17_20_23.jpg


  • スキルに名前を付けて、言語を選択
    Amazon Alexa Console - Amazon Alexa Official Site - Google Chrome 2023_01_22 17_20_47.jpg

  • エクスペリエンスのタイプとモデルを選択
    Amazon Alexa Console - Amazon Alexa Official Site - Google Chrome 2023_01_22 17_21_13.png

  • ホスティングサービスを選択。

    • 今回はPythonを選択。ホスト地域は好きなように
      「Alexaにスプレッドシートで作ったオリジナル単語帳を読んでもらう」を編集 - Qiita - Google Chrome 2023_01_22 17_44_56.png

  • スキルを選択
    Amazon Alexa Console - Amazon Alexa Official Site - Google Chrome 2023_01_22 17_21_39.png

  • Create skillを押下。1分くらいかかるので待つ
    Amazon Alexa Console - Amazon Alexa Official Site - Google Chrome 2023_01_22 17_21_59.png

コードをかく

  • コードエディタタブ > Skill Code > lambda > lambda_function.py`
  • ClassLaunchRequestHandler,def handleにコードを書いていく

        url = "上記でSpreadシートをAPI化したときのリクエストURL"
        pyaload = {"key1":"value1", "key2":"value2"}
        r = requests.post(url)
        text = ""
        for item in r.json()["data"]:
            text += item["word"]+","+item["read"]+"."

        return (
            handler_input.response_builder
                .speak(text)
               #.ask(text)  //ユーザーに再質問して会話をつづける
                .response
        )

Amazon Alexa Console - Amazon Alexa Official Site - Google Chrome 2023_01_22 17_37_07.png

  • response_builder.speak(text)
    • speak()に渡した値をアレクサが応答する
  • response_builder.ask(text)
    • ask()に渡した値をアレクサが応答し、回答を待つ

クラスの役割

インテントハンドラ 意味
LaunchRequestHandler スキルを起動するハンドラー。呼び出されたときに一番最初に実行される
HelloWorldIntentHandler ユーザーがしたいアクションを実行。LaunchRequestHandlerで対話が継続される場合に実行

指定のパッケージをインストール

requestsパッケージがないので、インストールする

  • コードエディタタブ > Skill Code > lambda > requirements.txt`
    • requests==2.28.2

Amazon Alexa Console - Amazon Alexa Official Site - Google Chrome 2023_01_22 17_39_49.png

デプロイ

  • コードエディタタブ上部にあるデプロイを押下してデプロイする

テスト

  • テストタブを開く

  • スキルテストが有効になっているステージ:を開発中にする

  • Alexa趣味レーターで作ったスキルを呼び出す
    「Alexaにスプレッドシートで作ったオリジナル単語帳を読んでもらう」を編集 - Qiita - Google Chrome 2023_01_22 18_17_53.jpg

  • Spreadsheetの内容が返ってきたらOK
    「Alexaにスプレッドシートで作ったオリジナル単語帳を読んでもらう」を編集 - Qiita - Google Chrome 2023_01_22 18_20_19.png

  • テストを実行してOKだったら実際のアレクサも反応してくれるようになる

参考

Alexaから送信されたリクエストを処理する

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?