Alexa: 発話でなくConnections.Responseで起動するHandler

飛ばす方(Buy)

return handlerInput.responseBuilder
.addDirective({
type: 'Connections.SendRequest',
name: 'Buy',
payload: {InSkillProduct: {productId: HELLO_PACK_ID}},
token: 'correlationToken'
})

受ける方

const BuyResponseHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'Connections.Response' &&
(handlerInput.requestEnvelope.request.name === 'Buy' ||
handlerInput.requestEnvelope.request.name === 'Upsell');

},

出典:シンプルハローワールド

alexaisp

Alexaスキル内課金サンプルを使って既存のスキルを課金付きスキルにする方法

Alexaスキル内課金サンプルを使って、既存のスキルを課金付きスキルにする方法について考えてみた。

スキル内課金のサンプルには、シンプルハローワールドを利用する。

シンプルハローワールドのハンドラ利用
  • WhatCanIBuyIntentHandler(何が買えるという発話を受ける、発話でBuyEnglishPackIntentHandlerにつなげる)
  • BuyEnglishPackIntentHandler(直接の購入希望・説明希望の発話を受ける(buy))
  • SayEnglishHelloIntentHandler(関連する発話を受ける(upsell))
  • BuyResponseHandler(BuyEnglishPackIntentHandler, SayEnglishHelloIntentHandlerから自動接続される、説明+購入確認する)

以上のハンドラは台詞を変更するだけで、改変することなく利用する。

  • SayHelloHandlerについてはパーツを既存スキルのMainHandlerに組み込む必要がある
MainHandlerにSayHelloHandlerの課金の仕組みを組み込む

const locale =
handlerInput.requestEnvelope.request.locale;
const ms = handlerInput.serviceClientFactory.getMonetizationServiceClient();

  • SayHelloHandlerに対する親returnはms.getInSkillProductにする

return ms.getInSkillProduct(locale, SKILL_PACK_ID)
.then(function (product) {
console.log("PRODUCT=" + JSON.stringify(product));

  • ms.getInSkillProductの内の一番上に購入有無の確認を置く(追加条件を設定することで、無料でプレイ出来る範囲を確保する方法もある)

if (product.entitled === "NOT_ENTITLED" && something) {未購入なら買ってね}

  • その下に購入時に実行したい元スキルのMainHandlerのコード群を挿入する

return handlerInput.responseBuilder
.speak(speechText)
.reprompt(repromptText)
.getResponse();
}); ←ここでms.getInSkillProductが閉じられる

alexaisp

動画を絵画風に変換

Fast Style Transfer で動画を絵画風に変換してみた。

python transform_video.py 
    --checkpoint rain_princess.ckpt 
    --in-path ./in.mp4 
    --out-path ./out_rain_princess.mp4

cpuだけでは、1秒未満の動画を変換したところで変換が落ちてしまうので、動画変換は可能ではあるものの実用的では無い。どうしても作りたいのであれば、各コマ画像の変換を積み上げて動画にする方が確実であろう。