Quantcast
Channel: Anthony Caragol's Skype for Business and Teams Blog
Viewing all 91 articles
Browse latest View live

This Just In: SharePoint, MEC, Lync, and Other Conferences Merged!

$
0
0

This just in… Microsoft has merged their technical conferences into one giant mega-conference.  The good news is that it’s going to be in Chicago next year (OK, that was selfish of me since I live here).  What seems to have a lot of people nervous, myself included, is that it’s only ~5 days.  May 4-8, 2015.  If you’re a fan of multiple Microsoft technologies, you’re not going to be able to attend all the talks that you’d want unless content is scaled back greatly.  There’s also a bit of concern that the talks will fill quickly due to a much larger attendance (Don’t take my seat, curious SharePoint guy!).  If you’re like me, you’re really going to spend your time afterwards glued to Channel9 to watch the recordings.

“If you attended the SharePoint Conference, Exchange Conference, Lync Conference or Project Conference, this is the conference for you. And, if you’re interested in or already using Office 365, this is the conference for you.”

That’s not to say it’s a bad thing, it’s just change.   I’m sure it will still be a blast, and they’ll pull it all off, so no judgment from me until May 9, 2015 :)

More information:

 


One Line: Apply Policies To Lync Users Not in a Group

$
0
0

A while ago I wrote about one line of PowerShell to bulk enable users based on group membership.  The question has recently come up, what if they’re not in a group?  That’s a little bit trickier, but not too rough.

Why might you want to do this?  Perhaps we want to set a policy for everyone but exclude certain executives or the sales department.  Another example, let’s say we have two mobility policies, MobilityEnabled and MobilityDisabled.  We could run a scheduled task that grants MobilityEnabled for all Lync users in a group, but for those who have been removed for the group, we want to turn it off by granting MobilityDisabled (if you don’t want any specific policy, use $null).

As I’ve suggested in my other article, there are scripts that can do this as well.  Those scripts will give you more flexibility to add additional commands, but I like personally also like to keep one-liners that I can quickly cut and paste during administrative work.

It’s easy to illustrate this with an example using the Grant-CsMobilityPolicy scenario above:

Get-CsUser | ForEach {$myuser=$_;if (-not (Get-ADGroupMember “Your Group” | Where { $_.samaccountname -eq $myuser.samaccountname } )) { Grant-CsMobilityPolicy $myuser.identity -policyname “MobilityDisabled“}}

Swap the Grant-CsMobilityPolicy command for anything you’d like.

Of course, if you like this command as the one-liner to add based on a group better than the method mentioned in my previous article, just remove the -not, there are always many ways to accomplish the same thing with PowerShell.

 

Do I need a Lync License For a Common Area Phone?

$
0
0

First, thank you for being an honest person and finding this article.  Secondly, it depends, but we’ll walk through it.  The first thing you should know is that there’s a licensing guide that covers these details.  As of the time of this blog post, it can be found here:  http://aka.ms/tnydo0

First the basics; There are three flavors of Lync CALs; they are Standard, Enterprise, and Plus.  You’ll always need a Standard CAL, it’s your basic CAL for Instant Messaging, presence and one-to-one audio/video chatting.  The other two you would need in addition for the Standard CAL.  Enterprise is for conferencing (this includes desktop sharing and almost any other modality with more than two users present with the exception of IM).  The Plus CAL is for enterprise voice or phone use, but like the Enterprise CAL this also includes voice conferencing.  Each of these CALs are broken into two types; the device CAL and the user CAL.  The user CAL is of course a CAL assigned to a user.  That user can use any number of devices as long as there’s a CAL purchased for them, but other unlicensed users can’t use their devices.  A device CAL would be assigned to a device such as a phone, and unlicensed users can use this device but can’t use another unlicensed device.

That’s good to know, but doesn’t quite answer the question.  The answer can be found in the guide linked above in section 6.1.1.

  • Optimized phones that are primarily used by Lync users licensed to use Lync under a user based CAL approach do not require additional CALs to connect to Lync Server. Examples would be hot desking phones that are used in a shared cubicle environment where all users are licensed for Lync or conference room phones within an environment where all or most conference room users are licensed for Lync.

  • Optimized phones that are primarily used by individuals not licensed to use Lync require a Lync Standard CAL and a Lync Plus CAL[1]. Examples would be common area phones in reception areas, conference phones in meeting rooms used primarily by covered employees not licensed for Lync, and shared phones used by multiple users not licensed under Lync user CALs (but who may use Lync via shared computers covered by Device CALs).

[1] Lync phones do not require Windows CALs as they authenticate against Lync Server, not Active Directory and do not access Windows Server features

The guide continues in section 6.1.2 to say that compatible/qualified phones for Lync have the same licensing requirements as the optimized phones referenced above.

So, let’s look at the conference room phone example.  If all of your users are licensed with Lync user CALs, they can freely use the conference room phone even if it’s logged in as a common area phone or different user account.  The guide says “most conference room users are licensed for Lync” and I take it to mean that if your mother shows up in your conference room to congratulate you on your Lync rollout during a call, you don’t need to quickly buy her a user CAL.

Now let’s take the same room and put it in a school.  The students aren’t licensed with user CALs in this scenario, but they’re the primary users of that phone.  In this case, then you will want a Standard device CAL and Plus device CAL for the phone.

Please understand that of course I do not work for Microsoft and cannot speak for them, this is simply my interpretation of the licensing guide.  License at your own risk, and thank you for reading.

 

Lync Interactive Response Group Creation and Modification Via PowerShell

$
0
0

Introduction and Overview

Microsoft Lync provides the ability for callers to interact via questions and answers within a response group before being delivered to the appropriate queue.   This type of response group is typically referred to as an Interactive Voice Response Call Flow.  These questions, answers, and call flow settings are kept within a workflow.  The Lync Control Panel provides access to create and modify these workflows via a web page, which allows for easy modifications, however this method only supports up to two levels of questions with each question having up to four possible answers.  Via the Lync Management Shell, we have the ability to define any number of IVR questions and any number of answers.  The purpose of this article is a walkthrough of the procedures to create a workflow and to show you how to go beyond the limit of questions and answers available to you via the Control Panel GUI.  This article goes quite deep and can be a lot to consume, but due to the nature of how the examples build upon themselves, I didn’t feel that it should be broken up.  If you’d prefer, there’s also a tl;dr version that is a short and sweet look at the just commands to modify an existing response group.

Creating a Workflow

To begin, ensure that you are logged on as a member of the RTCUniversalServerAdmins group, or as a member of a group that has access to work with Lync Response Groups.

Before you create your workflow, make sure your agent groups and queues are properly defined.  If you don’t typically work with PowerShell, you might want to create your interactive workflow via the Control Panel first, and simply modify it with PowerShell after the fact if you need a larger question/answer set than provided.

Let’s start by defining a basic question and answer set.  We’ll keep this simple, but once you have the basics, you can build on it easily.  It may be easiest to sketch out your IVR flow on a sheet of paper, write out the questions, answers, and actions as seen below.

sketch

Let’s convert it into PowerShell.  We’ll work backwards to build our tree. Let’s start with a new prompt for the Sales Action.

$SalesPrompt = New-CsRgsPrompt -TextToSpeechPrompt “You have chosen sales, thank you.”

In our example, we want to transfer that to the Company_Sales queue.  So we’ll need to create an action and specify the queue.  The easiest way to do this is to pull the queue into a variable and specify it when creating our new action.

$CompanySalesQueue = Get-CsRgsQueue -Identity service:ApplicationServer:lyncpool.domain.com -Name Company_Sales

$SalesAction = New-CsRgsCallAction -Prompt $SalesPrompt -Action TransferToQueue  -QueueID $CompanySalesQueue.Identity

Let’s repeat for Accounting.

