public async Task Run(CancellationToken cancellationToken)
        {
            client = await InboundSocket.Connect("127.0.0.1", 8021, "ClueCon", TimeSpan.FromSeconds(20));

            await client.SubscribeEvents(EventName.Dtmf, EventName.ChannelHangup);

            var originate =
                await
                client.Originate(
                    "user/1000",
                    new OriginateOptions
            {
                CallerIdNumber    = "123456789",
                CallerIdName      = "Dan Leg A",
                HangupAfterBridge = false,
                TimeoutSeconds    = 20
            });

            if (!originate.Success)
            {
                ColorConsole.WriteLine("Originate Failed ".Blue(), originate.HangupCause.ToString());
                await client.Exit();
            }
            else
            {
                ColorConsole.WriteLine("{0} {1} {2}".Fmt(originate.ChannelData.EventName, originate.ChannelData.AnswerState, originate.ChannelData.ChannelState).Blue());
                var uuid = originate.ChannelData.UUID;
                await client.SetChannelVariable(uuid, "dtmf_verbose", "true");

                //await client.StartDtmf(uuid);

                client.Events.Where(x => x.UUID == uuid && x.EventName == EventName.ChannelHangup)
                .Subscribe(
                    e =>
                {
                    ColorConsole.WriteLine("Hangup Detected on A-Leg ".Red(), e.UUID, e.HangupCause.ToString());
                    client.Exit();
                });

                client.Events.Where(x => x.UUID == uuid && x.EventName == EventName.Dtmf)
                .Subscribe(e => ColorConsole.WriteLine("DTMF Detected ".Blue(), e.Headers[HeaderNames.DtmfDigit]));

                var playGetDigitsResult = await
                                          client.PlayGetDigits(
                    uuid,
                    new PlayGetDigitsOptions()
                {
                    MinDigits        = 4,
                    MaxDigits        = 8,
                    MaxTries         = 3,
                    TimeoutMs        = 4000,
                    TerminatorDigits = "#",
                    PromptAudioFile  =
                        "ivr/ivr-please_enter_pin_followed_by_pound.wav",
                    BadInputAudioFile = "ivr/ivr-that_was_an_invalid_entry.wav",
                    DigitTimeoutMs    = 2000,
                });

                ColorConsole.WriteLine("Got digits: ".Blue(), playGetDigitsResult.Digits);

                if (playGetDigitsResult.Success)
                {
                    await client.Play(uuid, "ivr/ivr-you_entered.wav");

                    await
                    client.Say(
                        uuid,
                        new SayOptions()
                    {
                        Text   = playGetDigitsResult.Digits,
                        Type   = SayType.Number,
                        Method = SayMethod.Iterated
                    });

                    await
                    client.Play(
                        uuid, "ivr/ivr-you_may_exit_by_hanging_up.wav", new PlayOptions()
                    {
                        Loops = 3
                    });

                    await client.Hangup(uuid, HangupCause.CallRejected);
                }
            }
        }