SlideShare a Scribd company logo
1 of 19
Download to read offline
【朗報】無音無限ループは
禁術じゃなかった!
平林 拓将(ひらりん)
himarin269 / himanago
LINE Developer Community : 第 4 回 ボット自慢/苦労自慢 LT 大会
2019/7/12
自己紹介
• Name
• 平林 拓将(ひらりん)
• Work
• テクニカルトレーナー/アーキテクト
• Like
• C# と Azure と LINE!
• Social
• Twitter:@himarin269
• GitHub:himanago
• Blog:http://himanago.hatenablog.com/
DEMO
テキスト腹話術
LINEからの入力でClovaに好きな言葉を
しゃべらせることができる腹話術スキル!
できること
• スキルとBotが連携し、LINEで入力した内容をそのまましゃべらせる
活用例
≪はげましてもらう≫ ≪子どもと遊ぶ≫
できること
• LINE上でセリフの事前登録が可能(テンプレート作成)
リッチメニューから
作成開始
メッセージを送ると
セリフがリストに
追加される
クイックリプライで
作成終了
すごいところ
どんなセリフでも
自由なタイミングで
しゃべるよ!
対話が原則のClovaスキルの常識を覆す!
その場で何でもしゃべってくれる!
いつまでも続くスキルのセッション!
→ 話しかけなくてもClovaだけがしゃべりだす
→ 自由な言葉を言わせられる(英語・韓国語翻訳対応)
→ セッションが勝手に切れず長時間遊べる
アーキテクチャ
CEK
Messaging API
Azure Functions
Clova
LINE Durable Functionsで
コードだけでステートフルに連携!
Cognitive Services
(Translater Text API)
CEK裏技「無音無限ループ」
• CEKのAudioPlayerのイベントを利用して、スキルを起動したまま
無限にClovaを待機させるしくみが作れる
"PlayFinished"
「無音」再生指示
無音mp3の再生指示を出すことで無限ループを作る
(何らかの条件を満たした場合に無音再生以外の指示を出すことで無限ループから抜ける)
無限
ループ・・・
Durable Functionsと相性がいい!
無音無限ループ+Durable Functionsでタイミング同期
Azure FunctionsClova
LINE
無音無限ループで
セッション維持しながら待機
Durable Functionsで
イベント待機
LINEからの操作で
Functions→Clovaに指示
そんなスキルですが…!
「テキスト腹話術」という名前でストア公開!
Clova Skill Awards で入賞!
https://clova.line.me/clova-ai/skillstore/skill/jp.himanago.ventriloquism
実はアワード狙いで急遽公開へ踏み切ったもの
• もともとアワード向けに作っていたスキルと全く同じギミックのスキルが
先に公開されてしまった
スキルから招待コードを発行し
その場に集まったメンバーの
LINE Botでマルチプレイ
ちなみに最優秀賞スキル
何も出さないのは悔しいので「腹話術」を調整して公開することに…
しかし無音無限ループは危険な技…
• 無音無限ループ中ではClovaの音声コントロールが無効化される
・・・
ねぇClova
ねぇClova!!!
ねぇClova?
• Botからの終了コマンド実行をしなければならない
• Botを友だち追加していないと詰む(デバイス再起動しかなくなる)
ダメ元でストア申請!
• 「無音無限ループはスキルの幅が広がると思うのでどうか通して…!」
と泣きつきながら申請
• さすがに一発通過とはならずリジェクトされた
• 細かい指摘ポイントはほかにもいくつかあったが、主だったものは以下
友だち追加していない場合には先に進めないようにしてほしい
音声でスキルを終了できるようにすることは必須
⇒ 連携必須のスキルの場合は必ずチェックされるポイントっぽい
説明文への明記も必須!
⇒ やはりつっこまれた。ここを対応しないと公開できない…
がんばって検証してみたら
• 無音無限ループ中、
✓shouldEndSessionをfalseにした状態で
✓Clovaに何らかの発話をさせると
✓その後の一定時間(無音mp3再生終了まで)は
Clovaがウェイクワードなしで指示を聞き取る状態になっていた
• これまで無音mp3を1秒にしていたため気づかなかった
• mp3再生中、ウェイクワード「ねぇClova」で指示を聞いてくれる
• よくよく考えてみれば、これはAudioPlayerの機能として当然の動き
つまり
mp3が再生中は音声コントロールが可能に!
無音mp3の長さが一定以上なら「止めて」も効く(聞く)!
無音再生 無音再生 無音再生
こんにちは
無音再生
ねぇClova
音声で指示が可能 音声で指示が可能
無音無限ループ “安全版”
• 友だち追加していない場合にスキル起動しないように
• 無音無限ループでなくともBot必須のスキルの場合は
審査でチェックされる
• 無音mp3の長さを「5秒」に
• 反応速度の許容範囲と音声指示に必要な長さのぎりぎりの妥協点
無音再生
ねぇClova、止めて
5秒のmp3の場合音声指示が可能な秒数は平均2.5秒
⇒ 終了指示が言いきれる確率をぎりぎり許容可能なレベルに
まとめ
• 無音無限ループは禁術じゃなかった!
• でも禁術認定されたほうがなんかかっこよかったかもしれない
• 無音無限ループはClovaにのみ許された奥義!
• ぜひ活用して全く新しいスキルを創造してみてください
• 「テキスト腹話術」も使ってみてね
https://github.com/himanago/ClovaVentriloquism
★ソースコードはこちら(ストア公開版反映済み)
宣伝
• 1冊目:LINE API Expert本(共著。LAEじゃないけど参加させてもらえた)
• 今回の「無音無限ループ」のClovaスキルへの活用方法を詳しく
• 作例として「絵本読み聞かせ」「テキスト腹話術」と新作を載せる予定
• 2冊目:Azure+AIアシスタント本(単著)
• AzureでClovaをはじめAlexa/Googleアシスタントの拡張スキル開発をする方法
• ノンコーディングの初心者向け開発手法からFunctions等を使った応用的なクロス
プラットフォーム対応まで
技術書典7で本を書きます!(2冊)