$AccountingPrompt = New-CsRgsPrompt -TextToSpeechPrompt “You have chosen accounting, thank you.”

$CompanyAccountingQueue = Get-CsRgsQueue -Identity service:ApplicationServer:lyncpool.domain.com -Name Company_Accounting

$AccountingAction = New-CsRgsCallAction -Prompt $AccountingPrompt -Action TransferToQueue  -QueueID $CompanyAccountingQueue.Identity

Now that we’ve got our actions built, we can move up one more level and build the Answers to our questions.

$SalesAnswer = New-CsRgsAnswer -Action $SalesAction -DtmfResponse 1 -VoiceResponseList Sales -Name “Sales Answer”

$AccountingAnswer = New-CsRgsAnswer -Action $AccountingAction -DtmfResponse 2 -VoiceResponseList Accounting, Accounts -Name “Accounting Answer”

We have our actions for our answers, let’s build our question.

$QuestionPrompt = New-CsRgsPrompt -TextToSpeechPrompt “Please press 1 for Sales or say Sales, or press 2 for Accounting or say Accounting or Accounts”

$QuestionObject = New-CsRgsQuestion -Prompt $QuestionPrompt  -AnswerList ($SalesAnswer, $AccountingAnswer)

$QuestionAction = New-CsRgsCallAction -Action TransferToQuestion  -Question $QuestionObject

We now have what we need to create our  workflow with the New-CsRgsWorkflow command.  There are many parameters that can be specified and these can be found in TechNet article referencing it in the references section of this article.  For our example, we’re going to start with the basics and build on it afterwards.

New-CsRgsWorkflow -Parent “service:ApplicationServer:lyncpool.domain.com”  -Name “Our IVR” -Description “Sales and Accounting IVR” -PrimaryUri “sip:salesacctivr@domain.com” -LineUri “tel:+15556667777″ -DisplayNumber “+1 (555) 666-7777″ -Active $true -DefaultAction $QuestionAction

FAkecreate2

Running the above command will create the workflow for us, but it wasn’t too complex as there was really only one question and two answers.  The next sections will show you how to add, modify, and remove questions and answers to go as deep as you’d like.

Adding Answers and New Questions

Adding Answers

Now we have a functional Interactive Response Group, but it’s time to make some changes.  Let’s use our example to add a third option to the original question to allow a caller to transfer to support.  We’ll start by building out our new answer as before.

$SupportPrompt = New-CsRgsPrompt -TextToSpeechPrompt “You have chosen support, thank you.”

$CompanySupportQueue = Get-CsRgsQueue -Identity service:ApplicationServer:lyncpool.domain.com -Name Company_Support

$SupportAction = New-CsRgsCallAction -Prompt $SupportPrompt -Action TransferToQueue  -QueueID $CompanySupportQueue.Identity

$SupportAnswer = New-CsRgsAnswer -Action $SupportAction -DtmfResponse 3 -VoiceResponseList Support -Name “Support Answer”

We’ll need to add our new answer on by loading our existing workgroup into a variable we can modify.  Once we’re done, we’ll save our changes by writing it back into to workflow with Set-CsRgsWorkflow.

Let’s load our workflow into a variable.

$workflow =Get-CsRgsWorkflow -Name “Our IVR”

If we want to see what answers are already assigned to the first question, we can now review it simply by typing the following command.  Keep in mind that the answers are stored as an array, and can be accessed as such later.

$workflow.DefaultAction.Question.AnswerList

original_two_answers

To add our new answer, we use the following command.

$workflow.DefaultAction.Question.AnswerList.Add($SupportAnswer)

addanswer4

We can confirm by reviewing the contents of $workflow.DefaultAction.Question.AnswerList, that the new answer has been added.  However, we’re not done yet.  We’ve only added the answer to our $workflow variable.  This hasn’t been written back to our workflow.  The final step to save the command is to use the Set-CsRgsWorkflow command as seen below.

Set-CsRgsWorkflow $workflow

save2

Adding Questions

So far, we’ve only set up answers that transfer to queues, but what if we need to ask another question before you can be properly transferred?  Let’s take the sales response and divide them into the tea sales team and the biscuit sales team.  Let’s build out a new question as we did at the start.

$TeaSalesPrompt = New-CsRgsPrompt -TextToSpeechPrompt “You have chosen tea sales, thank you.”

$CompanyTeaSalesQueue = Get-CsRgsQueue -Identity service:ApplicationServer:lyncpool.domain.com -Name Company_Tea_Sales

$TeaSalesAction = New-CsRgsCallAction -Prompt $TeaSalesPrompt -Action TransferToQueue  -QueueID $CompanyTeaSalesQueue.Identity

$BiscuitSalesPrompt = New-CsRgsPrompt -TextToSpeechPrompt “You have chosen biscuit sales, thank you.”

$CompanyBiscuitSalesQueue = Get-CsRgsQueue -Identity service:ApplicationServer:lyncpool.domain.com -Name Company_Biscuit_Sales

$BiscuitSalesAction = New-CsRgsCallAction -Prompt $BiscuitSalesPrompt -Action TransferToQueue  -QueueID $CompanyBiscuitSalesQueue.Identity

$TeaSalesAnswer = New-CsRgsAnswer -Action $TeaSalesAction -DtmfResponse 1 -VoiceResponseList Tea -Name “Tea Sales Answer”

$BiscuitSalesAnswer = New-CsRgsAnswer -Action $BiscuitSalesAction -DtmfResponse 2 -VoiceResponseList Biscuits -Name “Biscuit Sales Answer”

$SalesQuestionPrompt = New-CsRgsPrompt -TextToSpeechPrompt “Please press 1 for Tea Sales or say Tea, or press 2 for Biscuit sales or say Biscuits”

$SalesQuestionObject = New-CsRgsQuestion -Prompt $SalesQuestionPrompt  -AnswerList ($TeaSalesAnswer, $BiscuitSalesAnswer)

$SalesQuestionAction = New-CsRgsCallAction -Action TransferToQuestion  -Question $SalesQuestionObject

Now that we have our new question, we’ll need to assign it to an existing response.  Once we’re done, we’ll save our changes by writing it back into to workflow with Set-CsRgsWorkflow.

Let’s load our workflow into a variable.

$workflow =Get-CsRgsWorkflow -Name “Our IVR”

If we want to see what answers are assigned to the first question, we can review it simply by typing the following command.  Keep in mind that the answers are stored as an array, and can be accessed as such later.

$workflow.DefaultAction.Question.AnswerList

answerlist1

We can see our sales response action is set to TransferToQueue.  We now want to change that to be a second set of questions.  To do so, we’ll need to change this action.  Remember that the answer list is an array, so to access the first answer, we’d use $workflow.DefaultAction.Question.AnswerList[0], to get to the second we’d use $workflow.DefaultAction.Question.AnswerList[1] and so on.  To change our action to reflect the new question we’d use the following commands.

$workflow.DefaultAction.Question.AnswerList[0].Action=$SalesQuestionAction

AddQuestion2

We can now confirm by reviewing the contents of $workflow.DefaultAction.Question.AnswerList, that the new question has been added.  You might be asking how to go one level deeper now and see the answers to the question you just added.  You can see them by typing the following command.

$workflow.DefaultAction.Question.AnswerList[0].Action.Question.AnswerList

addquestion3

As you can see, we can now add another question one level deeper with a similar command such as $workflow.DefaultAction.Question.AnswerList[0].Action.Question.AnswerList[0].Action=$YetAnotherQuestionAction and so on and so on.

However, we’re still not done yet.  We’ve only added the question to our $workflow variable.  This hasn’t been written back to our workflow.  The final step to save the command is to use the Set-CsRgsWorkflow command as seen below.

Set-CsRgsWorkflow $workflow

Removing Answers and Questions

Removing Answers

