Отправка проактивного сообщения в Microsoft Bot Framework

342
09 ноября 2017, 02:59

Пытаюсь по таймеру из класса Синглтона отправить проактивное сообщение по ранее созранённым в БД ConversationReference

  public static async void Send()
    {
        var db = new DbQueries();
        var subscribes = await db.GetSubscribes();
        foreach (var subscribe in subscribes)
        {
            if (!string.IsNullOrWhiteSpace(subscribe.ConversationReference))
            {
                try
                {
                    ConversationReference conversationReference = UrlToken.Decode<ConversationReference>(subscribe.ConversationReference);
                    // Recreate the message from the conversation reference that was saved previously.
                    var oldMessage = conversationReference.GetPostToBotMessage();
                    if (!oldMessage.ChannelId.Contains("emulator"))
                    {
                        var userAccount = new ChannelAccount(oldMessage.From.Id, oldMessage.From.Name);
                        var botAccount = new ChannelAccount(oldMessage.Recipient.Id, oldMessage.Recipient.Name);
                        var connector = new ConnectorClient(new Uri(oldMessage.ServiceUrl));
                        var conversationId = oldMessage.Conversation.Id;
                        var message = Activity.CreateMessageActivity();
                        if (!string.IsNullOrEmpty(conversationId) && !string.IsNullOrEmpty(oldMessage.ChannelId))
                        {
                            message.ChannelId = oldMessage.ChannelId;
                        }
                        else
                        {
                            conversationId = (await connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount)).Id;
                        }
                        message.From = botAccount;
                        message.Recipient = userAccount;
                        message.Conversation = new ConversationAccount(id: conversationId);
                        message.Text = "Hello, this is a notification";
                        message.Locale = "en-Us";
                        //await connector.Conversations.SendToConversationAsync((Activity)message);
                        await connector.Conversations.ReplyToActivityAsync((Activity)message);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    throw;
                }
            }
        }
    }

При отправке проактивного сообщения получаю ответ: Код состояния ответа не указывает на успешное выполнение: 401 (Unauthorized). {"error":"invalid_client","error_description":"AADSTS70002: 'client_assertion', 'client_secret' or 'request' is required for the 'client_credentials' grant type.\r\nTrace ID: 4713-feeb-4713-4713-545d6fa10a00\r\nCorrelation ID: 4713-0c07-4713-bc96-a13ca14dd563\r\nTimestamp: 2017-11-08 11:34:24Z","error_codes":[70002],"timestamp":"2017-11-08 11:34:24Z","trace_id":"4713-4713-4713-a440-545d6fa10a00","correlation_id":"4713-0c07-4713-4713-a13ca14dd563"}

READ ALSO
Индекс элемента в IQueryable

Индекс элемента в IQueryable

Доброго времени суток, собственно сабж в заголовкеПробовал юзать метод ToList(), но

220
повторяется вывод из sql базы в dataGridView C#

повторяется вывод из sql базы в dataGridView C#

Каждый раз,при нажатии на кнопку обновить,выводятся данные из моей таблицы товаров повторно,даже те,которые уже существуютПодскажите,как...

208
Как корректно аутентифицироваться?

Как корректно аутентифицироваться?

После попытки скомпилировать код, появилось исключение (exception - 28P01) - смскриншот

179
Легенда графика ReportViewer (.NET 2005)

Легенда графика ReportViewer (.NET 2005)

Подскажите пожалуйстаМоя проблема состоит в том, что при построении графика в ReportViewer на

192