いろいろ試すが出ない、よくよく見ると テーマの index.phpが無かった。
中身は無くても配置するだけで出てくれる。
トップページや一覧ページを専用にしていたので、気づかなかった。>< (front-page,archive.php etc)
いろいろ試すが出ない、よくよく見ると テーマの index.phpが無かった。
中身は無くても配置するだけで出てくれる。
トップページや一覧ページを専用にしていたので、気づかなかった。>< (front-page,archive.php etc)
次のように
return handlerInput.responseBuilder
.speak('ようこそ。なにか質問してくださいねっ。<audio src="https://example.com/bgm.mp3" />')
.getResponse();
“スキルがリクエストに正しく応答できませんでした”とのこと。
マニュアル読み進めると
など指定がある模様、でffmpegコマンドで変換
% ffmpeg -i bgm.mp3 -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 bgm-converted.mp3
参考URL : 音声合成マークアップ言語(SSML)のリファレンス
https://developer.amazon.com/ja/docs/custom-skills/speech-synthesis-markup-language-ssml-reference.html#amazon-effect
Alexa スキル開発で外部Json定義からIntentHandlerを生成する。
やりたいこと、
今回はの3の部分をメモ。
{
"CheckOutIntent": {
"speechText":"チェックアウトは11:00です。"
},
"WifiIntent": {
"speechText":"SSIDはn,a,m,u,r,a,です。パスワードは、g,u,e,s,tです。"
}
}
var isCanIntentName = function(handlerInput,name){
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === name;
};
var simpleResponce = function(handlerInput,speechText,repromptText){
if(typeof repromptText == 'undefined'){
return handlerInput.responseBuilder
.speak(speechText)
.getResponse();
}else{
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(repromptText)
.getResponse();
}
};
var makeSimpleHnaler = function(intentName,speechText,repromptText){
return {
canHandle(handlerInput) {
return isCanIntentName(handlerInput,intentName);
},
handle(handlerInput) {
return simpleResponce(handlerInput, speechText,repromptText);
}
};
};
//データ読み込み
var data = require('./data.json');
//builderにわたすインテントを入れる配列 : 優先の高いLaunchRequestHandler入れておく。
var intents = [
LaunchRequestHandler
];
//dataをループにしてintentsにpush()する。
_.each(data,(intent,key)=>{
let i = makeSimpleHnaler(key,intent.speechText);
intents.push(i);
});
//優先度の低いEnd,SessionEnded,Errorなどのハンドラー追加
intents = [...intents,EndHandler, SessionEndedRequestHandler, ErrorHandler];
//builderにわたす
exports.handler = Alexa.SkillBuilders.standard()
.addRequestHandlers(...intents)
.lambda();
addRequestHandlers()でなくaddRequestHandler()で代用とかいろいろ考えたのですが、スプレッド演算子で簡単でした。
exports.handler = Alexa.SkillBuilders.standard()
.addRequestHandlers(...[
LaunchRequestHandler,
CheckoutHandler,
WifiHandler,
EndHandler,
ErrorHandler,
SessionEndedRequestHandler])
.lambda();
参考 : スプレッド構文
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax
Amazon Echoのスキル開発で、Lambdaを使っているわけですが、awsコマンドでアップロードする際にzipに固めたり面倒だなと思っていたところですが、ASK CLI(Alexa Skill Kit Command Line Interface)をちゃんとみてみたら、Lambdaへのアップロードとかも出来て便利でした。(早く見ときゃ><!
ざっくりというと、functionのディレクトリで以下のコマンド一発ですみます。
$ ask lambda upload -f {ファンクション名}
npmでグローバルにインストール
$ npm install -g ask-cli
initコマンドを叩くとブラウザが開いて認証してOK(若干コマンドラインで確認などもあり)
$ ask init
取り急ぎメモがてら。
いろいろあって観光ホテル向けのスキルを作っています。
いろいろ使えそうなインテントや基本機能をまとめてみました。
CheckOut アレクサ、チェックアウトの時間を教えて
ConvenienceStore アレクサ、近くのコンビニを教えて
VendingMachine アレクサ、自動販売機の場所を教えて
Supermarket アレクサ、近くのスーパーを教えて
LiquorStore アレクサ、近くの酒屋を教えて
SouvenirShop アレクサ、近くのお土産品店教えて
Cofe アレクサ、近くのカフェ教えて
Delivery アレクサ、近くのデリバリーサービスを教えて
Laundry アレクサ、近くのコインランドリー教えて
Walking アレクサ、近くの散歩コースを教えて
Restaurant アレクサ、近くのレストランを教えて
Izakaya アレクサ、近くの居酒屋を教えて
Sea アレクサ、近くの海を教えて
Spot アレクサ、近くの観光スポットを教えて
機能
アレクサ、Youtubeを開いて
アレクサ、明日の天気を教えて
アレクサ、〇〇座の運勢は
アレクサ、ニュースを聴かせて
アレクサ、ライトつけて(消して)
アレクサ、ライト10%
アレクサ、朝6時に起こして
アレクサ、タイマー30分
でも利便性はもちつつ、スピーカーがフックになってなにか新しい体験を提供したいところです。
近隣の素敵な場所の映像チラ見せや、現地の方とコミュニケーションにつながるような情報とかetc
いろいろ考えるんだけど一番ネックになりそうなのは、利用規約などがAmazonアカウントに紐付いた個人での利用が前提なっている点。
Alexa for Business に期待していたけど、日本語の案内ページだけできて一向に対応する気配がない。
AmazonさんAlexa for Businessをはよ、お願いいたします。
いろいろ毎回忘れて調べてて小難しい方法しかググれないのでメモします。
「CPTUI」というプラグインを使います。多分10分くらいでできるはず。
0.CPTUI(Custom Post Type UI) プラグインをインストール/有効化
1.CPTUIプラグインで、カスタム投稿タイプ(ここでは result )を追加
2.CPTUIプラグインで、一覧ページを許可
スクロールしていった先に“アーカイブあり” という項目があるので、
2–1Treuにする
2–2スラッグに result と入力 (これがURLになります。(ここでは一覧ページのURLが https://hogehoge.com/result となります。)
3.テーマにテンプレートを追加。
ファイル名は “archive-result.php” ( resultの部分は、カスタム投稿タイプのスラッグに合わせます。)
<?php
if (have_posts()) :
while (have_posts()) : the_post();
?>
<h2><?php the_title(); ?></h2>
<?php
endwhile;
endif;
?>
<?php
echo paginate_links(array(
'next_text' => 'next',
'prev_text' => 'prev'
));
?>
いじょうです。
モバイルあぷりよりはだいぶ楽です。
1.以下にアクセス
https://alexa.amazon.co.jp/spa/index.html
モバイルアプリのような画面(UI)になります。
2.サイドバーの[設定]を選んで該当のEchoをえらぶ。
3.画面の手順にしたがって設定完了
いつも忘れるのでメモ。
https://security.google.com/settings/security/apppasswords
# vim /etc/postfix/sasl_passwd
//以下を記述
[smtp.gmail.com]:587 メールアドレス@gmail.com:アプリパスワード
# postmap /etc/postfix/sasl_passwd
//sasl_passwd.dbができます、元のsasl_passwdは不要/平文なので削除またはどこか安全な場所へ
# vim /etc/postfix/main.cf
//以下を最後の方へ追記
#Original Setting [Gmail]
myorigin = gmail.com
myhostname = smtp.gmail.com
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
inet_protocols = all
smtp_use_tls = yes
smtp_tls_security_level=encrypt
tls_random_source=dev:/dev/urandom
# postfix check
//確認エラーなければリフレッシュ
# postfix reload
//または停止中なら起動
# postfix start
//メールが送れない場合はログを確認
# log stream --predicate '(process == "smtpd") || (process == "smtp")' --info
※Gmailの認証がなぜかFaildすることがある。
→ モバイルネットワーク(mineoのテザリング)からだとFaildしてハマった。><..
いろいろスマートスピーカー/ディスプレイでのコンテンツを考える人です。
があると考えていて、タブレット式にしてある程度人件費を抑えられてはいると思うけどあれって、絶対的に探しにくいと思う。 いつも目当てのメニューを探すまでに行ったり来たりしている感じ(常連だといいのかもだけど。)
そろそろ出るところなんですが、画面付きのAlexaなどのスマートディスプレイがあればこのへんって解決できると思っていて。以下の流れができれば、いいと思う。
とすればかなりスムーズに行けそう。
また、居酒屋というと宴会のゲームなどの分野でも画面付きだと、抽選や簡単な相性診断、占いetc、割引きコンテンツなど、かなりいろんなエンターテイメント方面のコンテンツも楽しそう。
2020年に向けて、それ以降東南アジアからの観光客の増加に備えて、メニューの翻訳版だけでなくチェーンてーんなどなら、リモート拠点での通話サポートなども行えそう。
ということで、今後もたのしみなスマートスピーカー界隈です。
Powered by WordPress & Theme by Anders Norén