WordPressの管理画面のメニューとか、ACF(AdvancedCustomFields)/CPTUI(CutomPostTypeUI)のメニューなどを非表示にする。


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 CLI(Alexa Skills Kitコマンドラインインターフェース)で、東京リージョンのLambdaにデプロイ(UPDATE)する

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

Alexaの音声合成マークアップ言語(SSML)でMP3が再生されなかった。ときのmp3形式変換方法

次のように

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を生成する。

Alexa スキル開発で外部Json定義からIntentHandlerを生成する。

やりたいこと、

  1. WordPressから発話を更新
  2. Lambda関数にJsonを自動デプロイ
  3. 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();

AlexaのSkill開発でのaddRequestHandlersに配列を渡す方法

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)が便利

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で観光ホテル向けのスキル開発

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をはよ、お願いいたします。