More Related Content

What's hot

作ろう!LINEスタンプ 〜スタンプクリエイターの語り場〜
作ろう!LINEスタンプ 〜スタンプクリエイターの語り場〜作ろう!LINEスタンプ 〜スタンプクリエイターの語り場〜
作ろう!LINEスタンプ 〜スタンプクリエイターの語り場〜典子 松本
 
プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会nemumu
 
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!Toshiaki Maki
 
趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイス趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイスHiroaki Murayama
 
XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08孝文 田村
 
迷い彷徨った先で見つけた自分の進むべき道〜キャリアキーノート2017〜
迷い彷徨った先で見つけた自分の進むべき道〜キャリアキーノート2017〜迷い彷徨った先で見つけた自分の進むべき道〜キャリアキーノート2017〜
迷い彷徨った先で見つけた自分の進むべき道〜キャリアキーノート2017〜Keita Kawamoto
 
愛があれば発信できる!WordPressで作る焼き鳥ポータルサイト~公式テーマ・プラグインと子テーマの活用~|WordCamp Tokyo 2015
愛があれば発信できる!WordPressで作る焼き鳥ポータルサイト~公式テーマ・プラグインと子テーマの活用~|WordCamp Tokyo 2015愛があれば発信できる!WordPressで作る焼き鳥ポータルサイト~公式テーマ・プラグインと子テーマの活用~|WordCamp Tokyo 2015
愛があれば発信できる!WordPressで作る焼き鳥ポータルサイト~公式テーマ・プラグインと子テーマの活用~|WordCamp Tokyo 2015Yoshinori Kobayashi
 

What's hot (8)

作ろう!LINEスタンプ 〜スタンプクリエイターの語り場〜
作ろう!LINEスタンプ 〜スタンプクリエイターの語り場〜作ろう!LINEスタンプ 〜スタンプクリエイターの語り場〜
作ろう!LINEスタンプ 〜スタンプクリエイターの語り場〜
 
プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会プログラミング同好会とすごい合同勉強会
プログラミング同好会とすごい合同勉強会
 
Niigatarb#3
Niigatarb#3Niigatarb#3
Niigatarb#3
 
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
 
趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイス趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイス
 
XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08
 
迷い彷徨った先で見つけた自分の進むべき道〜キャリアキーノート2017〜
迷い彷徨った先で見つけた自分の進むべき道〜キャリアキーノート2017〜迷い彷徨った先で見つけた自分の進むべき道〜キャリアキーノート2017〜
迷い彷徨った先で見つけた自分の進むべき道〜キャリアキーノート2017〜
 
愛があれば発信できる!WordPressで作る焼き鳥ポータルサイト~公式テーマ・プラグインと子テーマの活用~|WordCamp Tokyo 2015
愛があれば発信できる!WordPressで作る焼き鳥ポータルサイト~公式テーマ・プラグインと子テーマの活用~|WordCamp Tokyo 2015愛があれば発信できる!WordPressで作る焼き鳥ポータルサイト~公式テーマ・プラグインと子テーマの活用~|WordCamp Tokyo 2015
愛があれば発信できる!WordPressで作る焼き鳥ポータルサイト~公式テーマ・プラグインと子テーマの活用~|WordCamp Tokyo 2015
 