Removing answers is a bit simpler than adding them, because there’s nothing to create.  Let’s take our accounting answer that we created at the beginning and pull it out.   This isn’t a particularly easy task in the GUI, but PowerShell makes it possible.  Let’s start once again by loading our workflow into a variable.

$workflow =Get-CsRgsWorkflow -Name “Our IVR”

Let’s look at that accounting answer we want to remove.  We can see the answers by typing the following command:

$workflow.DefaultAction.Question.AnswerList

RemoveAnswer1

There it is, the second answer.  Remember that these are arrays, and arrays start counting with 0, so to get answer 2 we’ll subtract 1.  In our example, to access answer two, we’d use $workflow.DefaultAction.Question.AnswerList[1], the third answer would be $workflow.DefaultAction.Question.AnswerList[2], etc.  To remove the second answer, the exact command would be:

$workflow.DefaultAction.Question.AnswerList.Remove($workflow.DefaultAction.Question.AnswerList[1])

RemoveAnswer2

RemvoeAnswer3

Which is a bit to type, especially as you dive deeper into deeper levels of questions, but still, not too bad.  :)

Remember to save it using the following command:

Set-CsRgsWorkflow $workflow

Removing Questions

This section is somewhat of a trick, because you don’t just remove a question.  Remember that a question is an action and we can’t just remove an action without replacing it with something else, what would be the point of having an answer without an action?  To replace a question, just rewrite it as seen in the Adding Questions section and replace the action the same way.  To replace it with a queue, build out the action the same way we did in the Adding Answers section and set it as follows (and as always don’t forget to save with Set-CsRgsWorkflow).

$workflow.DefaultAction.Question.AnswerList[0].Action=$ReplacementAction

Modifications

I left modifications for last because it’s difficult to discuss without getting past the question and answer additions, subtractions, and replacements.  Perhaps we want to change a prompt.  Did you notice we added the support response in the Adding Answers section but never modified the prompt to let callers know the option existed?  We can review the prompt by looking at the question with $workflow.DefaultAction.Question, then modify it with:

$workflow.DefaultAction.Question.Prompt.TextToSpeechPrompt=”Please press 1 for Sales or say Sales, press 2 for Accountin or say Accouting, or press 3 for Support or simply say Support.”

ModifyPrompt1

MofifyPrompt2

And as always, don’t forget to save with Set-CsRgsWorkflow.  Did I mention you need to save?  You need to save.

save2

If you made it all the way here to the end, you have my gratitude.  Thank you for reading!

 

 

TL;DR Just Tell Me How to Edit Lync IVR from PowerShell

$
0
0

The previous article was a bit of a walkthrough on creating and modifying a Lync Interactive Response Group from the Lync Management Shell.  However, the meat of that and the reason it was written was really focused around how to modify an existing group.  The method to accomplish this isn’t clear at all if you’re just starting out and reading through TechNet.  As promised, here’s the short version for those who already know their way around.

To modify a workflow, we first need to pull it into a variable like so:

$workflow = Get-CsRgsWorkflow -Name “Our IVR”

To review settings, we can drill down into the object a bit at a time.  For example, we can see what the DefaultAction of the workflow is by typing $workflow.DefaultAction.  We see that the action is TransferToQuestion and there’s a Question attribute.  So now we can drill into the question attribute by typing $workflow.DefaultAction.Question.  We can also see there’s an AnswerList attribute, which is an array of answers.  We can access that array directly by specifying $workflow.DefaultAction.Question.AnswerList.

navigate1

You’ll notice that the AnswerList is a variable, and we can access it as such.  To get at a specific answer we can use $workflow.DefaultAction.Question.AnswerList[2] the same way we’d access any array in PowerShell.

navigate2

We can add responses by $workflow.DefaultAction.Question.AnswerList.Add($YourNewAction).  This allows us to drill down deeper into the new answer the same way.  In the example below, you can see me getting at an answerlist that is an option from a previous answer.

add1

To remove an answer, you’d use AnswerList.Remove() and specify which answer in the array you’d like to remove as seen here: $workflow.DefaultAction.Question.AnswerList.Remove($workflow.DefaultAction.Question.AnswerList[1]).

So far, we’ve only modified our $workflow variable, to write our changes back, we only need to type: Set-CsRgsWorkflow $workflow and we’re done!

Thanks for reading!

This Just In: Lync 2013 CU5 Has Been Released!

FIXED: Lync Mobile Numbers Not Showing In Mobility

$
0
0

There’s a long standing issue where users using the Lync mobile client can not see cellular phone numbers of coworkers unless their privacy relationship was manually set higher than the default on a user by user basis.  The common workaround was to add the mobile numbers to contacts in the affected user’s Outlook.  This of course wasn’t feasible if there were thousands of users.

Well, it looks like this one has finally be fixed.  The fix was just released today with the August 2014 cumulative updates!  I’ve been waiting for this one long enough that I felt it deserved it’s own post.

Find the details here: http://support.microsoft.com/kb/2967628/en-us

And download the CU here: http://www.microsoft.com/en-us/download/details.aspx?id=36820&751be11f-ede8-5a0c-058c-2ee190a24fa6

New Tool: Lync Common Area Phone Management (GUI)

$
0
0

 

Update (August 15, 2014): We’re just a few days in and there’s already a revision :)  Based on conversations I’ve had, there’s a desire for a 2010 version as well.  There are also environments that are mixed 2010/2013.  I have modified this tool to work equally well with both.  The commands behind the GUI are similar, however the 2010 commands do not have the ability to set PersistentChat, Mobility, or VoiceRoutingPolicy (hybrid O365 voice environments).  I can’t imagine these are policies that would ever be needed, however if you find a need, I can re-enable it for you.

Update (August 19, 2014): Version 1.2 released with the ability to modify multiple phones at once and filter by pool: http://www.lyncfix.com/?p=757

I created this tool to allow you to add, modify, and remove Lync common area phones with an easy to use graphical front end.  This functionality is not available within the Lync Control Panel and even modifications via the Lync Management Shell can be difficult to those who don’t have to modify them often.

I hope you find this tool straightforward to use.  From a Lync server, you can simply right click it and run it.  However,  due to the modules it loads, it may start faster if you start it from a Lync Management Shell.  The opening screen looks like what you see below.  The glaring red warning is just a note to let you know that sometimes replication can take a bit of time and you may need to hit the refresh buttons a few times before you see updated data.  Within a six server Enterprise pool I was watching it take upwards of 8 seconds.

You should see a listing of all of your common area phones in front of you.  From here, just select them in the left box and change any settings you’d like.  As you change the settings, the colors of the fields should turn green letting you know that a change is pending.  Once you’re ready, click the Save Changes button.  If you change the DisplayName attribute, you’ll receive a warning letting you know to refresh your phone list.  This is because this we use this name to  display and reference the phones in the GUI and behind the scenes.

2010Edition

Clicking the Refresh Phone List button refreshes the list of Common Area Phones and redisplays them.  Clicking the Refresh Phone box only refreshes the information shown in the right side of the screen.

Clicking the Set Pin button resets the pin for the selected phone.  If you enter a pin and receive a failure, the tool is intelligent enough to let you know the error.  In the below screenshots, we highlight a phone, click the Set Pin button, enter a pin and click OK.  The pin we’ve entered is too short however and we receive an error.  Had we entered a pin with the required number of digits, we would have been returned back to the tool without additional prompts.

2010setpin

2010pinerror

To remove a phone, simply highlight the phone of your choice and click the Remove Phone button.  You will be prompted for a confirmation before you delete.

2010remove

