Обычный способ подойти к этому со следующими компонентами:
- Бот, который подключается к внутренней инфраструктуре Lync в качестве ApplicationEndpoint и управляет диалогами с внешними / внутренними пользователями
- Веб-служба или служба WCF, которая предоставляет методы через http внешним пользователям - это может быть встроено в бот или может быть отдельной службой, которая каким-либо образом связывается с ботом
- Веб-интерфейс для представления присутствия пользователей, позволяющий звонить по клику, инициировать и отображать разговор и т. Д.
Например, служба WCF может предоставлять несколько методов:
GetPresence(targetSipUri)
- возвращает значение присутствия для данного URI
SendIM(targetSipUri, message)
- отправляет IM на указанный Uri
GetReplies()
- опросы для любых ответов
Когда вы углубляетесь в детали, вам может понадобиться больше методов - например, это может быть идея сгенерировать токен разговора и передать его
Веб-интерфейс может представить список контактов со статусом присутствия (GetPresence
), затем позволить пользователю щелкнуть контакт присутствия, чтобы открыть новое окно разговора и отправить исходное сообщение (SendIM
), а затем выполнить опрос служба для любых ответов от контакта (GetReplies
) - обратите внимание, бот должен будет ставить в очередь ответы внутри, пока не будет вызван GetReplies.
Существуют коммерческие продукты, которые могут удовлетворить ваши потребности - быстрый поиск по Lync webchat
должен найти несколько. Также, возможно, стоит заглянуть в Lync Web App , чтобы узнать, работает ли это для вашего клиента
Редактировать: В ответ на комментарий ниже - да, ваши внутренние пользователи увидят беседу от "нашего бота Lync". Если вы не знаете, кто ваши пользователи (например, случайные потенциальные клиенты, просматривающие торговый сайт), вы можете получить от них некоторую информацию (имя, продукт для обсуждения и т. Д.) И попросить бота показать ее внутреннему пользователю, либо как часть чата или в качестве контекста чата, отображаемого в расширении окна беседы.
Если ваши внешние пользователи известны заранее (например, зарегистрированные клиенты), и внутренний пользователь ДОЛЖЕН видеть диалог с ними, то вам нужно будет создать UserEndpoint для каждого разговора - но это будет зависеть от наличия пользователя в нашей эры.