Similar to 【朗報】無音無限ループは禁術じゃなかった!

Clova「おしゃべり禁止モード」
Clova「おしゃべり禁止モード」Clova「おしゃべり禁止モード」
Clova「おしゃべり禁止モード」拓将 平林
 
365 に Video がやって来る ヤァ!ヤァ!ヤァ!
365 に Video がやって来る ヤァ!ヤァ!ヤァ!365 に Video がやって来る ヤァ!ヤァ!ヤァ!
365 に Video がやって来る ヤァ!ヤァ!ヤァ!Hirofumi Ota
 
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~拓将 平林
 
Azure&C#によるClovaスキル+LINE Bot短期開発
Azure&C#によるClovaスキル+LINE Bot短期開発Azure&C#によるClovaスキル+LINE Bot短期開発
Azure&C#によるClovaスキル+LINE Bot短期開発拓将 平林
 
LINE Bot 開発のための Azure Logic Apps 入門
LINE Bot 開発のための Azure Logic Apps 入門LINE Bot 開発のための Azure Logic Apps 入門
LINE Bot 開発のための Azure Logic Apps 入門拓将 平林
 
オープンソースBotフレームワークではじめるChatOps
オープンソースBotフレームワークではじめるChatOpsオープンソースBotフレームワークではじめるChatOps
オープンソースBotフレームワークではじめるChatOpsAkihiko Horiuchi
 

Similar to 【朗報】無音無限ループは禁術じゃなかった! (6)

Clova「おしゃべり禁止モード」
Clova「おしゃべり禁止モード」Clova「おしゃべり禁止モード」
Clova「おしゃべり禁止モード」
 
365 に Video がやって来る ヤァ!ヤァ!ヤァ!
365 に Video がやって来る ヤァ!ヤァ!ヤァ!365 に Video がやって来る ヤァ!ヤァ!ヤァ!
365 に Video がやって来る ヤァ!ヤァ!ヤァ!
 
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~
 
Azure&C#によるClovaスキル+LINE Bot短期開発
Azure&C#によるClovaスキル+LINE Bot短期開発Azure&C#によるClovaスキル+LINE Bot短期開発
Azure&C#によるClovaスキル+LINE Bot短期開発
 
LINE Bot 開発のための Azure Logic Apps 入門
LINE Bot 開発のための Azure Logic Apps 入門LINE Bot 開発のための Azure Logic Apps 入門
LINE Bot 開発のための Azure Logic Apps 入門
 
オープンソースBotフレームワークではじめるChatOps
オープンソースBotフレームワークではじめるChatOpsオープンソースBotフレームワークではじめるChatOps
オープンソースBotフレームワークではじめるChatOps
 

More from 拓将 平林

意外な相性!?Azure Cosmos DB × LINE で作る安心のメッセージ配信システム
意外な相性!?Azure Cosmos DB × LINE で作る安心のメッセージ配信システム意外な相性!?Azure Cosmos DB × LINE で作る安心のメッセージ配信システム
意外な相性!?Azure Cosmos DB × LINE で作る安心のメッセージ配信システム拓将 平林
 
Azure × LINE でクラウドを楽しもう
Azure × LINE でクラウドを楽しもうAzure × LINE でクラウドを楽しもう
Azure × LINE でクラウドを楽しもう拓将 平林
 
LINE API 紹介&LINE API Use Case(Azure編)
LINE API 紹介&LINE API Use Case(Azure編)LINE API 紹介&LINE API Use Case(Azure編)
LINE API 紹介&LINE API Use Case(Azure編)拓将 平林
 
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform拓将 平林
 
15分でわかる!Azure Static Web Apps
15分でわかる!Azure Static Web Apps15分でわかる!Azure Static Web Apps
15分でわかる!Azure Static Web Apps拓将 平林
 
[Ignite The Tour Osaka] OPS20:インシデントに対応する (Respomding to incidents)
[Ignite The Tour Osaka] OPS20:インシデントに対応する (Respomding to incidents)[Ignite The Tour Osaka] OPS20:インシデントに対応する (Respomding to incidents)
[Ignite The Tour Osaka] OPS20:インシデントに対応する (Respomding to incidents)拓将 平林
 
JAZUG に参加してMicrosoft MVP になった話
JAZUG に参加してMicrosoft MVP になった話JAZUG に参加してMicrosoft MVP になった話
JAZUG に参加してMicrosoft MVP になった話拓将 平林
 
