FC2ブログ


アマゾンのアレクサがやってきた(完成?)

Category: 未分類  

何とか、動作するところまで来ました。
しかし、問題が2つあります。
1つ目の問題は、スキルのキーワードに普通の言葉や交通機関名を使うと、
自作のスキル関数に繋がらない事です。使うと、「そのスキルは、まだ
サポートしていません」とか言って終わります。
仕方ないので、前回のURLで参考にした「ゴミの日」を使っています。
使い方は、以下の感じになります。

私   :アレクサ、「ゴミの日」を開いて、新宿
アレクサ:新宿行きの平日ダイヤは、10時16分、10時30分、10時39分、です。
     新宿行きの平日ダイヤは、10時16分、10時30分、10時39分、です。
(注:聞き逃すので2回繰り返している)

まあ、「ゴミの日」をユニークな固有名詞にすれば良いように思います。

2つ目の問題は、このスキルを公開できない事です。(本質的な問題)
現在は、テスト者に自分だけを登録していますが、90日の期限が有ります。
テスト期間を更新すれば良いような気がしますが、どうなんだろう?
このあたりが、まだ未完成な感じがしますね。

とりあえず、以下に基本的な情報を書き留めておきます。
まずは、Amazon 開発者コンソールのスキル側の設定です。
<2018/02/10 16:00:コピーミス等があったので修正>
インテントスキーマ
{
  "intents": [
    {
      "slots": [
        {
          "name": "Destination",
          "type": "LIST_OF_DEST"
        }
      ],
      "intent": "GetNewFactIntent"
    }
  ]
}

カスタムスロットタイプ
タイプ:
LIST_OF_DEST

値:
新宿
しんじゅく
小田原
おだわら

サンプル発話
GetNewFactIntent {Destination} ゴミの日
GetNewFactIntent {Destination} ごみの日

続いて、AWSのLambda側のスキル関数(Python3.6)です。
これだけの規模のスキルはWebに無かったのですが、特に問題なく動作しました。
<2018/01/27 9:00:休日ダイヤの処理にケアレスミスが有ったので修正>
<2018/01/28 21:00:同様処理を共通化してコードを縮小>
<2018/01/31 9:30:再度、同様処理を共通化してコードを縮小>
import datetime

list_holiday = [101,108,211,212,321,429,430,503,504,505,
                716,811,917,923,924,1008,1103,1123,1223,1224]

list_sinjuku_h = [528,
                  601,612,621,630,641,650,659,
                  710,720,730,739,759,
                  806,819,831,840,848,859,
                                   省略
                  1910,1922,1931,1949,1956,
                  2017,2029,2040,
                  2101,2110,2118,2131,2140,
                  2207,2227]

list_sinjuku_w = [524,538,548,558,
                  612,620,633,641,648,659,
                  707,713,720,727,734,749,754,
                  808,816,825,836,844,852,
                                    省略
                  1905,1914,1938,1948,
                  2008,2016,2036,2048,2059,
                  2118,2133,2143,
                  2208,2221,2236,
                  2320]

list_odawara_h = [603,620,644,657,
                  713,731,743,755,
                  808,818,830,837,845,854,
                                   省略
                  2113,2120,2133,2141,2148,2159,
                  2211,2220,2232,2246,2256,
                  2307,2327,2348,
                  2418,2447]

list_odawara_w = [539,
                  604,616,641,656,
                  712,728,742,753,
                  802,814,824,833,844,856,
                                   省略
                  2109,2121,2134,2150,
                  2207,2222,2236,2249,
                  2308,2331,2349,
                  2429,2448]

def henkan(time):
    time_str = "0000" + str(time)
    time_str = time_str[-4:]
    answer = "、" + time_str[0:2] + "時" + time_str[2:4] + "分"
    return answer

def search(jikan, list):
    flag = False
    for x in range(0, len(list)):
        densha = list[x]
        if densha > jikan :
            flag = True
            break
       
    if x <= (len(list)-1):
        answer = henkan(list[x])
    if x <= (len(list)-2):
        answer = answer + henkan(list[x+1])
    if x <= (len(list)-3):
        answer = answer + henkan(list[x+2])
    if flag:
        answer = answer + "です。"
    else:
        answer = "、でんしゃがありません。"
    return answer

def lambda_handler(event, context):
    intent = event['request']['intent']
    value = intent['slots']['Destination']['value']

    gmtTime = datetime.datetime.today()
    dt0 = gmtTime + datetime.timedelta(hours=9)
    date = dt0.month * 100 + dt0.day
    if (date in list_holiday) or (dt0.weekday() > 4):
        holiday = True
    else:
        holiday = False

    dt1 = gmtTime + datetime.timedelta(hours=9) + datetime.timedelta(minutes=14)
    jikan = dt1.hour * 100 + dt1.minute

    if (value == '新宿') or (value == 'しんじゅく'):
        if holiday:
            result = "新宿行きの休日ダイヤは" + search(jikan, list_sinjuku_h)
        else:
            result = "新宿行きの平日ダイヤは" + search(jikan, list_sinjuku_w)
        result = result + result
    elif (value == '小田原') or (value == 'おだわら'):
        if holiday:
            result = "小田原行きの休日ダイヤは" + search(jikan, list_odawara_h)
        else:
            result = "小田原行きの平日ダイヤは" + search(jikan, list_odawara_w)
        result = result + result
    else:
        result = "行き先を指定してください。"

    response = {
        'version': '1.0',
        'response': {
            'outputSpeech': {
                'type': 'PlainText',
                'text': result
            }
        }
    }
    return response

スポンサーサイト

 2018_01_26

Comments


 管理者にだけ表示を許可する


07  « 2018_08 »  09

SUN MON TUE WED THU FRI SAT
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

アクセスカウンタ

プロフィール

WG管理人

Author:WG管理人
鉱物結晶研究家

検索フォーム

ブロとも申請フォーム

QRコード

QR




pagetop