Чтобы уточнить ответ Тома Моргана, было бы легко создать для этого приложение UCMA.
Создайте приложение UCMA
Теперь это не должно быть сложным. Поскольку все, что вам нужно, это получить InstantMessage и ответить на него, вам не нужны все возможности надежного приложения. Мой выбор состоял бы в том, чтобы использовать простой UserEndpoint
. Как назло, у Тома есть хороший пример в Интернете: Простейший пример использования UCMA UserEndpoint для отправки мгновенного сообщения. а>.
Заставьте его слушать входящие сообщения
В то время как пример приложения отправляет сообщение при подключении, нам нужно прослушивать сообщения. На UserEndpoint
установите обработчик сообщений для мгновенных сообщений:
endpoint.RegisterForIncomingCall<InstantMessagingCall>(HandleInstantMessagingCall);
private void HandleInstantMessagingCall(object sender, CallReceivedEventArgs<InstantMessagingCall> e)
{
// We need the flow to be able to send/receive messages.
e.Call.InstantMessagingFlowConfigurationRequested += HandleInstantMessagingFlowConfigurationRequested;
// And the message should be accepted.
e.Call.BeginAccept(ar => {
e.Call.EndAccept(ar);
// Grab and handle the toast message here.
}, null);
}
Обработать сообщение
Здесь есть небольшая сложность: ваше первое сообщение может быть в «уведомлении» аргумента нового сообщения или появиться позже в потоке сообщений (потоке).
Работа с всплывающим сообщением
Всплывающее сообщение является частью настройки беседы, но оно может быть нулевым или не являться текстовым сообщением.
if (e.ToastMessage != null && e.ToastMessage.HasTextMessage)
{
var message = e.ToastMessage.Message;
// Here message is whatever initial text the
// other party send you.
// Send it to your Acronym webservice and
// respond on the message flow, see the flow
// handler below.
}
Работа с потоком
Ваш поток сообщений — это место, где передаются фактические данные. Получите дескриптор потока и сохраните его, потому что он понадобится позже для отправки сообщений.
private void HandleHandleInstantMessagingFlowConfigurationRequested(object sender, InstantMessagingFlowConfigurationRequestedEventArgs e)
{
// Grab your flow here, and store it somewhere.
var flow = e.Flow;
// Handle incoming messages
flow.MessageReceived += HandleMessageReceived;
}
И создайте обработчик сообщений для обработки входящих сообщений:
private void HandleMessageReceived(object sender, InstantMessageReceivedEventArgs e)
{
if (e.HasTextBody)
{
var message = e.TextBody;
// Send it to your Acronym webservice and respond
// on the message flow.
flow.BeginSendInstantMessage(
"Your response",
ar => { flow.EndSendInstantMessage(ar); },
null);
}
}
Это примерно подытожило бы самый простой пример отправки/получения сообщений. Дайте мне знать, если какие-либо части этого нуждаются в дополнительных разъяснениях, я могу добавить к ответу, где это необходимо.
Я создал Gist с полным решением. К сожалению, это не проверено, потому что я в настоящее время не рядом со средой разработки Lync. См. UCMA UserEndpoint replying to IM Example.cs
.
person
Willem
schedule
21.04.2015