Using Lync Client SDK to Automate Call Testing
A while ago I did a blog post and it leverage the Lync Client SDK to do call testing but it was dependant on the users being in your contact list. This is ok to a degree but what if you needed to just provide an input list of sip uri’s that you needed to query.
So I updated it :)
The main 2 changes are I put it into a function and I used a sub-method that is under the $client.contactmanager called GetContactByURI. this method requires a single line of text to search for and it can return the contact object that we need to add to an IM or a call etc.. the $client btw is the instance of the lync client that is running.
refer to the previous post for most of the explanation but I have tried to comment the code out pretty well.
<#
.SYNOPSIS
Runs an automated script to send a user an IM message, followed by a phone call. If the user picks up it puts the call on hold, plays a recorded file and hangs up
.DESCRIPTION
Create a file called inputfile.txt and enter each sipuri line by line, this script will test each user and generate a report at the end of it
.PARAMETER Inputfile
.EXAMPLE
.\LyncAutomatedTest.ps1 -inputfile inputfile.txt
#>
[CmdletBinding()]
param([Parameter(Mandatory=$true)][ValidateScript({Test-Path $_})][string]$inputfile)
function TestSIPURI($sipuri,$client)
{
write-verbose "Testing For $sipuri has begun"
$conversation = $client.ConversationManager.AddConversation()
$contact = $client.ContactManager.GetContactByUri($sipuri)
$null= $conversation.AddParticipant($contact)
#First Send an Instant Message so we need the InstantMessage Modality
$IMType = 1
$PlainText = 0
$data = New-Object "System.Collections.Generic.Dictionary[Microsoft.Lync.Model.Conversation.InstantMessageContentType,String]"
$data.Add($PlainText, "This is an Automated Test... The Lync System Has Been Patched. Your desktop phone will be rung shortly to check its operation, The call will connect be put on hold where you will here some music and then end please wait until it completes")
#This sets the modality type
$message = $conversation.Modalities[$IMType]
write-host "Sending Status IM"
$null = $message.BeginSendMessage($data, $null, $data)
#Sleeping to allow the instant message to go through
sleep 20
#for audio call changing the modality tpype
$ModalityType = 2
$message = $conversation.Modalities[$ModalityType]
write-host "Making Phone Call"
$null = $message.BeginConnect($null,$null)
sleep 20
if ($message.state -eq "Connected")
{
$usercontact = $contact.uri.split(":")[1]
write-host "Successfully Connected Voice Call to:`t $usercontact"
#Idea to playback a WMA file which says the system is testing itself
sleep 10
write-host "Switching Call to OnHold For Playback Music"
$message.BeginHold($null,$null)
}
else
{
$usercontact = $contact.uri.split(":")[1]
write-host "Could Not Connect a Voice Call to:`t $usercontact"
}
sleep 10
write-host "Ending Call"
#end the call
$message.Conversation.End()
}
#########################################Main Script Code#########################################
cls
write-host "##################################################################"
write-host "# Welcome to the Automated Test Call Script #"
write-host "# We will begin the sequence now #"
write-host "##################################################################"
write-verbose "check if the module is loaded"
$module = get-module -Name "Microsoft.Lync.Model"
#if module is not loaded check it exists and then load else exit
if ($module -eq 0)
{
Write-Verbose "checking is assemblies are installed and at the correct path"
$assemblyPath = "C:\Program Files (x86)\Microsoft Office 2013\LyncSDK\Assemblies\Desktop\Microsoft.Lync.Model.dll"
$assemblyexist = test-path $assemblyPath
if ($assemblyPath -eq $false)
{
cls
Write-Error -Message "Lync SDK Not Detected Please Download it From https://www.microsoft.com/en-IE/download/details.aspx?id=36824"
exit 0
}
Write-Verbose "importing assembly"
Import-Module $assemblyPath
}
#use [Microsoft.Lync.Model.ContactInformationType]:: Value here to get the contacttype field you want to use
#50 stands for SIP URI
$contacttype = 50
#Get the client instance we are working with this is the current process lync is operating under
$client = [Microsoft.Lync.Model.LyncClient]::GetClient()
#we start to build a conversation here in an inactive state and we can add stuff to it
Write-Verbose "getting users from $inputfile"
$users = get-content $inputfile
write-host "Processing Users please be patient..."
foreach ($User in $users)
{
Write-host "Processing $User"
$result = TestSipURI $user $client
}
write-host "Finished"
write-host "Please check $reportfile for all results"
Comments
- Anonymous
May 31, 2014
Pingback from Weekly IT Newsletter – May 26-30, 2014 | Just a Lync Guy - Anonymous
May 31, 2014
Pingback from Weekly IT Newsletter – May 26-30, 2014 | Just a Lync Guy - Anonymous
May 31, 2014
Pingback from NeWay Technologies – Weekly Newsletter #97 – May 29, 2014 | NeWay - Anonymous
May 31, 2014
Pingback from NeWay Technologies – Weekly Newsletter #97 – May 30, 2014 | NeWay