public async Task <IActionResult> CreateConversation(CreateConversationRequest createConversationRequest) { if (!_authService.AuthorizeSelf(Request.Headers["Authorization"], createConversationRequest.SenderId)) { return(Unauthorized()); } var duplicateConversationId = await _conversationValidator.ValidateConversationDuplicate(createConversationRequest); if (duplicateConversationId != Guid.Empty) { return(Conflict(duplicateConversationId)); } var conversationId = await _conversationsService.CreateConversationWithParticipants( createConversationRequest.SenderId, createConversationRequest.ReceiverId); if (!string.IsNullOrEmpty(createConversationRequest.Content)) { await _messagesService.CreateMessage(new Message(createConversationRequest, conversationId)); } return(Ok(conversationId)); }
public void CreateConversation() { moq::Mock <Conversations.ConversationsClient> mockGrpcClient = new moq::Mock <Conversations.ConversationsClient>(moq::MockBehavior.Strict); CreateConversationRequest request = new CreateConversationRequest { ParentAsProjectName = gagr::ProjectName.FromProject("[PROJECT]"), Conversation = new Conversation(), }; Conversation expectedResponse = new Conversation { ConversationName = ConversationName.FromProjectConversation("[PROJECT]", "[CONVERSATION]"), LifecycleState = Conversation.Types.LifecycleState.Unspecified, ConversationProfileAsConversationProfileName = ConversationProfileName.FromProjectConversationProfile("[PROJECT]", "[CONVERSATION_PROFILE]"), PhoneNumber = new ConversationPhoneNumber(), StartTime = new wkt::Timestamp(), EndTime = new wkt::Timestamp(), ConversationStage = Conversation.Types.ConversationStage.HumanAssistStage, }; mockGrpcClient.Setup(x => x.CreateConversation(request, moq::It.IsAny <grpccore::CallOptions>())).Returns(expectedResponse); ConversationsClient client = new ConversationsClientImpl(mockGrpcClient.Object, null); Conversation response = client.CreateConversation(request.Parent, request.Conversation); xunit::Assert.Same(expectedResponse, response); mockGrpcClient.VerifyAll(); }
/// <summary> /// Helper method to create new web conversation. /// </summary> /// <param name="request">Create conversation request.</param> /// <param name="conversationCallback">Conversation callback.</param> /// <param name="contextChannel">Context channel.</param> /// <returns>WebConversation.</returns> internal WebConversation CreateNewWebConversation(CreateConversationRequest request, IConversationCallback conversationCallback, IContextChannel contextChannel) { WebConversation webConversation = null; ConversationSettings convSettings = new ConversationSettings(); convSettings.Subject = request.ConversationSubject; //First create a ucma conversation. Conversation ucmaConversation = new Conversation(this.ApplicationEndpoint, convSettings); ucmaConversation.Impersonate(WebConversationManager.CreateUserUri(this.ApplicationEndpoint.DefaultDomain), null /*phoneUri*/, request.DisplayName); //Register for state changes. ucmaConversation.StateChanged += this.UcmaConversation_StateChanged; //Now create a web conversation. webConversation = new WebConversation(ucmaConversation, conversationCallback, request.ConversationContext, contextChannel); //Add conversation to local cache. lock (m_conversationDictionary) { m_conversationDictionary.Add(webConversation.Id, webConversation); } return(webConversation); }
public async stt::Task CreateConversationRequestObjectAsync() { moq::Mock <Conversations.ConversationsClient> mockGrpcClient = new moq::Mock <Conversations.ConversationsClient>(moq::MockBehavior.Strict); CreateConversationRequest request = new CreateConversationRequest { ParentAsProjectName = gagr::ProjectName.FromProject("[PROJECT]"), Conversation = new Conversation(), ConversationId = "conversation_id32c22ad5", }; Conversation expectedResponse = new Conversation { ConversationName = ConversationName.FromProjectConversation("[PROJECT]", "[CONVERSATION]"), LifecycleState = Conversation.Types.LifecycleState.Unspecified, ConversationProfileAsConversationProfileName = ConversationProfileName.FromProjectConversationProfile("[PROJECT]", "[CONVERSATION_PROFILE]"), PhoneNumber = new ConversationPhoneNumber(), StartTime = new wkt::Timestamp(), EndTime = new wkt::Timestamp(), ConversationStage = Conversation.Types.ConversationStage.HumanAssistStage, }; mockGrpcClient.Setup(x => x.CreateConversationAsync(request, moq::It.IsAny <grpccore::CallOptions>())).Returns(new grpccore::AsyncUnaryCall <Conversation>(stt::Task.FromResult(expectedResponse), null, null, null, null)); ConversationsClient client = new ConversationsClientImpl(mockGrpcClient.Object, null); Conversation responseCallSettings = await client.CreateConversationAsync(request, gaxgrpc::CallSettings.FromCancellationToken(st::CancellationToken.None)); xunit::Assert.Same(expectedResponse, responseCallSettings); Conversation responseCancellationToken = await client.CreateConversationAsync(request, st::CancellationToken.None); xunit::Assert.Same(expectedResponse, responseCancellationToken); mockGrpcClient.VerifyAll(); }
public async Task <Guid> ValidateConversationDuplicate(CreateConversationRequest createConversationRequest) { var commonConversationIds = await _conversationsRepository.GetCommonConversationIds( createConversationRequest.SenderId, createConversationRequest.ReceiverId); return(commonConversationIds.Count > 0 ? commonConversationIds[0] : Guid.Empty); }
public Message(CreateConversationRequest conversationRequest, Guid conversationId) { SenderId = conversationRequest.SenderId; Content = conversationRequest.Content; CreatedAt = DateTime.UtcNow; ConversationId = conversationId; }
/// <summary> /// Initiates an operation to establish a new conversation with the contact center service. /// </summary> /// <param name="localParticipant">Local participant name. Can be null or empty.</param> /// <param name="subject">Subject of the conversation. Can be null or empty.</param> /// <param name="conversationContext">Conversation context. Can be null or empty.</param> /// <param name="callback">Callback method.</param> /// <param name="state">State.</param> /// <returns>Async result reference.</returns> public IAsyncResult BeginEstablishConversation(string localParticipant, string subject, Dictionary <string, string> conversationContext, AsyncCallback callback, object state) { //Create new request. CreateConversationRequest request = new CreateConversationRequest(); request.RequestId = ContactCenterService.GenerateNewRequestId(); request.DisplayName = localParticipant; request.ConversationSubject = subject; request.ConversationContext = conversationContext; return(((IContactCenterWcfService)this.WcfClient).BeginCreateConversation(request, callback, state)); }
/// <summary>Snippet for CreateConversation</summary> /// <remarks> /// This snippet has been automatically generated for illustrative purposes only. /// It may require modifications to work in your environment. /// </remarks> public void CreateConversationRequestObject() { // Create client ContactCenterInsightsClient contactCenterInsightsClient = ContactCenterInsightsClient.Create(); // Initialize request argument(s) CreateConversationRequest request = new CreateConversationRequest { ParentAsLocationName = LocationName.FromProjectLocation("[PROJECT]", "[LOCATION]"), Conversation = new Conversation(), ConversationId = "", }; // Make the request Conversation response = contactCenterInsightsClient.CreateConversation(request); }
/// <summary>Snippet for CreateConversation</summary> public void CreateConversationRequestObject() { // Snippet: CreateConversation(CreateConversationRequest, CallSettings) // Create client ConversationsClient conversationsClient = ConversationsClient.Create(); // Initialize request argument(s) CreateConversationRequest request = new CreateConversationRequest { ParentAsProjectName = ProjectName.FromProject("[PROJECT]"), Conversation = new Conversation(), ConversationId = "", }; // Make the request Conversation response = conversationsClient.CreateConversation(request); // End snippet }
/// <summary>Snippet for CreateConversationAsync</summary> public async Task CreateConversationRequestObjectAsync() { // Snippet: CreateConversationAsync(CreateConversationRequest, CallSettings) // Additional: CreateConversationAsync(CreateConversationRequest, CancellationToken) // Create client ConversationsClient conversationsClient = await ConversationsClient.CreateAsync(); // Initialize request argument(s) CreateConversationRequest request = new CreateConversationRequest { ParentAsProjectName = ProjectName.FromProject("[PROJECT]"), Conversation = new Conversation(), ConversationId = "", }; // Make the request Conversation response = await conversationsClient.CreateConversationAsync(request); // End snippet }
public VidyoConversation CreateConversation(CreateConversationRequest request) { using (Trace.Cic.scope()) { try { // Ensure we're connected _cic.Connect(); // Create parameters VideoConversationInitializationParameters videoParameters; if (request.MediaTypeParameters is CallbackInteractionMediaTypeParameters) { var requestParameters = request.MediaTypeParameters as CallbackInteractionMediaTypeParameters; videoParameters = new CallbackVideoConversationInitializationParameters { CallbackMessage = requestParameters.CallbackMessage, CallbackPhoneNumber = requestParameters.CallbackPhoneNumber, ScopedQueueName = request.GetScopedQueueName() }; } else if (request.MediaTypeParameters is GenericInteractionMediaTypeParameters) { var requestParameters = request.MediaTypeParameters as GenericInteractionMediaTypeParameters; videoParameters = new GenericInteractionVideoConversationInitializationParameters { InitialState = requestParameters.InitialState, ScopedQueueName = request.GetScopedQueueName() }; } else { throw new Exception("Unsupported media type for new conversation: " + request.MediaTypeParameters.GetType()); } // Create dictionary for interaction attributes if (request.MediaTypeParameters.AdditionalAttributes == null) { request.MediaTypeParameters.AdditionalAttributes = new List <KeyValuePair <string, string> >(); } videoParameters.AdditionalAttributes = request.MediaTypeParameters.AdditionalAttributes.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); // Create conversation var conversation = ConversationManager.CreateVideoConversation(videoParameters); // Update additional attributes with conversation parameters videoParameters.AdditionalAttributes[VideoIntegrationAttributeNames.VideoConversationId] = conversation.ConversationId.ToString(); videoParameters.AdditionalAttributes[VideoIntegrationAttributeNames.VideoRoomId] = conversation.Room.RoomId.ToString(); videoParameters.AdditionalAttributes[VideoIntegrationAttributeNames.VideoRoomUrl] = conversation.RoomUrl; // Create interaction conversation.InteractionId = _cic.MakeInteraction(videoParameters); // Sync attributes to the conversation conversation.UpdateAttributes(_cic.GetAttributes(conversation.InteractionId, videoParameters.AdditionalAttributes.Select(kvp => kvp.Key).ToArray())); // Set the additional attributes on the interaction _cic.SetAttributes(conversation.InteractionId, videoParameters.AdditionalAttributes); // Return transport type return(conversation); } catch (Exception ex) { Trace.WriteEventError(ex, "Exception in CreateConversation: " + ex.Message, EventId.GenericError); return(null); } } }