To add a new phone, click the Create Phone button.  A new dialog will pop up which will allow you to supply information about the phone.  The OU, Pool, LineURI and DisplayName are required fields, and if you miss one of these you will be notified before you click Create.  The others can be left as is.  Typing an OU in can be cumbersome, so I’ve also added a Browse button that will load all of your OUs as well as the users container.  Drill in and select the OU you want the Common Phone to be created in and click the Select button.  Once you’re ready, click the Create button.  You may need to wait a moment and click the Refresh Phone List button before the data is available to the GUI.

2010create

My own future thoughts for improvement include a multi-select mode where you could select multiple phones and modify them as a group.  Let me know if you’d like to see this implemented.

If you have any thoughts, comments, bug reports, or feature requests, the Q/A section in the TechNet gallery is the best place, but I’m also watching here as well.

As with any free tool you find on the Internet, use at your own risk!

To download the program, please find it here in the TechNet Gallery: http://gallery.technet.microsoft.com/lync/Lync-2013-Common-Area-57bc4ff1

If you like it, please give it 5 stars over at the TechNet Gallery.  If not, please drop me a line before you rate it and give me a chance at fixing whatever bug you may have found.   I might also be able to add a feature you’d like to see!

Thanks again and let me know what you think!


How Many Users Can a Lync Pool Hold?

$
0
0

How many users can a Lync pool hold?  This question has come up a few times on the TechNet forums recently and I wanted to talk about it a little.

It’s referenced time and time again that the supported limit to a Lync Server Front End Pool is 80,000 users.

For Lync 2013: “The maximum number of users per pool is 80,000, with twelve Front End Servers. “: http://technet.microsoft.com/en-us/library/gg425939.aspx

For Lync 2010: “The maximum number of users per pool is 80,000, with eight Front End Servers.  “: http://technet.microsoft.com/en-us/library/gg425939(v=ocs.14).aspx

If your pool is a part of a pool paring team, the number would be reduced as you wouldn’t want to invoke failover and end up with 160,000 users in a pool.  The why of this can be found by reviewing the capacity planning guides.  It’s effectively based upon tested and expected modality usages when run on recommended hardware: http://technet.microsoft.com/en-us/library/gg615015.aspx

The question that comes up on TechNet isn’t just “What’s supported”, it’s “What’s possible”?  Is this a hard limit?  People have been asking if Lync is used for just pure IM and presence, could you get away with more?  The technical answer is yes.  The limit is a supported limit only as you can see from the following lab screenshot where I’m querying the total number of users in a single pool.

lync2013

Hopefully you didn’t stop reading there and run off to build your enormous pool.  My strong suggestion is, despite what is possible, if you’re running Lync for this amount of users you should absolutely want to stay within supported parameters.  The last thing you’ll ever want to hear when tens of thousands of users are down and you’re scrambling is that you’re not running a supported configuration.  On the flip side, if you find yourself at 79,999 users, you’re not going to crash Lync by hiring and enabling two more employees, so take your time and build your new pool properly.

 

Updated Tool: Lync Common Area Phone Management (GUI)

$
0
0

If you haven’t seen it or played with it, there’s a free tool available to you that I’ve developed that will help manage Lync Common Area Phones with a GUI interface.  There is nothing to install, it’s a pure PowerShell script you can run.  Read more about that here if you haven’t seen it: http://www.lyncfix.com/?p=715

What’s new is that it’s been updated again due to a request by a user.

Marcel writes:

“Hi Anthony, thank you for this great tool. It is very helpful doing maintenance on the common area phones.
I have a few questions/suggestions:
- You cannot select multiple cap’s to make changes. For example: I want to assign a new Pin Policy on 100 phones. I have to do it one by one now. Can you make it possible to select multiple phones?
- The company I work for has one the largest and complex installations. When I start this tool I see all (3300+ phones on 100+ pools). Is it possible that you add a feature to select the correct pool?”

Introducing Version 1.2!  These capabilities have now been added.  As you can see in the screenshot below, there is a Filter dropdown that allows you to filter by pool, or all pools.  The ability to select multiple phones and set the pin, make changes, or remove them is now available as well.  If you wanted to grab a selection of phones from pool1 and move them to pool2 with a new voice policy and dial plan, just select the phones on the left, change the relevant dropdowns, and click the “Save Changes” button.  Fields that do not have values selected will not change when the “Save Changes” button is pressed.   This way, you can modify only one or a few settings at a time.

multiselect

If you have any thoughts, comments, bug reports, or feature requests, the Q/A section in the TechNet gallery is the best place, but I’m also watching here as well.

As with any free tool you find on the Internet, use at your own risk!

To download the program, please find it here in the TechNet Gallery: http://gallery.technet.microsoft.com/lync/Lync-2013-Common-Area-57bc4ff1

If you like it, please give it 5 stars over at the TechNet Gallery.  If not, please drop me a line before you rate it and give me a chance at fixing whatever bug you may have found.   I might also be able to add a feature you’d like to see!

Thanks again and let me know what you think!

Lync: Database Mirroring Has Been Disabled by the Administrator

$
0
0

A client sent a request out today letting me know that their Lync databases had failed over automatically to their mirror, but they couldn’t get them fully failed back.  They were receiving the error “Database mirroring has been disabled by the administrator for database rgsdyn”.  You can see this error below as I try to fail this single database back.

error1b

Sure enough, connecting to SQL Manager proved that mirroring was disabled.  Oddly, this database was the only one that wasn’t failing over.  As you can see from the screenshot below, the mirror is marked as suspended.  A quick review of the SQL logs showed that a failure two weeks prior kept the primary down for an brief amount of time, this outage caused the mirror to suspend itself.

error2b

In our case the database and logs were healthy enough on both sides that we could restart the mirror.  I used the GUI to navigate open the properties of rgsdyn on the primary copy (which is on our secondary SQL server now), navigate to Mirroring, and click the Resume button.

error3

Mirroring went right back to a healthy state.

error4

And I was able to re-run my command without issue to bring all copies back to our main SQL server without error.

error5

For those who aren’t so lucky, mirroring may need to be rebuilt for the database in question.  Of course the real issue at hand is why the virtualization environment isn’t more stable.

This Just In: Lync 2013 Client Update for September 2014

$
0
0

The Lync 2013 Client has an update available that was released today, September 9th.

Some of the issues resolved:

  • When you sign in to Lync 2013 by using an Office 365 account, Lync 2013 prompts you for Open Authorization (OAuth) credentials.
  • Bad password count is incremented when Lync 2013 VDI plug-in pairs with a Lync 2013 client

The download and more detail of the issues referenced can be found here:

 

AudioCodes Mediant Virtual Edition SBC Installation

$
0
0

Note: It has come to my attention that out of the box, the AudioCodes Mediant Virtual Edition comes with two ESBC licenses that will support two concurrent calls and is available as a download from their support site.  This makes it ideal for a Microsoft Lync 2010 or 2013 lab that would mimic a production environment without additional cost.  This article steps you through the basic installation of the SBC.

One of the most recent AudioCodes offerings is the Mediant Virtual Edition.  This software is aimed at firms who have chosen to virtualize their infrastructure as much as possible and strictly need an SBC (no PRI or other TDM modules).  It runs software that is very similar to the physical Mediant series you may be used to running but has the additional resiliency advantages of living on within a virtual environment.  At the time of this writing, the latest maintenance release (we’re in 6.8 right now) does not support transcoding.  This means that if we’re going to send G.711 to Lync, we’re going to need to receive G.711.

Since these SBCs deal with real time communications, much like Lync, you’ll want to follow virtualization best practices.  The documentation from AudioCodes suggests “Each vCPU must correspond to a physical CPU core fully reserved for the SBC VM.”  The supported Hypervisors include VMware ESXi version 5.1 or later and Microsoft Hyper-V Server 2012 R2 or later.  For our purposes today, I’ll be showing you the install from HyperV.  We’ll avoid the virtual machine setup and jump right into the SBC install.

 

 
Low Capacity Specification
High Capacity Specification
Virtual CPU1 virtual CPU4 virtual CPUs
Memory2 GB4 GB
Disk10 GB10 GB
Network Interfaces2 vNICs are recommended, a third can be added for HA configurations2 vNICs are recommended, a third can be added for HA configurations

