WordPressの固定ページでテンプレートのプルダウンが表示されない場合。

いろいろ試すが出ない、よくよく見ると テーマの index.phpが無かった。
中身は無くても配置するだけで出てくれる。

トップページや一覧ページを専用にしていたので、気づかなかった。>< (front-page,archive.php etc)

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

WordPressのカスタム投稿タイプで簡単にページネーションを実装する

WordPressのカスタム投稿タイプで簡単にページネーションを実装する

いろいろ毎回忘れて調べてて小難しい方法しかググれないのでメモします。
「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'
));
?>

いじょうです。

Amazon Echo をPCでWifiセットアップする方法が楽

Amazon Echo をPCでWifiセットアップする方法が楽

モバイルあぷりよりはだいぶ楽です。

1.以下にアクセス
https://alexa.amazon.co.jp/spa/index.html
モバイルアプリのような画面(UI)になります。

2.サイドバーの[設定]を選んで該当のEchoをえらぶ。

3.画面の手順にしたがって設定完了

  • Alexaを設定モードに(アクションボタン●を長押し)
  • AlexaのWifi Amazon-xxxに接続
  • 接続するWifiを選択&パスワード入力
  • 完了

MAMPのローカル環境でメールを送信する(PostFixとGmailのSMTP利用)

MAMPのローカル環境でメールを送信する(PostFixとGmailのSMTP利用)

いつも忘れるのでメモ。

  • MAMPのPostfixの設定は使わない。


  • GmailのSMTPアプリパスワード取得

https://security.google.com/settings/security/apppasswords

  • MacにあるPostFixの設定
# 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などのスマートディスプレイがあればこのへんって解決できると思っていて。以下の流れができれば、いいと思う。

  • お客「焼き鳥」
  • Alexa「次のメニューがみつかったよっ」+料理一覧表示+エラー時はおすすめ+もしかしてキーワード
  • お客 (1タップで注文) >> 数秒バッファで注文確定 (キャンセル可能)

とすればかなりスムーズに行けそう。

あと便利だけでなくインタラクティブ要素も。

また、居酒屋というと宴会のゲームなどの分野でも画面付きだと、抽選や簡単な相性診断、占いetc、割引きコンテンツなど、かなりいろんなエンターテイメント方面のコンテンツも楽しそう。

ベタなところだけど、翻訳も。

2020年に向けて、それ以降東南アジアからの観光客の増加に備えて、メニューの翻訳版だけでなくチェーンてーんなどなら、リモート拠点での通話サポートなども行えそう。

ということで、今後もたのしみなスマートスピーカー界隈です。