artymail
@artymail

Как отправлять сообщения в Lync из программы на Delphi?

Всем привет.

Есть ли у кого-нибудь опыт интеграции Delphi и Microsoft Lync? Хотелось бы из своей программки отправлять сообщения (instant message) в Lync.

Есть корпоративный справочник, написанный на Delphi. У каждого сотрудника установлен клиент Lync (у всех разные версии). Хочется прямо из этого справочника отсылать сообщения.

Спасибо за внимание.
  • Вопрос задан
  • 723 просмотра
Решения вопроса 2
Axel_L
@Axel_L
помощник сисадмина
Я бы порекомендовал смотреть в сторону связки Delphi + PowerShell
UPD. Непосредственно по командлетам сервера ссылочка, конкретно по клиенту точно сказать не могу, но вот задача по отправке мгновенного сообщения из PowerShell: link. Приложение Delphi выполняет сценарий PowerShell, результатом которого будет отправка сообщений - Это наверное самый простой способ
Более сложный - это воспользоваться Lync SDK (в первом варианте SDK тоже понадобится)
Ответ написан
artymail
@artymail Автор вопроса
По наводке Александр Лукьянов написал (скопипастил :)) скрипт на PowerShell:
$assemblyPath = “C:\Program Files\Microsoft Lync\SDK\Assemblies\Desktop\Microsoft.Lync.Model.DLL”

Import-Module $assemblyPath
 
$IMType = 1
$PlainText = 0

$cl = [Microsoft.Lync.Model.LyncClient]::GetClient() 
$conv = $cl.ConversationManager.AddConversation()
$gs = $cl.ContactManager.Groups

$i = 0

#search for user in contacts list
$callbackAddContact = [AsyncCallback]{
    param($asyncResult)

    # callback code
    if ($asyncResult.isCompleted)
    {
        $mygroup.EndAddContact($asyncResult)
    }
}  

foreach ($g in $gs)
{
    foreach ($contact in $g)
    {
        if ($contact.GetContactInformation("PrimaryEmailAddress") -eq “email@domain”)
        {
            $i++                   
         
            break
        }
    }

    if ($i -eq 0)
    {
        $g = $gs[0]
        $contact = $cl.ContactManager.GetContactByUri(“email@domain”)
        $g.BeginAddContact($contact,$callbackAddContact,$state)
    }
}

#prepare conversation participant
foreach ($g in $gs)
{
    foreach ($contact in $g)
    {
        if ($contact.GetContactInformation("PrimaryEmailAddress") -eq “email@domain”)
        {
            $i++
       
            $null= $conv.AddParticipant($contact)
         
            break
        }
    }

    if ($i -gt 0) {break}
}
 
#send message
$d = New-Object “System.Collections.Generic.Dictionary[Microsoft.Lync.Model.Conversation.InstantMessageContentType,String]”
$d.Add($PlainText, “текст сообщения”) 
$m = $conv.Modalities[$IMType]

$myCallback = [AsyncCallback]{
    param( $asyncResult)
    
    # callback code
    if ($asyncResult.isCompleted)
    {
        Write-Host "Message Sent"
    }
}

[void]$m.BeginSendMessage($d, $myCallback, $d)


Это первая итерация, еще нужно добавить всяких проверок и прочего. Но этот вариант уже работает. Проверяет есть ли контакт в списке, если нет, то добавляет и отправляет сообщение.

Сам скрипт запускаю из Delphi с помощью ShellExecute.

В качестве источника использовал информацию отсюда
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы