Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Bot Serviceだけじゃない!Azureで加速させるLINE開発~Clova腹話術スキルの紹介~

923 views

Published on

「Cogbot 勉強会 Special ★ LINE から話せる楽しいチャットボットを作ろう!」(https://cogbot.connpass.com/event/124711/)でのLT発表資料です。発表後に追加実装分の記述を追加しています。
デモ動画:https://youtu.be/G2oJxSzdV4U

Published in: Technology
  • There is a useful site for you that will help you to write a perfect and valuable essay and so on. Check out, please ⇒ www.HelpWriting.net ⇐
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you’re looking for a great essay service then you should check out ⇒ www.WritePaper.info ⇐. A friend of mine asked them to write a whole dissertation for him and he said it turned out great! Afterwards I also ordered an essay from them and I was very happy with the work I got too.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Bot Serviceだけじゃない!Azureで加速させるLINE開発~Clova腹話術スキルの紹介~

  1. 1. Bot Serviceだけじゃない! Azureで加速させるLINE開発 平林 拓将(ひらりん) himarin269 / himanago Cogbot 勉強会 Special ★ LINE から話せる楽しいチャットボットを作ろう!LT 大会 2019/4/20
  2. 2. 自己紹介 • Name • 平林 拓将(ひらりん) • Work • テクニカルトレーナー/アーキテクト • Like • C# と Azure と LINE! • Social • Twitter:@himarin269 • GitHub:himanago • Blog:http://himanago.hatenablog.com/ プロフィール画像迷走中 (Linux使いではありません)
  3. 3. DEMO
  4. 4. 腹話術~おしゃべりClova~ LINEからの入力でClovaに好きな言葉を しゃべらせることができる腹話術スキル!
  5. 5. できること • スキルとBotが連携し、LINEで入力した内容をそのまましゃべらせる 活用例 ≪はげましてもらう≫ ≪子どもと遊ぶ≫
  6. 6. できること • LINE上でセリフの事前登録が可能(テンプレート作成) リッチメニューから 作成開始 メッセージを送ると セリフがリストに 追加される クイックリプライで 作成終了
  7. 7. すごいところ どんなセリフでも 自由なタイミングで しゃべるよ! 対話が原則のClovaスキルの常識を覆す! その場で何でもしゃべってくれる! いつまでも続くスキルのセッション! → 話しかけなくてもClovaだけがしゃべりだす → 自由な言葉を言わせることができる → セッションが勝手に切れず長時間遊べる
  8. 8. アーキテクチャ CEK Messaging API Azure Functions Clova LINE これだけ!!
  9. 9. Azure Functionsとは で使えるサーバーレスのサービスは ※サーバーを意識せずに使えるコード実行環境 (AWSでいうLambda)
  10. 10. は? ClovaとLINEを連携させた 長時間でステートフルな機能を、 DBとかを使った永続化なしに サーバーレスの関数だけで 実現できるわけないじゃん!
  11. 11. できちゃうのがAzure Functions! そう、拡張機能「Durable Functions」ならね
  12. 12. Durable Functionsでできること 関数チェーン ファンアウト/ファンイン 非同期 HTTP API 監視 人による操作 複雑&ステートフルなワークフローをシンプルに実装可能 "Durable"(=永続的/持続的)な処理をシンプルな関数コードの組み合わせだけで作れる!
  13. 13. Durable Functionsの基本 • 3種類の関数を作って使う OrchestrationClient Orchestrator関数 Activity関数 • 外部から呼び出し/実行される 関数本体で、CEKやMessaging APIからのHTTPリクエストを で呼び出されるもの • Orchestratorを起動する役割を 持つ • Activityを呼び出し、オーケス トレーションを担当する • ランダム値やI/O処理、非同期 APIの呼び出しを直接行うこと は禁止(Activityにやらせる必 要がある) • Orchestratorからの実行指示で 起動する関数 • アプリケーションの機能を担当 する Activity関数 Activity関数 履歴などの実行情報をストレージに書き込んで勝手に管理してくれる!
  14. 14. 各関数で使用する代表的なメソッド • 関数同士を連携させて"Durable"な処理を作る部品が揃っている! 関数 メソッド名 処理内容 OrchestrationClient StartNewAsync Orchestratorを開始する。 TerminateAsync Orchestratorを終了する。 GetStatusAsync Orchestratorの状態を取得する。 RaiseEventAsync 任意の名前のイベントを起こす。 Orchestrator関数 CallActivityAsync Activityを呼び出して実行する。パラメータで好きな値を 渡せる(タプルやコレクションも使えるのでかなり自由)。 CallActivityWithRetryAsync 失敗した場合にリトライするCallActivityAsync。 CallSubOrchestratorAsync 別のOrchestratorを実行する。 CallSubOrchestratorWithRetryAsync 失敗した場合にリトライするCallSubOrchestratorAsync。 ContinueAsNew 今回実行した際の情報をパラメータとして渡して状態を 維持し、自身を再実行する。 WaitForExternalEvent 指定した名前のイベントが起きるまで待機する。 GetInput 呼び出し元から渡されたパラメータを取得する。 Activity関数 GetInput 呼び出し元から渡されたパラメータを取得する。
  15. 15. しくみ解説~テンプレート作成 OrchestrationClient Orchestrator ・Postback(作成開始) ・テキスト ・Postback(作成終了) WaitForExternalEvent Activity ・セリフリストの作成 (ContinueAsNewで再実行) ・返信Activityの呼び出し (リストとReplyTokenを渡す) 完成したテンプレートを返信 RaiseEventAsync 面倒なことはすべておまかせ!真のサーバーレス体験! イベントの管理 状態の保持
  16. 16. コード(テンプレート作成のOrchestrator) 外部イベントの 発生を待機 セリフリストに追加し、 そのリストを引数にして 自身を再帰的に実行 作成完了かどうかを 文字列の頭で判定し、 Botの返信Activityをコール
  17. 17. さらにCEK裏技「無音無限ループ」 • CEKのAudioPlayerのイベントを利用して、スキルを起動したまま 無限にClovaを待機させるしくみが作れる "PlayFinished" 「無音」再生指示 無音mp3の再生指示を出すことで無限ループを作る (何らかの条件を満たした場合に無音再生以外の指示を出すことで無限ループから抜ける) 無限 ループ・・・ Durable Functionsと相性がいい!
  18. 18. しくみ解説~ Botで操る腹話術 OrchestrationClient Orchestrator 起動時 or 読み上げ終了時 WaitForExternalEvent RaiseEventAsync LINE Botとの連携も自在な"Durable Session" • 状態を確認し、完了するまで 無音無限ループで待機させる OrchestrationClient GetStatusAsync 無音mp3のPlayFinished時 無音mp3の再生指示 • 完了していたらセリフをしゃべらせ、 Orchestratorを再実行
  19. 19. コード(腹話術スキルのエンドポイント) 無音mp3の再生指示 再生終了 イベント Orchestratorの進行状況を チェックし、完了していたら (=LINEからメッセージを受信 したら)その内容を受け取り Clovaに言わせる
  20. 20. Cogbot勉強会なので… • Cognitive Servicesを使って翻訳機能に対応 しようとしたのですが間に合いませんでした!
  21. 21. 追記:帰宅後完成させました! Cognitive Servicesの Translator Text APIで翻訳 CustomStatusとして言語 (enなどの文字列)を保持 設定されている言語を取得 C#8.0のswitch式 (まだプレビュー)
  22. 22. まとめ • Durable Functionsすごい • コードのみで実現できる範囲を広げる真のサーバーレス • LINE BotやClovaスキルの可能性を大きく広げる • Azureはいいぞ • ノンコーディングでいろいろできるLogic Appsも神 https://github.com/himanago/ClovaVentriloquism ★ソースコードはこちら(最新のものをマージ済み) https://youtu.be/G2oJxSzdV4U ★デモ動画撮りました

×