/// <summary> /// Initializes a new instance of the <see cref="Bot" /> class. /// </summary> /// <param name="options">The bot options.</param> /// <param name="graphLogger">The graph logger.</param> public Bot(BotOptions options, IGraphLogger graphLogger) { BotInstanceUri = CallAffinityMiddleware.GetWebInstanceCallbackUri(options.BotBaseUrl); var instanceNotificationUri = CallAffinityMiddleware.GetWebInstanceCallbackUri( new Uri(options.BotBaseUrl, HttpRouteConstants.OnIncomingRequestRoute)); this.graphLogger = graphLogger; var name = GetType().Assembly.GetName().Name; var builder = new CommunicationsClientBuilder( name, options.AppId, this.graphLogger); var authProvider = new AuthenticationProvider( name, options.AppId, options.AppSecret, this.graphLogger); builder.SetAuthenticationProvider(authProvider); builder.SetNotificationUrl(instanceNotificationUri); builder.SetServiceBaseUrl(options.PlaceCallEndpointUrl); Client = builder.Build(); Client.Calls().OnIncoming += CallsOnIncoming; Client.Calls().OnUpdated += CallsOnUpdated; IncidentStatusManager = new IncidentStatusManager(); var audioBaseUri = options.BotBaseUrl; MediaMap[TransferringPromptName] = new MediaPrompt { MediaInfo = new MediaInfo { Uri = new Uri(audioBaseUri, "audio/responder-transfering.wav").ToString(), ResourceId = Guid.NewGuid().ToString(), }, }; MediaMap[NotificationPromptName] = new MediaPrompt { MediaInfo = new MediaInfo { Uri = new Uri(audioBaseUri, "audio/responder-notification.wav").ToString(), ResourceId = Guid.NewGuid().ToString(), }, }; MediaMap[BotIncomingPromptName] = new MediaPrompt { MediaInfo = new MediaInfo { Uri = new Uri(audioBaseUri, "audio/bot-incoming.wav").ToString(), ResourceId = Guid.NewGuid().ToString(), }, }; MediaMap[BotEndpointIncomingPromptName] = new MediaPrompt { MediaInfo = new MediaInfo { Uri = new Uri(audioBaseUri, "audio/bot-endpoint-incoming.wav").ToString(), ResourceId = Guid.NewGuid().ToString(), }, }; OnlineMeetings = new OnlineMeetingHelper(authProvider, options.PlaceCallEndpointUrl); }