The software is available as an OVF for VMWare, a prepackaged virtual machine for HyperV, or as an ISO.  I thought it would be the most interesting to walk through the ISO installation today.

Booting the ISO from our HyperV box shows us this boot screen.  I love the colorful ASCII art, it’s rare that I get to see it these days.  The SBC actually runs on a CentOS installation which you’ll see parts of as the installation occurs.  From the boot screen, hit the Enter key.

setup1

You’ll see processes fly by… be patient.

setup2flyby

You’ll then be dropped at a screen that’s going to prompt you to wipe the disk you created, hopefully this isn’t a shock or a big deal.  Navigate to select the Re-initialize box and hit Enter.

step3_reinitiialize_centos

The Linux packages will install, but it doesn’t take long.  It will feel almost instant if you’re used to watching SQL Express instances install for Lync.

step4

Once our SBC installation is complete, make sure to eject your virtual DVD or else we’ll be taken right back to the top screen.  Once ejected, click the Reboot button.

step5reboot_ejectDVD

After a quick boot, up pops our GRUB loader.  Hit enter or let it select it as a default.

Step6

The next screen should be familiar if you’ve ever used a serial cable or the CLI of an AudioCodes Mediant before.  To log in, we’ll use the default user name Admin and password Admin.  Please note that I’ve capitalized the A intentionally as the username and password are both case sensitive.

step7login

Once we’re in, we can dig and look at the default IP address.  To so do, type in “show voip interface network”.  If you want to see what commands are available to you, you can download the CLI Reference Guide or type ?.  Many of the commands you’ll see may be familiar if you’re familiar with the command line interface on popular routers and switches.

step8_configip1

The default IP is 192.168.0.1 with a subnet mask of 255.255.255.0 on the default VLAN.  You can either set another machine up with an IP on this network and connect right away, or change the IP now through the CLI.  To change the IP from the CLI, we’ll need to enter enable mode by typing “enable”.  Now, we need to get into config mode.  Since the network settings are found in the VoIP section of a Mediant, we’ll type “configure voip”.  We’ll switch to our default network interface by typing “interface network-if 0″.  Now we can use the ip-address, prefix-length, and gateway commands to set our IP, subnet, and default route respectively.  This can be seen in the image below.  Once finished, type activate and hit Enter.  You’ll see a note that the configuration won’t take effect until we reset.  To reset, type “exit” to get out of config mode, then type “reload now”.

step11

That’s it for getting it accessible from the network.  In the screenshot below you can see us using the web interface.  If you’re a partner you can use the AudioCodes SBC Wizard to configure it, or set it up from scratch.

step12

Here’s the part I love for the lab: It comes pre-licensed with 2 SBC sessions.  That will allow two concurrent calls through the device without additional purchase or licensing.  You can then connect this to a trunking provider like Intelepeer or FlowRoute for inexpensive calling over the Internet into Lync!

step13b

We’ll stop here because we have our SBC up and running.  The configuration is up to you, though if there’s interest I’ll do a basic walkthrough blog of that as well.  If you’re new to AudioCodes, they have remote implementation services available as well for a no-fear installation.  Please let me know if you have any comments, questions, or corrections and thanks for reading!

Lync and Automatic Off-Hook Dialing

$
0
0

Overview

There are times when you need a phone set up to automatically dial a number when the handset it picked up.  This may be a reception or kiosk phone, or this may be an emergency phone.  If you’re responding to a voice proposal, these emergency phones may have many names, “Point of Emergency”, “SOS”, “Point of Rescue”, “Area of Rescue”.  All they typically do is dial the emergency services number as soon as someone grabs the handset.

Lync Phone Edition does not support this feature at this time.  In the past with Lync it needed to be handled by using an analog phone and IP gateway to perform the off hook dialing.  However, with all the Lync qualified phones out there, it is now easily done and I thought I’d take a moment to write up a post on accomplishing this with a few common models.  For each model, we’ll configure the phone to automatically dial extension 1804 when the handset is picked up with no buttons pressed.  1804 could easily be 911, or 999 or whatever emergency number is in use in your area.

Note: If you’re reading this, and you have a better method, please let me know in the comments or on Twitter at @CAnthonyCaragol

Polycom VVX

There are many ways to provision a Polycom VVX phone, and you may prefer another way than presented, however in many situations these configurations are handled on a one-off basis so I’ve chosen to modify the config file directly from the web interface.   To do so, let’s log into the web interface of our VVX phone.  In the picture below I’m using the UC 5.1.2.1801 firmware with a VVX300, but this works with other versions of the firmware and other VVX phones such as the VVX500.  Navigate to Utilities -> Import & Export Configuration, select Web in the Export Configuration dropdown and click Export.

vvxb

We’ve got two lines we’re going to add, call.autoOffHook.x.enabled and call.autoOffHook.x.contact.  Replace the “x” with the line number (with Lync usually 1) and insert into your downloaded config.  Below is an example of my modified configuration.  The 1804 you see is the number I wish to dial automatically.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Application SIP Amazon 5.1.2.1801 20-Aug-14 14:36 -->
<!-- Created 17-09-2014 17:40 -->
<PHONE_CONFIG>
     <WEB
          call.autoOffHook.1.contact="1804"
          call.autoOffHook.1.enabled="1"
     />
</PHONE_CONFIG>

Save the configuration and import it back into the phone.

vvx2b

Your phone will reboot, and log back in.  Once back up, pick up the handset and it should be dialing.

snom UC edition

With snom, it’s a bit easier.  In this example, I’m running the SIP 8.8.2.21 firmware.  You’ll need to enable “Administrator Mode” to see these settings.  Log into the web interface and navigate to Action URL Settings.  In the “On Offhook:” area, enter https://127.0.0.1/command.htm?number=number_to_dial.  Click Apply.  You should be able to lift the handset and hear it dialing right away.  In our example below, you can see that I’ve replaced number_to_dial with 1804 again.

snom

There are often multiple ways to accomplish the same goal.  Another option with the snom is to go to Advanced -> Behavior and set the Auto Dial to “after 2 sec” and the Preselection Prefix to your number.  Click Apply and you’re good to go!

snom2 snom3

AudioCodes 420HD, 430HD, 440HD

AudioCodes again makes it easy.  In this example, I’m using an AudioCodes 440HD running the UC 2.0.5.6 firmware, however this can also be done with other models as well.  Connect to the web interface and navigate to Voice Over IP -> Dialing.  Set the Activate parameted to Enable to see additional parameters.  No, set the timeout to 0 to have the number dialed immediately (or a short delay if you want to ensure the handset is near the caller’s ear before to remote end answers), and enter the number to dial.  Click the submit button and test!

AudioCodesb

If you have a different or easier method, or find a mistake, please let me know. Thank you for reading!

Lync and DCOM -1007781356 RollbackMoveAway Failures

$
0
0

Problem Overview

Like a few out there, I’ve encountered the dreaded -1007781356 DCOM error recently.  It started when a client notified me that after migrating 8000+ users from one pool to another, that there was a small handful, about 150, that wouldn’t move.  Most users would show the following error: “Distributed Component Object Model (DCOM) operation begin move away failed.” with “RollbackMoveAway failed -1007781356″.

DComNoMove

About 20 of those users we found had a slightly different error, a DCOM -1007200250.  These errors gave a bit of additional detail in the message: “Distributed Component Object Model (DCOM) operation begin move away failed because user was not found in database.” which can be seen below.

UserNotFound

After some additional investigation, other issues were becoming apparent.  There were issues with the Backup Service which showed itself in an error state.

