function remove_menus () {
// if( current_user_can( 'editor' ) ){
global $menu;
unset($menu[2]); // ダッシュボード
unset($menu[4]); // メニューの線1
unset($menu[5]); // 投稿
unset($menu[10]); // メディア
unset($menu[15]); // リンク
unset($menu[20]); // ページ
unset($menu[25]); // コメント
unset($menu[59]); // メニューの線2
unset($menu[60]); // テーマ
unset($menu[65]); // プラグイン
unset($menu[70]); // プロフィール
unset($menu[75]); // ツール
unset($menu[80]); // 設定
unset($menu[90]); // メニューの線3
remove_menu_page('edit.php?post_type=acf-field-group');
remove_menu_page('cptui_main_menu');
// }
}
add_action('admin_menu', 'remove_menus');
askコマンドでリージョン指定ができないなーと。‘~/.aws/config’ とかに設定しても見てない様子だったので、ソース追いかけたらシェルの環境変数を見ているみたい。
ask-cli/lib/utils/init-aws.js の87行目あたりの ‘getCLICompatibleDefaultRegion’ 関数で、region取得している。
let region = process.env.AWS_REGION || process.env.AMAZON_REGION || process.env.AWS_DEFAULT_REGION || process.env.AMAZON_DEFAULT_REGION;
~/.bashrc当りに追記してあげればOKでした。
export AWS_REGION=ap-northeast-1
して反映と確認。
$ source ~/.bashrc
$ echo $AWS_REGION
ap-northeast-1
参考URL :
Alexa Skills Kitコマンドラインインターフェース(ASK CLI)リファレンス
https://developer.amazon.com/ja/docs/smapi/ask-cli-command-reference.html
<?php
is_admin() && add_action( 'pre_get_posts', 'extranet_orderby' );
function extranet_orderby( $query )
{
// Nothing to do:
if( ! $query->is_main_query() || 'people' != $query->get( 'post_type' ) )
return;
$orderby = $query->get( 'orderby');
$query->set( 'orderby', 'data' );
$query->set( 'order', 'ASC' );
}
$query1 = new WP_Query([
'post_type' => 'people',
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'ASC',
]);
if ($query1->have_posts()):
while ($query1->have_posts()) :
$query1->the_post();
?>
<h2><?php the_title(); ?></h2>
<?php
endwhile;
endif;
?>
いろいろ試すが出ない、よくよく見ると テーマの 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を生成する。
やりたいこと、
- WordPressから発話を更新
- Lambda関数にJsonを自動デプロイ
- Lambda関数ではJsonデータを読み込みそれからIntenteHandlerを生成
今回はの3の部分をメモ。
データのJson
{
"CheckOutIntent": {
"speechText":"チェックアウトは11:00です。"
},
"WifiIntent": {
"speechText":"SSIDはn,a,m,u,r,a,です。パスワードは、g,u,e,s,tです。"
}
}
汎用的にIntenteHandlerを生成する関数類を準備
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
Alexa開発 ASK CLI(Alexa Skill Kit Command Line Interface)が便利
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
取り急ぎメモがてら。
Alexaで観光ホテル向けのスキル開発
いろいろあって観光ホテル向けのスキルを作っています。
いろいろ使えそうなインテントや基本機能をまとめてみました。
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をはよ、お願いいたします。