protected override async Task OnPlayFinishedEventAsync(Event ev, Session session, CancellationToken cancellationToken) { // 終わっていなければ無音再生リクエストを繰り返す var status = await DurableClient.GetStatusAsync(session.User.UserId); if (status?.RuntimeStatus == OrchestrationRuntimeStatus.ContinuedAsNew || status?.RuntimeStatus == OrchestrationRuntimeStatus.Pending || status?.RuntimeStatus == OrchestrationRuntimeStatus.Running) { KeepClovaWaiting(); } else if (status.RuntimeStatus == OrchestrationRuntimeStatus.Completed) { // 完了していた場合(=LINEからの外部イベント処理が実行された場合) // 再度セッション継続 KeepClovaWaiting(); // 入力内容をそのまま話させる Response.AddText(status.Output.ToObject <string>()); // オーケストレーターを再実行 await DurableClient.StartNewAsync(nameof(ClovaFunctions.WaitForLineInput), session.User.UserId); } else if (status.RuntimeStatus == OrchestrationRuntimeStatus.Failed) { // 失敗していたら結果をしゃべって終了 Response.AddText("失敗しました。"); } else if (status.RuntimeStatus == OrchestrationRuntimeStatus.Terminated) { // Botからのスキル停止指示 Response.AddText("腹話術を終了します。"); } }
protected override async Task OnIntentRequestAsync(Intent intent, Session session, CancellationToken cancellationToken) { switch (intent.Name) { case "Clova.GuideIntent": Response .AddText("LINEに入力をした内容をしゃべります。準備はいいですか?") .KeepListening(); break; case "Clova.YesIntent": case "ReadyIntent": // 友だち追加チェック try { await LineMessagingClient.GetUserProfileAsync(session.User.UserId); } catch { Response.AddText("連携するLINEアカウントが友だち追加されていません。" + "Clovaアプリの本スキルのページから、連携するLINEアカウントを友だち追加してください。"); break; } await DurableClient.StartNewAsync(nameof(ClovaFunctions.WaitForLineInput), session.User.UserId); Response.AddText("LINEに入力をした内容をしゃべります。好きな内容をLINEから送ってね。"); // 無音無限ループに入る KeepClovaWaiting(); break; case "Clova.PauseIntent": // 無限ループ中の一時停止指示に対し、スキル終了をする await DurableClient.TerminateAsync(session.User.UserId, "intent"); Response.AddText("腹話術を終了します。"); break; case "Clova.NoIntent": case "Clova.CancelIntent": case "NotReadyIntent": // オーケストレーターが起動していないなら終了 var status = await DurableClient.GetStatusAsync(session.User.UserId); if (status?.RuntimeStatus == OrchestrationRuntimeStatus.ContinuedAsNew || status?.RuntimeStatus == OrchestrationRuntimeStatus.Pending || status?.RuntimeStatus == OrchestrationRuntimeStatus.Running) { Response.AddText("腹話術を終了します。"); } else { KeepClovaWaiting(); } break; } }