Azure Application GatewayでオンプレDMZをクラウドへ拡張する
Azure Application GatewayでオンプレDMZをクラウドへ拡張するAzure Application GatewayでオンプレDMZをクラウドへ拡張する
Azure Application GatewayでオンプレDMZをクラウドへ拡張する拓将 平林
 
Micronaut on Azure 試してみた
Micronaut on Azure 試してみたMicronaut on Azure 試してみた
Micronaut on Azure 試してみた拓将 平林
 
Xamarin.Forms with VUI(JXUG 2019/8/31)
Xamarin.Forms with VUI(JXUG 2019/8/31)Xamarin.Forms with VUI(JXUG 2019/8/31)
Xamarin.Forms with VUI(JXUG 2019/8/31)拓将 平林
 
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~拓将 平林
 
[JAZUG 7周年総会]社内でIoT&AIな農業系チャットボット開発講座をやってみて
[JAZUG 7周年総会]社内でIoT&AIな農業系チャットボット開発講座をやってみて[JAZUG 7周年総会]社内でIoT&AIな農業系チャットボット開発講座をやってみて
[JAZUG 7周年総会]社内でIoT&AIな農業系チャットボット開発講座をやってみて拓将 平林
 
最近Azure上でXamarinを触り始めた話
最近Azure上でXamarinを触り始めた話最近Azure上でXamarinを触り始めた話
最近Azure上でXamarinを触り始めた話拓将 平林
 

More from 拓将 平林 (13)

意外な相性!?Azure Cosmos DB × LINE で作る安心のメッセージ配信システム
意外な相性!?Azure Cosmos DB × LINE で作る安心のメッセージ配信システム意外な相性!?Azure Cosmos DB × LINE で作る安心のメッセージ配信システム
意外な相性!?Azure Cosmos DB × LINE で作る安心のメッセージ配信システム
 
Azure × LINE でクラウドを楽しもう
Azure × LINE でクラウドを楽しもうAzure × LINE でクラウドを楽しもう
Azure × LINE でクラウドを楽しもう
 
LINE API 紹介&LINE API Use Case(Azure編)
LINE API 紹介&LINE API Use Case(Azure編)LINE API 紹介&LINE API Use Case(Azure編)
LINE API 紹介&LINE API Use Case(Azure編)
 
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
 
15分でわかる!Azure Static Web Apps
15分でわかる!Azure Static Web Apps15分でわかる!Azure Static Web Apps
15分でわかる!Azure Static Web Apps
 
[Ignite The Tour Osaka] OPS20:インシデントに対応する (Respomding to incidents)
[Ignite The Tour Osaka] OPS20:インシデントに対応する (Respomding to incidents)[Ignite The Tour Osaka] OPS20:インシデントに対応する (Respomding to incidents)
[Ignite The Tour Osaka] OPS20:インシデントに対応する (Respomding to incidents)
 
JAZUG に参加してMicrosoft MVP になった話
JAZUG に参加してMicrosoft MVP になった話JAZUG に参加してMicrosoft MVP になった話
JAZUG に参加してMicrosoft MVP になった話
 
Azure Application GatewayでオンプレDMZをクラウドへ拡張する
Azure Application GatewayでオンプレDMZをクラウドへ拡張するAzure Application GatewayでオンプレDMZをクラウドへ拡張する
Azure Application GatewayでオンプレDMZをクラウドへ拡張する
 
Micronaut on Azure 試してみた
Micronaut on Azure 試してみたMicronaut on Azure 試してみた
Micronaut on Azure 試してみた
 
Xamarin.Forms with VUI(JXUG 2019/8/31)
Xamarin.Forms with VUI(JXUG 2019/8/31)Xamarin.Forms with VUI(JXUG 2019/8/31)
Xamarin.Forms with VUI(JXUG 2019/8/31)
 
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
 
[JAZUG 7周年総会]社内でIoT&AIな農業系チャットボット開発講座をやってみて
[JAZUG 7周年総会]社内でIoT&AIな農業系チャットボット開発講座をやってみて[JAZUG 7周年総会]社内でIoT&AIな農業系チャットボット開発講座をやってみて
[JAZUG 7周年総会]社内でIoT&AIな農業系チャットボット開発講座をやってみて
 
最近Azure上でXamarinを触り始めた話
最近Azure上でXamarinを触り始めた話最近Azure上でXamarinを触り始めた話
最近Azure上でXamarinを触り始めた話
 

【朗報】無音無限ループは禁術じゃなかった!