Example #1
0
        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();
        }
Example #3
0
        /// <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();
        }
Example #5
0
        public async Task <Guid> ValidateConversationDuplicate(CreateConversationRequest createConversationRequest)
        {
            var commonConversationIds = await _conversationsRepository.GetCommonConversationIds(
                createConversationRequest.SenderId, createConversationRequest.ReceiverId);

            return(commonConversationIds.Count > 0 ? commonConversationIds[0] : Guid.Empty);
        }
Example #6
0
 public Message(CreateConversationRequest conversationRequest, Guid conversationId)
 {
     SenderId       = conversationRequest.SenderId;
     Content        = conversationRequest.Content;
     CreatedAt      = DateTime.UtcNow;
     ConversationId = conversationId;
 }
Example #7
0
        /// <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
        }
Example #11
0
        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);
                }
            }
        }