/// <inheritdoc/> public override async Task CreateConversationAsync(string botAppId, string channelId, string serviceUrl, string audience, ConversationParameters conversationParameters, BotCallbackHandler callback, CancellationToken cancellationToken) { if (string.IsNullOrEmpty(serviceUrl)) { throw new ArgumentNullException(nameof(serviceUrl)); } _ = conversationParameters ?? throw new ArgumentNullException(nameof(conversationParameters)); _ = callback ?? throw new ArgumentNullException(nameof(callback)); Logger.LogInformation($"CreateConversationAsync for channel: {channelId}"); // Create a ClaimsIdentity, to create the connector and for adding to the turn context. var claimsIdentity = CreateClaimsIdentity(botAppId); claimsIdentity.AddClaim(new Claim(AuthenticationConstants.ServiceUrlClaim, serviceUrl)); // Create the connector factory. var connectorFactory = BotFrameworkAuthentication.CreateConnectorFactory(claimsIdentity); // Create the connector client to use for outbound requests. using (var connectorClient = await connectorFactory.CreateAsync(serviceUrl, audience, cancellationToken).ConfigureAwait(false)) { // Make the actual create conversation call using the connector. var createConversationResult = await connectorClient.Conversations.CreateConversationAsync(conversationParameters, cancellationToken).ConfigureAwait(false); // Create the create activity to communicate the results to the application. var createActivity = CreateCreateActivity(createConversationResult, channelId, serviceUrl, conversationParameters); // Create a UserTokenClient instance for the application to use. (For example, in the OAuthPrompt.) using (var userTokenClient = await BotFrameworkAuthentication.CreateUserTokenClientAsync(claimsIdentity, cancellationToken).ConfigureAwait(false)) // Create a turn context and run the pipeline. using (var context = CreateTurnContext(createActivity, claimsIdentity, null, connectorClient, userTokenClient, callback, connectorFactory)) { // Run the pipeline. await RunPipelineAsync(context, callback, cancellationToken).ConfigureAwait(false); } } }
/// <summary> /// The implementation for continue conversation. /// </summary> /// <param name="claimsIdentity">A <see cref="ClaimsIdentity"/> for the conversation.</param> /// <param name="continuationActivity">The continuation <see cref="Activity"/> used to create the <see cref="ITurnContext" />.</param> /// <param name="audience">The audience for the call.</param> /// <param name="callback">The method to call for the resulting bot turn.</param> /// <param name="cancellationToken">Cancellation token.</param> /// <returns>A task that represents the work queued to execute.</returns> protected async Task ProcessProactiveAsync(ClaimsIdentity claimsIdentity, Activity continuationActivity, string audience, BotCallbackHandler callback, CancellationToken cancellationToken) { Logger.LogInformation($"ProcessProactiveAsync for Conversation Id: {continuationActivity.Conversation.Id}"); // Create the connector factory. var connectorFactory = continuationActivity.IsFromStreamingConnection() ? GetStreamingConnectorFactory(continuationActivity) : BotFrameworkAuthentication.CreateConnectorFactory(claimsIdentity); // Create the connector client to use for outbound requests. using (var connectorClient = await connectorFactory.CreateAsync(continuationActivity.ServiceUrl, audience, cancellationToken).ConfigureAwait(false)) // Create a UserTokenClient instance for the application to use. (For example, in the OAuthPrompt.) using (var userTokenClient = await BotFrameworkAuthentication.CreateUserTokenClientAsync(claimsIdentity, cancellationToken).ConfigureAwait(false)) // Create a turn context and run the pipeline. using (var context = CreateTurnContext(continuationActivity, claimsIdentity, audience, connectorClient, userTokenClient, callback, connectorFactory)) { // Run the pipeline. await RunPipelineAsync(context, callback, cancellationToken).ConfigureAwait(false); } }
/// <inheritdoc/> public override ConnectorFactory CreateConnectorFactory(ClaimsIdentity claimsIdentity) { return(_inner.CreateConnectorFactory(claimsIdentity)); }