private Messaging.FlowMemberResultResponse onFlowMemberResult(Messaging.FlowMemberResultRequest request)
        {
            Messaging.FlowMemberResultResponse response = new Messaging.FlowMemberResultResponse();

            switch (request.Tag)
            {
            case "static":
            case "mfr":
                foreach (MessageFlowStep step in request.Steps)
                {
                    if ("message_gps_location".Equals(step.StepId))
                    {
                        LocationWidgetResult formResult = (step as FormFlowStep).Result.Widget as LocationWidgetResult;
                        MessageCallbackResult callback = new MessageCallbackResult();
                        callback.Flags = MessageFlag.ALLOW_DISMISS.Value | MessageFlag.AUTO_SEAL.Value;
                        callback.Tag = "mfr2";
                        callback.Text = String.Format("Received locationResult:\n({0:F3}, {1:F3}) +/- {2:F2}m",
                            formResult.Latitude, formResult.Longitude, formResult.HorizontalAccuracy);
                        callback.DismissButtonUiFlags = UiFlag.WAIT_FOR_NEXT_MESSAGE.Value;
                        response.Result = callback;
                        break;
                    }
                    break;
                }

                break;
            case "mfr3":
            {
                MessageCallbackResult callback = new MessageCallbackResult ();
                callback.Flags = MessageFlag.ALLOW_DISMISS.Value | MessageFlag.AUTO_SEAL.Value;
                callback.Tag = null;
                callback.Text = "Congrats, you reached the end of the flow";
                response.Result = callback;
                break;
            }
            default:
                break;
            }

            return response;
        }
        private Messaging.FormUpdateResponse onFormUpdate(Messaging.FormUpdateRequest request)
        {
            Messaging.FormUpdateResponse response = new Messaging.FormUpdateResponse();

            switch (request.Tag)
            {
            case "form":
                if (request.FormResult != null)
                {
                    LocationWidgetResult formResult = request.FormResult.Widget as LocationWidgetResult;
                    MessageCallbackResult callback = new MessageCallbackResult ();
                    callback.Flags = MessageFlag.ALLOW_DISMISS.Value | MessageFlag.AUTO_SEAL.Value;
                    callback.Tag = "form1";
                    callback.Text = String.Format ("Received locationResult:\n({0:F3}, {1:F3}) +/- {2:F2}m",
                        formResult.Latitude, formResult.Longitude, formResult.HorizontalAccuracy);
                    response.Result = callback;
                }
                break;
            default:
                break;
            }
            return response;
        }