Пример #1
0
        public async Task <object> ProcessActions(ChatModel chatModel, ChatFlowStep chatFlowStep, object functionParams, bool expectResult)
        {
            ScriptHost.ClearProperties();

            if (chatFlowStep.Actions == null &&
                chatFlowStep.ObjectType != ChatObjectType.Message &&
                chatFlowStep.ObjectType != ChatObjectType.StaticMessage)
            {
                return(null);
            }

            logger.DebugFormat("Script: ProcessActions Start - Remote NodeJS. {0}:{1}", chatFlowStep.Flow, chatFlowStep.Id);

            object result       = null;
            var    functionName = $"{chatFlowStep.ObjectType}{chatFlowStep.Id}_{FormatFunctionName(chatFlowStep.Name)}";

            var response = await ExecuteNode(chatModel, chatFlowStep.Flow, functionName, functionParams);

            if (!UtilityMethods.IsNullOrEmpty(response))
            {
                foreach (var item in response)
                {
                    switch (item)
                    {
                    case NodeAbortResponse abortResponse: ChatScriptHost.Abort(abortResponse.Result); break;

                    // TODO: Check if actionResponse is different meaning than nodeVariableResponse
                    case NodeActionResponse actionResponse: result = actionResponse.Result?.FromScriptValue(); break;

                    case NodeAddPiiTextResponse addPiiTextResponse:
                    {
                        ChatScriptHost.AddPiiText(addPiiTextResponse.Result.PiiType,
                                                  addPiiTextResponse.Result.Text,
                                                  addPiiTextResponse.Result.Mask);
                        break;
                    }

                    case NodeCallFlowResponse callFlowResponse: ChatScriptHost.CallFlow(callFlowResponse.Result.FlowName, callFlowResponse.Result.Params); break;

                    case NodeChangeContextResponse changeContextResponse: ChatScriptHost.ChangeContext(changeContextResponse.Result.Partner, changeContextResponse.Result.Context); break;

                    case NodeErrorResponse errorResponse: throw new ScriptException(errorResponse.Stack, chatFlowStep.Flow, chatFlowStep.Id);

                    case NodeIncreaseFailureCountResponse increaseFailureCountResponse: ChatScriptHost.IncreaseFailureCount(); break;

                    case NodeLogResponse logResponse: ChatScriptHost.LogInfoMessage(logResponse.Result); break;

                    case NodeMessageResponse messageResponse: ChatScriptHost.UI("", messageResponse.Result); break;

                    case NodeSendEmailResponse sendEmailResponse:
                    {
                        ChatScriptHost.SendEmail(sendEmailResponse.Result.From,
                                                 sendEmailResponse.Result.Recipients,
                                                 sendEmailResponse.Result.Subject,
                                                 sendEmailResponse.Result.Body,
                                                 sendEmailResponse.Result.IsBodyHtml);
                        break;
                    }

                    case NodeSendTagEventResponse sendTagEventResponse: ChatScriptHost.SendTagEvent(sendTagEventResponse.Result.TagName, sendTagEventResponse.Result.Properties); break;

                    case NodePutKinesisEventResponse putKinesisEventResponse:
                    {
                        ChatScriptHost.PutKinesisEvent(putKinesisEventResponse.Result.Arn,
                                                       putKinesisEventResponse.Result.StreamName,
                                                       putKinesisEventResponse.Result.StsRoleSessionName,
                                                       putKinesisEventResponse.Result.PartitionKey,
                                                       putKinesisEventResponse.Result.EventData);
                        break;
                    }

                    case NodeSetQuickRepliesResponse setQuickRepliesResponse: ChatScriptHost.SetQuickReplies(setQuickRepliesResponse.Result.Choices); break;

                    case NodeTransferToAgentResponse transferToAgentResponse:
                    {
                        ChatScriptHost.TransferToAgent(transferToAgentResponse.Result.TransferInfo, transferToAgentResponse.Result.Skill);
                        break;
                    }

                    case NodeUiResponse uiResponse: ChatScriptHost.UI(uiResponse.Result.CustomMarkup, uiResponse.Result.PlainText); break;

                    case NodeVariableResponse variableResponse: result = variableResponse.Result; break;
                    }
                }
            }

            logger.DebugFormat("Script: ProcessActions End - Remote NodeJS. {0}:{1}", chatFlowStep.Flow, chatFlowStep.Id);

            return(result);
        }