BackupStateError

Further there were LS Backup Service 4073 errors showing “Microsoft Lync Server 2013, Backup Service user store backup module detected items having pool ownership conflict during import.”  The list of users shown include many of those who wouldn’t move.  This confirmed that we were dealing with a pool ownership conflict, where the user partially exists in multiple pool SQL databases.

Pool_Ownership_Conflict

Export-CSUserData was also failing with the error.   “Export-CsUserData : Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.  This failure occured while attempting to connect to the Principle server.”

Initial Solution Attempt

While I wasn’t entirely sure that all of these issues were related, the timeline in which they started manifesting lined up closely.

The first thing I did?  I’m not ashamed to admit that I went for the search engines, no use reinventing the wheel if this is a common problem.  Unfortunately, I didn’t find too much.  There were similar errors with resolutions that didn’t seem to line up as this was only affecting a handful of users.  Further, any approach I take has to be taken with extreme care as this environment has tens of thousands of users.  The blog I encountered with the most helpful information was John Cook’s.

http://johnacook.wordpress.com/2014/05/08/pool-ownership-conflict-moving-users-between-lync-pools/

With an identical error and symptoms, he was able to contact Microsoft PSS who had of a tool that could resolve the issue.  Before we headed down that path, I wanted to see if there were any additional workarounds I could get at for our environment.

Taking a cue from John’s blog, the VerifyUserDataReplication.exe tool from the Lync Resource Kit gave me an output of the identical user set found in the LS Backup Service 4073 errors, and it also lined up nicely with the users who refused to move.

We had a reasonably good backup of user data despite the Export-CSUserData timeouts, and located one of the users who hadn’t logged in for quite some time to use as a guinea pig.  Using our guinea pig account, we were able to move the user with the command:

Move-CsUser -identity <Identity> -Target -<OtherPool> -Force

The -Force is what got us there, it ignores the user data, which in our case was the issue preventing us from moving the account.  After that, we were able to run an Update-CsUserData to merge the contacts back in for this user from our backup.  The remaining users were scheduled for a forceful move and restore that night.

As a side note, it was comforting to see sharp guys out there such as Flinchböt fighting the same issues at the same time and coming up with the same approach.  http://flinchbot.wordpress.com/2014/09/17/moving-immovable-users/

Almost, but Not Quite

The rest of the users moved successfully accomplishing the initial goal.  However, the LS Backup Service 4073 errors and the VerifyUserDataReplication.exe were still reporting the issue.  A sample of the VerifyUserDataReplication.exe can be seen below.

Info: reading batches served by jpprdl3sql1.adms.lyncfix.com\lync13Tokyo from backup pool.
Info: 6247 batches are returned from deprdl3sql1.adms.lyncfix.com\lync13Berlin.
Info: 116161 items are returned from deprdl3sql1.adms.lyncfix.com\lync13Berlin.
Info: reading batches served by jpprdl3sql1.adms.lyncfix.com\lync13Tokyo from source pool.
Info: 6248 batches are returned from jpprdl3sql1.adms.lyncfix.com\lync13Tokyo.
Info: 116366 items are returned from jpprdl3sql1.adms.lyncfix.com\lync13Tokyo.
Info: comparing batches served by jpprdl3sql1.adms.lyncfix.com\lync13Tokyo in source pool and backup pool.
Error: batch bf36c405-0396-429e-bac3-001dd81d17b6 has item 6abec8cb-5857-4cc4-8c44-dd99d9e47206-urn:hcd:theresa.jerd@lyncfix.com whose partial version 3 in source pool is less than or equal to batch’s partial version 4 in backup pool. It cannot find same item in backup pool.
Error: batch bf36c405-0396-429e-bac3-001dd81d17b6 has item 6abec8cb-5857-4cc4-8c44-dd99d9e47206-urn:lcd:theresa.jerd@lyncfix.com whose partial version 3 in source pool is less than or equal to batch’s partial version 4 in backup pool. It cannot find same item in backup pool.

Clearly, the move got us past the initial DCOM error by ignoring the database issue, but it didn’t clean up the offending database records.  The next approach was to completely disable a user and try again.  If we can’t resolve the issue with a forced move, surely removing the user from Lync would do the trick.  We figured we could always recreate the user later if this approach worked.  We went back to our guinea pig account and ran Disable-CsUser.  This command deletes all the attribute information related to Lync Server from an Active Directory user account.

Even with the account “removed” from Lync, the issue still persisted.  The user still showed up in the LS Backup Service 4073 errors and the VerifyUserDataReplication.exe output.  We re-enabled the user and reimported the user data again from our backup.  It makes sense that this approach didn’t work, as it only removes the Active Directory attributes, there is no backend database cleanup.  But if the forced move and the delete doesn’t do it, what will?

Final Answer

The final answer was simple, now that the DCOM error was resolved due to the move-csuser -force command, we could freely move the users back to the old pool, and then move them back again to the final destination.  Success!  Using this method, the pool conflict error was resolved, the username was removed from the event log, and VerifyUserDataReplication output no longer reported the account as an issue.

Moving the previously forced-moved users back to their old pool, then back again to their new home cleaned up the database enough that not only did our events disappear, but export-csuserdata stopped experiencing it’s timeouts and the backup service error state went back into a normal state.  We’re now back to a healthy state.

A Special Thanks

I’d like to extend a special thanks to John A Cook and Flinchböt for sharing their experiences and letting me talk through mine.  Please feel free to reach out to me here or on twitter @CAnthonyCaragol if you’re experiencing issues of your own.

 

 


How Many SIP Domains Does Lync Support?

$
0
0

What happens when we have many domains?

Note: This post is not intended to be a complete walkthrough or listing of all scenarios or workarounds.   It’s intended to be an exploration of some of the boundaries of Lync.  If you have employed a different method please reach out and let me know in the comments or on Twitter at @CAnthonyCaragol

How many SIP domains can you have in Lync?  It sounds like an easy question, there’s no limit.  Of course if it were that easy, you probably wouldn’t have found this article.  Let’s poke around and see if there’s a more practical answer.

Typically, you want your Lync SIP domain to line up with your Exchange email domain.  This is a common best practice due to the tight integration of the products and where our practical limits come in to play.  If you have many email domains this can get difficult or expensive quickly due to the cost of additional SANs in your certificates.

For fun, let’s look at what happens when we add hundreds of SIP domains to our environment and request a certificate from an internal authority.

WayTooManyDomains1

In the picture, you can see the error:

Request-CsCertificate : Command execution failed: Error Parsing Request  The length of the field exceeds the maximum length.  0xc80005e2 (ESE: -1056)

That error is telling us that our certificate request is just too big.  This happens because Windows Certificate Authority has a maximum limit of 4096 characters for the encoded extension.  You can check for yourself by running “certutil -schema ext”.  I know what you’re thinking, I asked too, but you can’t change this limit.

WayTooManyDomains2

We might have better luck requesting this certificate from an external authority, but it’s not likely.  Running down a few companies in the list of approved authorities from the Certificates for Lync Phone Edition TechNet article we find:

These authorities typically have tighter limitations than your internal authority.  There may be some hope, SSL.com seems to have the most at 2000: https://www.ssl.com/certificates/ucc/buy but I have yet to try them out.

What Can We Do About It?

If you’ve hit your practical limit based upon the number of SANs, you’re going to have to reduce the number of SANs.  There are a few ways of accomplishing this that we can look at.

Reduce the number of SIP domains

One option you have is to reduce the number of SIP domains by allowing the email address to not match the SIP address.   If you decide to go this route, know that there will be difficulties.  With this method it will become very difficult for users from other companies to find you for federated chat unless they can discover your Lync address through another method.  You’ll also find some client oddities when it comes to Outlook integration.  For example, you may not see your conversation history saved.   To disable the Lync check that ensures that Outlook and Lync are logged in with the same accounts, run the following command from the Lync management shell:

Set-CsClientPolicy -DisableEmailComparisonCheck $true

There will still be issues, and you should test every feature that’s important to your organization, but this may be an option for you.

Reduce the number of SANs 

Another option is to reduce the number of SANs that are used in the certificates by avoiding the wizard and heading right for PowerShell.  In this case, Request-CsCertificate is your friend.   Running a command similar to the following allows you to control which domains you’ll be adding.  In the example below, sipdomain.com and sipdomain2.com account for 95% of our users.

Request-CsCertificate -New -Type Default,WebServicesInternal -ComputerFqdn “lyncpool.ads.caragol.com” -FriendlyName “My Reduce SAN Certificate” -PrivateKeyExportable $True -DomainName “lyncpool.ads.caragol.com,lyncdiscoverinternal.sipdomain.com,lyncdiscoverinternal.sipdomain2.com,sip.sipdomain.com,sip.sipdomain2.com”

Keep in mind that you can limit the SANs used in simple URLs as well by configuring them to use a single common FQDN.  See Planning for simple URLs in Lync Server 2013 for more information.

For the SIP domains that haven’t been included in the certificate, we can publish lyncdiscover and lyncdiscoverinternal records only over port 80 avoiding HTTPS and we can point our SRV records for the other domains (ex. sipdomain999.com) to a primary sip domain (ex sipdomain.com) as shown:

dns3

There are a few caveats to this method.  It’s important to note that when the user’s SIP address does not match the common name on the certificate, you may see an error as seen below.   The following screenshot is from a device that is trying to log in as user@sipdomain999.com when the certificate matches sipdomain.com.  If you plan on using this method, you should know how to work around it using the TrustModelData registry value.

WayTooManyDomains5

Additionally some Lync phone devices may not want to authenticate at all, so plan accordingly if this is a phone deployment as well.

Use Multiple Pools Each With Different Additional SIP Domains

If you’re willing to use the above approach, where we limit the number of sip domains in the certificate, you can also consider dividing the sip domains into pools and sites.  For example, you could split the domain names across two or more pools, keeping the default sip domain in both.  Using Request-CsCertificate, each pool would be responsible for a handful of domain names.  Users would need to exist in their corresponding pool and DNS records for that SIP domain would need to point directly to that pool.  You may also need multiple reverse proxies and edge pools to accommodate.

So What’s Our Practical Answer?

Well, as you’ve seen, the limits are mostly based around certificates.  Some of these limits are based upon size, and some based upon available SANs.  If you’re going the public certificate route, the limits will depend upon the provider you choose.   There are workarounds for just about everything however, and nothing is going to provide you with a better shot at the right outcome than careful planning.

Any comments based upon your experience?  Please leave them below or find me at @CAnthonyCaragol on twitter to let me know!

 

Lync 2013: How to Customize Conferencing Attendant Prompts

$
0
0

Disclaimer: I am not sure that this is a supported change to Lync 2013.  However, there are times as IT pros when we’re asked to make such changes.  I am documenting my experience here.

Update 10/7/2014: As Richard pointed out in the comments, there is a supported MSI which performs a similar task with three of the audio prompts.  I have modified the title to reflect this. To use your own voice or modify additional prompts, this blog post still applies. I cannot imagine you would run into trouble performing this procedure.  I want to thank Richard specifically for pointing this out and providing a link: http://www.microsoft.com/en-gb/download/details.aspx?id=42560

I have been asked by a larger client of mine to make a production change to their Lync 2013  pools.  They wish to modify the audio that is heard when a call is made into Lync dial-in conference to match the voice that is heard throughout their automated attendants and other prompts.

This was a feature previously supported by OCS 2007 R2 as can be seen in the following link: http://support2.microsoft.com/kb/961177.  Knowing that there’s documentation for OCS 2007 R2, I feel comfortable making the change.  However, I also expect that any time we patch the system, there is a risk that these audio files will be overwritten.  We should be careful to check to see if the files were altered or modified in any way during each patch cycle.

The audio files can be found in the following directories:

  • %Programfiles%\Microsoft Lync Server 2013\Application Host\Applications\Conferencing Attendant\Media\EN-US (or your regional language)
  • %Programfiles%\Microsoft Lync Server 2013\Application Host\Applications\Conferencing Attendant\Media\Music

This client is solely located within the United States, and as such, I was only concerned with the EN-US directory, however this change equally applies to all other languages.

Per the OCS TechNet article referenced above,  I was able to record the files using the following format (or at least close enough):

  • Windows Media Audio (WMA) file format
  • 16-bit mono
  • 48 kbps 2-pass CBR (constant bit rate)
  • Speech level at -24DB

After making a backup of the original files, one server in the pool at a time I replaced the files as noted in the article.  What isn’t mentioned in the article is that with Lync 2013, you will need to restart the “Lync Server Conferencing Attendant” service before the changes take effect.  Once complete, you should be able to call in and verify the audio has been successfully replaced.  You are free to move on to the next pool if you have one.

For your reference, a transcription of all of the US English audio files can be found below.

Filename
Audio Transcription
BWMGMT_CAA_AVMCUFAIL.wmaSorry, all circuits are busy, please try again.
JOIN_AUTH_AUTHFAIL.wmaSorry, that phone number and pin don't match.
JOIN_AUTH_ENTERFULLPH.wmaPlease enter your full phone number starting with the country code.
JOIN_AUTH_ENTERPH.wmaTo identify yourself, please enter your extension or full phone number followed by a #.
JOIN_AUTH_ENTERPIN.wmaPlease enter your pin, and then press #.
JOIN_AUTH_ORGANIZER.wmaIf you scheduled this meeting, please enter your pin now. If you've been designated as a meeting leader, please press * again.
JOIN_AUTH_ORGAUTHFAIL.wmaSorry, the pin that you entered does not match the meeting organizer's pin.
JOIN_AUTH_PINEXPIRED.wmaSorry, your pin has expired. Please wait if you would like to join without being the leader. To reset your pin, you need to click on the link in your email invatation.
JOIN_AUTH_PINLOCKED.wmaSorry, your pin has been locked. Please wait if you would like to join without being the leader. To reset your pin, you need to click the link in your email invitation.
JOIN_AUTH_PINNOTSET.wmaSorry, your pin hasn't been set up yet. Please wait if you would like to join without being the leader. To set up your pin, you need to click on the link in your email invitation.
JOIN_CONFNOTFOUND.wmaSorry, I can't find a meeting with that number. Try entering your conference ID again and then press #.
JOIN_ENTERCONFID.wmaPlease enter a conference ID, and then press #.
JOIN_FAIL_DISCONNECT.wmaSorry, no current meeting matches that information. Please contact the meeting leader for assistance. Goodbye.
JOIN_FAIL_NOTADMITTED.wmaSorry, you cannot be admitted to the meeting at this time. Please contact the meeting leader for assistance. Goodbye.
JOIN_FAIL_TRANSFER.wmaSorry, I can't seem to connect you to your meeting right now. Please try your call again later. Goodbye.
JOIN_FAIL_TRYANONYMOUS.wmaSorry, I cannot retrieve your information at the moment. Please wait while I try to join you to the meeting anonymously.
JOIN_FAIL_VALIDATE.wmaSorry, I'm having trouble accessing the system right now. Please try your call again. Goodbye.
JOIN_HOLDINGPEN_ENTERING.wmaThe leader has not yet joined the meeting. Please wait for the leader to admit you to the meeting. Thank you for your patience.
JOIN_IFLEADERAUTH.wmaIf you’re the leader, please press * now.
JOIN_JOINING_ANONYMOUS.wmaYou are now joining the meeting as an unknown participant.
JOIN_JOINING_GENERAL.wmaYou are now joining the meeting.
JOIN_JOINING_OPERATOR.wma*ring*
JOIN_JOINING_PRESENTER.wmaYou are now joining the meeting as a leader.
JOIN_LANG_PRESS1.wmaTo continue in English, press 1.
JOIN_LANG_PRESS2.wmaFor English, press 2.
JOIN_LANG_PRESS3.wmaFor English, press 3.
JOIN_LANG_PRESS4.wmaFor English, press 4.
JOIN_LANG_PRESS5.wmaFor English, press 5.
JOIN_LOBBY_ENTERING.wmaPlease wait for the leader to admit you to the meeting. Thank you for your patience.
JOIN_LOBBY_TIMEOUT.wmaThe leader has not yet activated the meeting, or the wait time has been exceeded. You can try again later, or you might ask the organizer whether your meeting was cancelled. We apologize for the inconvinience. Goodbye.
JOIN_NEEDSAUTH.wmaThe leader has restricted this meeting's access to identified participants.
JOIN_NEEDSAUTH_LOCKED.wmaThe leader has locked this meeting.
JOIN_NOINPUT.wmaSorry, I didn't get that.
JOIN_PASSCODE_ENTER.wmaPlease enter your passcode and then press #.
JOIN_PASSCODE_INVALID.wmaSorry, I can't find a meeting with that passcode. Try entering your passcode again, and then press #.
JOIN_WAITFORLOBBY.wmaOtherwise, wait on the line for a leader to admit you.
JOIN_WELCOME.wmaWelcome to the audio conferencing center. Please enter a conference ID, followed by #.
RECNAME_RECORDING_REQUEST.wmaAfter the tone, please record your name and then press #. *ding*

 

