Интеграционный тест с использованием Bot Framework и DirectLine (2)

· 2 мин чтения

В этой части мы проведем авторизацию DirectLine и получим значения из ответа бота.

Теперь, когда мы выполнили десериализацию, пришло время получить информацию из коллекции и всего, что мы будем использовать для получения авторизации, выполнения вызовов API и подтверждения результата.

Следующее объяснение не охватывает всю основную информацию о том, как работает Bot Framework. Если вы не понимаете, пожалуйста, просмотрите официальную документацию.

Выполнение вызовов API с помощью WebClient

Чтобы нам было проще вызывать API, я создал класс utils, в котором мы сохраняем функции, которые будем использовать несколько раз. Этот класс включает в себя uploadString для POST и downloadString для GET.

[[[ТОК_3]]]

Авторизация DirectLine

Если вы прочитаете официальную документацию, то сможете узнать, как это сделать, и это довольно легко, а с нашими функциями еще проще. Прежде всего помните, что мы находимся внутри оператора foreach, поскольку мы выполняем аутентификацию для каждого случая на случай, если у нас закончится время, что означает, что тест завершится неудачей.

[[[ТОК_4]]]

Теперь у нас есть токен, который будет использоваться для всех последующих вызовов конечной точки диалога.

Создание разговора.

Чтобы поговорить с ботом, нам сначала нужно создать разговор. Этот разговор вернет новый токен, который включает идентификатор разговора.

/// 2 -Create a new conversation
var createdConversation = Utils.uploadString<DirectLineAuth>(token, data.DirectLineConversationEndpoint, "");

// This returns a new token and a conversationId
newToken = createdConversation.token;
conversationId = createdConversation.conversationId;

Кроме того, мы храним newToken и conversationId, оба они понадобятся пользователю для отправки сообщений боту.

Отправить активность в беседу

Теперь с помощью conversationId и conversationEndpoint мы можем создать конечную конечную точку для отправки Activity, который является request из файла json.

[[[ТОК_12]]]

Получить последнее сообщение

В истории сообщений после того, как мы отправили действие, бот уже должен был ответить, поэтому нам нужно получить все сообщения с водяным знаком, а затем, используя этот водяной знак, отфильтровать последнее сообщение/действие.

/// 4 - Get all activities, we get a List<activity> and a watermark
var getLastActivity = Utils.downloadString<ActivityResponse>(newToken, directlineConversationActivitiesEndpoint);

/// 5 - Get the latest activity which is the response we should be expecting
var latestResponse = getLastActivity.activities[Int32.Parse(getLastActivity.watermark)];

И это все, что касается этой части, следующая часть будет включать в себя часть, в которой мы получаем текст из assert в json, преобразуем его в код, например, используя eval() в Javascript, но в C#, а затем используя Assert.isTrue() для получения окончательного результата теста.

Помните, что весь код хранится у меня на github в репозитории this.