「アレクサ、きょうの幕府を開いて！」

<img width="287" alt="img.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/121307/a784e98f-3261-9fcd-0ef3-1fe6b471dd0d.jpeg">

[引き続き](https://qiita.com/n_ueh/items/4c74b6ac311e5cac96ae) 、Alexaスキルをリリースしました！

- スキルコンセプトのこと
- スキルの外部API連携
- スキルリリース後の改修と、ユーザー評価への対応方法

について、書いていきます。

# スキルコンセプトのこと

「アレクサ、（スキル名）を　**開いて（ひらいて）**」
というのは、アレクサのスキル（アプリ）を起動するひとつの定型句です[^1]。

以前から、
　「**”開ける” ものって、色々あるよね…**」
（第三の眼、とか）と感じるなかで、私が、ぜひ開きたいと思ったのは　**”幕府”**　[^2]でした。

<img width="300" alt="hokan.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/121307/b1c8a06c-7cbe-086d-cac6-eae8b67eb4b1.jpeg">


（これは幕府を閉じる相談をしているところ）

幕府を開くことについて、友達から「スキル起動コマンドの ”出落ち” で終わってはつまらないよね」というコメントをもらいました。

持ち帰って、家族で評議したところ、

　「幕府が　**ひらけるか / ひらけないか** 」　のドキドキ感

を、スキルのコンセプトコアにする案に、到達しました。

そして、**"開けるか/開けないか" の根拠を、”幕府を開きたい場所の天候変化”**　に求めることにして、天気の外部APIとスキルを連携させる実装に決めました。

>
（参考）[BS朝日] 歴天　[日本の歴史を変えた天気～長篠の戦い・関ヶ原の戦い～](http://www.bs-asahi.co.jp/rekiten/lineup/prg_003/) など


最終的な、スキルの説明文は、以下のようにまとめました。

>
**今日は、幕府が開けるでしょうか？**
これは、天気予報をベースに、幕府が開けるかどうかの結果をお知らせし、幕府を開くにあたってのワンポイントアドバイスをするスキルです。
　
古来、有能な武将は、天気の変わり目を把握し、いくさの勝敗を決し、ひいては幕府を開いていきました。
**今日と明日の天気予報が変化するときに「幕府が開ける」と判定し、判定結果をお伝えするスキルです。**
　
（たとえば、ずっと雨が続いていて、いつ晴れるのかを知りたい季節など、便利な場合があるかもしれません）


# スキルの外部API連携

<img width="91" alt="icon.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/121307/58b0340b-022d-b19c-8161-49c45cbce546.jpeg">
（”今日の幕府”スキルのアイコン（晴れマークと雨マークをふくむものを作りました））

天気予報の公開APIは各種あるので迷ったのですが、決め手は、Alexa公式の推奨でした。

Alexa自体、スキルを通さないネイティブでの機能として、天気予報応答機能をもっています（情報ソースは不明）。
それが応答する天気予報と、この幕府スキルが応答する予報結果が、あまりにも乖離するのはいけない、と思ったので、公式推奨を重視しました（が、実装して試していくと、ズレはあります）。

公式Sampleリポジトリから、Weatherを利用しているコードをさがしました。

ありました。

[[github] alexa/skill-sample-nodejs-city-guide >  skill-sample-nodejs-city-guide/lambda/custom/index_aiws.js](https://github.com/alexa/skill-sample-nodejs-city-guide/blob/8f44e64bff869d63f523168f525a69f4b91e31fe/lambda/custom/index_aiws.js)

これを参考に [Yahoo Weather API](https://developer.yahoo.com/weather/documentation.html?guccounter=1) へユーザーが指定する都道府県の県庁所在地のwoeidの天気を問合せています。
「きょうの幕府」での、Condition Codes と天気割り付けのコアのところは、こんな感じです。

```js:index.js
let condMap = {
    雨: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 35, 37, 38, 39, 40, 45, 47],
    雪: [13, 14, 15, 16, 17, 18, 41, 42, 43, 46],
    曇: [19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 44],
    晴: [31, 32, 33, 34],
    その他: [25, 36, 3200]
};
```




# スキルリリース後の改修と、ユーザー評価への対応方法

2018年春以降、Alexaの[「スキルストア」日本版](https://www.amazon.co.jp/b?ie=UTF8&node=4788676051) が公開されています。

ストアでは、ユーザーが各公開スキルを一覧で探すことができるほか、スキルへの評価をつけることができます。

”今日の幕府”スキルもAlexaチームの審査を通り、公式公開後、貴重なユーザー評価をいただくことができました。が、

せっかく遊んで頂いたのに、一部で不具合が発生していました（投稿いただいたレビューで判明）。
これらへの対応を、以下のように行いました。

| #       |評価コメント       |現象原因|対応：対話モデル修正|対応：エンドポイント修正|
|:-----------------:|:------------------|:------------------|:------------------:|:------------------:|
| 1             | 「はい」が何度試しても認識しない|（対話モデル）Amazon標準ビルトインの [Yesインテント](https://developer.amazon.com/ja/docs/custom-skills/standard-built-in-intents.html) を利用している場合、単純には発生しない現象。（エンドポイント）原因は、開発時の想定外フローを辿ったときに発生するロジック不具合でした（Alexaチームからの指摘で判明）|○（Alexaチームアドバイスに従い念のためYesインテントにサンプル発話追加）|○|
| 2           |都道府県を答えた後の「はい・いいえ」が邪魔| （エンドポイント）正常系の処理フローが１ターン冗長|ー|○|

公開済みスキルの対話モデルを修正する場合は、Alexaチームによる再審査が必要（修正即時反映とはいかない）ですが、エンドポイントの修正と公開については開発サイドの裁量範囲です。

Alexaチームには、こちらの [フォーム](https://developer.amazon.com/ja/support/contact-us) から個別連絡をとりました。
なお、ほかに訊いたこと（Q）と、公式からの回答（A）は下記です（2018年5月時点）。

Q：スキルストアのユーザーコメントへの返答方法　→　A:ユーザーへの返信は「コメント」から行う
<img width="217" alt="com.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/121307/bbd70159-483c-c669-f95d-0876250e8a8b.jpeg">

Q：スキルのバージョンアップで評価がクリアされてしまうかどうか　→　A:スキルを再申請しても既存のレビューはそのまま

# おわりに

現在、このスキルを通じて幕府が開かれた地方（都道府県を集計）の傾向は、以下のとおりです。

<img width="312" alt="chiho.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/121307/54959a35-5c63-c191-397c-c24043691ba7.jpeg">


（江戸優勢…！）

Alexaをお持ちの方、ぜひ、お住まいの、またはごひいきの都道府県に、幕府を開いてみてはいただけないでしょうか。
そして、公式ストアへ評価をお寄せいただけたら、とてもうれしいです…！

[Alexaスキル]　ノベルティ・ユーモア > 今日の幕府
~~https://www.amazon.co.jp/dp/B07CVZ94Z7~~

2019年10月追記：
本記事公開後、YahooWeathrAPI の規約変更があり、対応をしていないため、スキルの公開は取り下げています。
公開していた時点の当スキルについて、動画付きでレビューしてくださっているサイトを以下に挙げておきます。

　[smarthacksDataBank]　今日の幕府
　https://smarthacks.jp/db/12118/　
　

---

[^1]: [Alexa Skills Kit] ["開いて"以外の開始/呼び出しフレーズ（"スタートして"など）](https://developer.amazon.com/ja/docs/custom-skills/understanding-how-users-invoke-custom-skills.html)
[^2]: [Alexa Skills Kit] [スキル名（呼び出し名）の要件（1語ではダメ、など）](https://developer.amazon.com/ja/docs/custom-skills/choose-the-invocation-name-for-a-custom-skill.html#cert-invocation-name-req)