AudioCodes ShellShock News

$
0
0

I’m posting this quickly for those of you who may not receive the AudioCodes announcements in your email as it is quite important.

The following AudioCodes products include the Bash shell and therefore are affected by the ShellShock exploit.  I have been told that the issue is exposed only after a successful user login.  Changing the credentials from default is considered an effective interim measure.

  • AudioCodes Mediant 8000 and Mediant 5000 Shelf Controllers (SC-2 running Linux)
  • AudioCodes EMS (Element Management System) / SEM (Session Experience Manager)

A patch will be released that addresses this threat for customers running version 6.6 or 6.8 and have a current support agreement.

What I wanted to make clear, is that while many AudioCodes products run Linux on the backend (as can be seen in my AudioCodes Mediant Virtual Edition SBC Installation post), they do not include the Bash shell and therefore are not affected.

So, if you’re running a Mediant 500, 800, 1000, 2600, 2000 or 3000 as we commonly see with Microsoft Lync, or a MediaPack gateway, you’re safe.  :)

The product notice is available on the AudioCodes website, but does require a login: Product Notice #0223 Shellshock Security Threat to AudioCodes Products

 

 

Reminder: Chicago UC Users Group (And LA, Baltimore, Kansas City…)

$
0
0

Just a reminder that the quarterly US Lync Users Groups are coming up.

Jeff Schertz, Director of Content and all around Lync guru, blogs about the event here: http://blog.schertz.name/2014/10/october-2014-lync-users-group/ and it looks like Baltimore and Kansas City groups were added!

I’ll be attending the Chicago group on Wednesday, October 22nd.  If you haven’t ever attended, I HIGHLY recommend going for the great presentations as well as the networking with other individuals excited about Microsoft Lync.  This isn’t some unorganized dry meeting either, it’s put together by some pretty heavy hitters in the Lync world.  Head over to lyncusersgroup.com and find your group on www.meetup.com.  If you’re also headed to the Chicago one, come find me and say hi!

  • October 15th – Los Angeles, CA
  • October 21st – Cincinnati, OH
  • October 21st – Philadelphia, PA
  • October 22nd – Chicago, IL
  • October 28th – Nashville, TN
  • October 28th – Silicon Valley, CA
  • October 30th – Atlanta, GA
  • November 3rd – Seattle, WA
  • November 5th – Boise, ID
  • November 5th – Charlotte, NC
  • November 7th – Portland, OR
  • November 11th – Detroit, MI
  • November 13th – San Francisco, CA
  • November 20th – New York, NY
  • October TBA – Milwaukee, WI

Unboxing the MVP Award

$
0
0

I was awarded the Microsoft MVP award on October 1st, 2014 for Microsoft Lync.  As is customary, I thought I’d write up a post on the why, and because I’m a dork, walk through the unboxing of the physical part of the award so you can see how it arrives and what’s inside.  Part of this write-up is just for myself, as I was curious about this part of it from the moment I was nominated.

What is an MVP?

It’s easiest to cut and paste from Microsoft’s MVP site MVP.Microsoft.com, and I like easy.

“Microsoft Most Valuable Professionals, or MVPs are exceptional community leaders who actively share their high-quality, real-world deep technical expertise with the community and with Microsoft. They are committed to helping others get the most out of their experience with Microsoft products and technologies.

Who nominated you?

I was nominated more than once, but the first nomination came from Georg Thomas, Lync MVP out of New York and all around great guy.  You should check out his blog here: http://www.lynced.com.au/

Why were you nominated?

I believe initially I was noticed due to my TechNet activity.  TechNet is a pastime for me and I love helping people out as much as I can.  You can see my TechNet contributions in the right pane of this blog because I’m proud of that and encourage people to participate there.

What did you do to receive the award?

A lot, but I don’t know for sure what counted and what made the difference.  They don’t tell you that and I’m not sure there’s a formula.  When you’re nominated, you’ll receive a form to fill out where you can build out your profile.  They want to know primarily what contributions you’ve made to the Lync community.  In my case, I suspect it was TechNet activity, blogging, and free tools I’ve made available.  I’ve done some speaking as well and am generally passionate about Lync.  My profile with some of my contributions can be found here: http://mvp.microsoft.com/en-us/mvp/Charles%20Anthony%20Caragol-5001050

When did you receive the award?

They’re awarded quarterly, I received mine on October 1st as I mentioned at the top.   The morning the award is handed out, you will hit refresh on your email a thousand times.  I tried to be cool about it, but I wasn’t.  I really failed at the being cool part.

What do you do now?

Nothing changes, I wasn’t contributing because I wanted the award, I was contributing because I like to contribute and be a part of the community.  What does change a bit is I’m very aware of the MVP stamp next to my name and try to be careful that any advice I give is as accurate as possible, not that I wasn’t before.

What do you get?

I get to be identified as an MVP, which is a huge honor for me.  I also get to attend the 2014 MVP Summit, where I’ll get to meet MVPs from all over.  I’m incredibly excited about that because I’ll get to meet many of my heros and people that I’ve known online forever but never had the chance to meet in person.  I also get a physical award which is shipped in a box like this:

IMG_3227

I’m sort of curious about the people on the front of the box, they must be MVPs right?  I wonder how they feel about being the face of Microsoft’s MVP program.  Open the box and there’s a plaque, a box, a pamphlet, a pin and a card.

IMG_3229

Take it apart, there’s an ID card.  I’m not sure what that’s for just yet.  There’s a lapel pin, which is cool.  A mysterious envelope full of NDA stuff, and the pamphlet welcoming me.

 

IMG_3230

Time to open the big box.  It’s the physical award.

IMG_3231 IMG_3232

There’s a little glass ring that goes on the award, instructions are included.  Please, no jokes about the instructions.

IMG_3236

And here it is assembled.

IMG_3235

Everything in this kit is well designed and engineered, Microsoft spend a lot of time on this and it really makes you feel appreciated.

IMG_3240

Here’s the plaque, mounted.

IMG_3238

And last but not least, stickers!  I’ll have to come up with something creative to do with these.

IMG_3241

Viewing all 91 articles
Browse latest View live