private void SendStatusNotification(Status status, string reporterId, string routerId, string routerType)
        {
            Signal signal = new Signal();

            signal.ReporterId  = reporterId;
            signal.RouterId    = routerId;
            signal.RouterType  = routerType;
            signal.Name        = "Status Update";
            signal.Description = $"Id: [{status.Id}], ActionId [{status.ActionId}]";
            signal.IncludeId   = false;

            CueOption cue = new CueOption();

            cue.Name = status.NewStatus.ToString();
            if (!String.IsNullOrWhiteSpace(status.Message))
            {
                cue.Description = status.Message;
            }
            else if (status.Data != null)
            {
                cue.Description = JsonTools.Serialize(status.Data, false);
            }

            signal.Cues           = new Dictionary <string, CueOption>();
            signal.Cues["update"] = cue;

            SendStatusNotification(signal);
        }
        public void SetParameter(string key, object value)
        {
            if (Parameters.ContainsKey(key))
            {
                JObject jObj = JObject.Parse(JsonTools.Serialize(Template));
                foreach (TemplateVariableType variable in Parameters[key])
                {
                    JToken newToken = JToken.FromObject(value);
                    JToken token    = jObj.SelectToken(variable.Path);

                    if (token == null)
                    {
                        continue;
                    }

                    if (!String.IsNullOrWhiteSpace(variable.Replace))
                    {
                        string source   = token.ToObject <string>();
                        Regex  r        = new Regex(variable.Replace);
                        string newValue = r.Replace(source, value.ToString());
                        newToken = JToken.FromObject(newValue);
                    }

                    token.Replace(newToken);
                }

                Template = jObj.ToObject <Dictionary <string, object> >();
            }
        }
        public void ProcessCue(CueRequest req)
        {
            Resolver        resolver;
            ResolverRequest request;

            lock (__lockObj)
            {
                SignalDbRecord signalDbRecord = DbEngine.Get <SignalDbRecord>(req.Id);
                Cue            cue            = req.Cue;
                ActionType     action         = new ActionType
                {
                    CueId   = cue.CueId,
                    Status  = StatusType.New,
                    IsValid = true,
                    Time    = DateTime.UtcNow
                };

                action.Variables = cue.Variables;

                if (signalDbRecord.Actions == null)
                {
                    signalDbRecord.Actions = new System.Collections.Generic.Dictionary <string, ActionType>();
                }

                resolver = signalDbRecord.Signal.Cues[cue.CueId].Resolver;
                request  = new ResolverRequest();

                try
                {
                    ValidateCue(signalDbRecord, cue);

                    request.Id       = cue.Id;
                    request.ActionId = req.ActionId;
                    request.CueId    = cue.CueId;

                    signalDbRecord.Status = StatusType.Received;
                }
                catch (Exception e)
                {
                    // TODO : Check for "Terminal" Status As Well.
                    if (signalDbRecord.Status != StatusType.Received)
                    {
                        signalDbRecord.Status = StatusType.Invalid;
                    }
                    action.Status        = StatusType.Error;
                    action.StatusMessage = e.Message;
                }

                signalDbRecord.Actions.Add(req.ActionId, action);
                signalDbRecord  = DbEngine.Update <SignalDbRecord>(signalDbRecord, true);
                request.Signal  = signalDbRecord.Signal;
                request.Actions = signalDbRecord.Actions;
                request.Trace   = signalDbRecord.Trace;
            }

            Logger.Info($"Sending To Resolver [{resolver.Name}].  {JsonTools.Serialize(request)}");
            SendToResolver(resolver, request);
        }
        public void SendMessage(AzureBotServiceMessage message)
        {
            Dictionary <string, string> headers = new Dictionary <string, string>
            {
                { "Authorization", $"Bearer {BearerToken}" }
            };

            String      body     = JsonTools.Serialize(message);
            String      url      = $"{BaseUrl}/{ConversationId}/activities";
            WebResponse response = Utils.PostMessage(url, body, headers);
        }
示例#5
0
        public static MessageCard Publish(ChannelRequest request)
        {
            MessageCard message = CreateMessageCardMessage(request);
            string      json    = JsonTools.Serialize(message, true);
            Signal      signal  = request.Signal;

            String webHook = request?.Channel?.Target;

            if (webHook != null)
            {
                SendMessage(webHook, message);
                return(message);
            }
            else
            {
                throw new Exception("No Target Information Was Provided.");
            }
        }
示例#6
0
        public static void SendMessage(string webHook, SlackMessage message)
        {
            string body = JsonTools.Serialize(message);

            Utils.PostMessage(webHook, body);
        }
示例#7
0
        public static MessageCardAction CreateMessageCardAction(ChannelRequest request, string cueId, SignalVariable action)
        {
            string actionUrl = request.Channel?.Config?["actionUrl"]?.ToString();

            MessageCardAction potnetialAction = new MessageCardAction();

            potnetialAction.Name = action.Text;

            Dictionary <string, object> actionBody = new Dictionary <string, object>();

            actionBody.Add("signalId", request.Id);
            actionBody.Add("cueId", cueId);

            if (action.Type == VariableType.choice)
            {
                potnetialAction.Type    = MessageCardActionType.ActionCard;
                potnetialAction.Inputs  = new List <MessageCardInput>();
                potnetialAction.Actions = new List <MessageCardAction>();

                MessageCardInput input = new MessageCardInput();
                input.Type          = MessageCardInputType.MultichoiceInput;
                input.Id            = action.Id;
                input.Title         = action.Text;
                input.Value         = action.DefaultValue;
                input.Style         = MessageCardInputStyle.expanded; // Expanded = Radio Buttons.  Remove for Drop Down"
                input.IsMultiSelect = false;
                input.Choices       = new List <MessageCardInputChoice>();
                foreach (string key in action.Values.Keys)
                {
                    MessageCardInputChoice messageChoice = new MessageCardInputChoice()
                    {
                        Name  = action.Values[key],
                        Value = key
                    };
                    input.Choices.Add(messageChoice);
                }

                potnetialAction.Inputs.Add(input);

                actionBody.Add(action.Id, "{{" + action.Id + ".value}}");
                MessageCardAction submit = new MessageCardAction()
                {
                    Type   = MessageCardActionType.HttpPOST,
                    Name   = "Submit",
                    Target = actionUrl,
                    Body   = JsonTools.Serialize(actionBody)
                };
                potnetialAction.Actions.Add(submit);
            }
            else if (action.Type == VariableType.button)
            {
                actionBody.Add(action.Id, action.DefaultValue);

                potnetialAction.Type   = MessageCardActionType.HttpPOST;
                potnetialAction.Target = actionUrl;
                potnetialAction.Body   = JsonTools.Serialize(actionBody);
            }
            else
            {
                // Unknown or Unsupported Action Type.  Ignore It.
                potnetialAction = null;
            }

            return(potnetialAction);
        }