private async Task HandleIntentAsync(SmartSpeakerRequest request, SmartSpeakerResponse response) { var status = await _starter.GetStatusAsync(request.User.Id); _log.LogInformation($"現在のタスクの状態: {JsonConvert.SerializeObject(status)}"); if (status == null) { response.ResponseMessage = "ごめんなさい。何か変なことが起きたみたい。"; response.ShouldEndSession = true; } else if (status.RuntimeStatus == OrchestrationRuntimeStatus.Completed) { response.ResponseMessage = $"処理が終わりました。メッセージを再生します。{status.Output.ToObject<string>()}"; response.ShouldEndSession = true; } else if (status.RuntimeStatus == OrchestrationRuntimeStatus.Terminated || status.RuntimeStatus == OrchestrationRuntimeStatus.Failed || status.RuntimeStatus == OrchestrationRuntimeStatus.Canceled) { response.ResponseMessage = "失敗したみたい。"; response.ShouldEndSession = true; } else { response.ResponseMessage = $"もうちょっと待ってね。現在のステータスは {status.CustomStatus.ToObject<string>()}"; } }
private async Task HandleLauncheRequestAsync(SmartSpeakerRequest request, SmartSpeakerResponse response) { response.ShouldEndSession = false; var status = await _starter.GetStatusAsync(request.User.Id); switch (status?.RuntimeStatus ?? OrchestrationRuntimeStatus.Canceled) { case OrchestrationRuntimeStatus.Completed: { response.ResponseMessage = $"こんにちは。前回開始していた処理が完了しています。結果は {status.Output.ToObject<string>()} 新しい時間のかかる処理を起動します。「進捗どうですか」と尋ねると進捗を答えます。"; await _starter.StartNewAsync("LongRunningFunction", request.User.Id, request.Platform); break; } case OrchestrationRuntimeStatus.Running: { response.ResponseMessage = $"前回の処理が続いています。現在の状態は {status.CustomStatus.ToObject<string>()}「進捗どうですか」と尋ねると進捗を答えます。"; break; } default: { response.ResponseMessage = "こんにちは。時間のかかる処理を起動します「進捗どうですか」と尋ねると進捗を答えます。"; await _starter.StartNewAsync("LongRunningFunction", request.User.Id, request.Platform); break; } } }
public async Task <object> ExecuteAsync(object originalRequest) { var request = _adapter.ConvertRequest(originalRequest); var response = new SmartSpeakerResponse(); switch (request.RequestType) { case SmartSpeakerRequestType.LaunchRequest: await HandleLauncheRequestAsync(request, response); break; case SmartSpeakerRequestType.IntentRequest: await HandleIntentAsync(request, response); break; case SmartSpeakerRequestType.EndSessionRequest: // noop break; default: // noop break; } return(_adapter.ConvertResponse(response)); }
public override CEKResponse ConvertResponse(SmartSpeakerResponse response) { var r = new CEKResponse { ShouldEndSession = response.ShouldEndSession, }; r.AddText(response.ResponseMessage); return(r); }
public override SkillResponse ConvertResponse(SmartSpeakerResponse response) => new SkillResponse { Version = "1.0", Response = new ResponseBody { OutputSpeech = new PlainTextOutputSpeech { Text = response.ResponseMessage, }, ShouldEndSession = response.ShouldEndSession, }, };
public override WebhookResponse ConvertResponse(SmartSpeakerResponse response) { var r = new WebhookResponse(); r.FulfillmentText = response.ResponseMessage; if (response.ShouldEndSession) { var endSessionMessage = new Message { Platform = Message.Types.Platform.ActionsOnGoogle, Payload = new Google.Protobuf.WellKnownTypes.Struct(), }; endSessionMessage.Payload.Fields.Add("expectUserResponse", Google.Protobuf.WellKnownTypes.Value.ForBool(false)); r.FulfillmentMessages.Add(endSessionMessage); } return(r); }
object ISmartSpeakerAdapter.ConvertResponse(SmartSpeakerResponse response) => ConvertResponse(response);
public abstract TResponse ConvertResponse(SmartSpeakerResponse response);