Пример #1
0
        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>()}";
            }
        }
Пример #2
0
        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;
            }
            }
        }
Пример #3
0
        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);
        }
Пример #7
0
 object ISmartSpeakerAdapter.ConvertResponse(SmartSpeakerResponse response) => ConvertResponse(response);
Пример #8
0
 public abstract TResponse ConvertResponse(SmartSpeakerResponse response);