是否可以让Lync与REST API通信?

问题描述 投票:16回答:4

我已经创建了一个基本的REST API,用户可以在其中请求首字母缩略词,并且网页将通过POST调用返回首字母缩略词的含义。

我的大多数最终用户都不像使用Microsoft Lync应用程序那样使用Internet。

我是否可以创建一个Lync帐户,并将问题传递给我的API,并将答案返回给用户? 这意味着用户只需在Lync中打开新聊天而不是新的网页。

我确信这是可能的,但我无法在Google或网络上找到任何信息。 如何实现这一目标?

非常感谢。

编辑:

为了有人创造一个简单的例子而希望增加赏金,因为我相信它对于大量的开发人员来说非常有用:)。

rest post web lync lync-2013
4个回答
5
投票

是的,绝对的。 UCMA(统一通信管理API)将是我在这里使用的API的选择,也是一个好的起点 - UCMA应用程序是“普通”.net应用程序,但也暴露了一个应用程序端点,可以添加到用户的联系人名单。 当用户发送消息时,可以触发应用程序中的事件,以便您可以接收传入的IM,执行首字母缩略词翻译并返回完整的措辞。

我有很多关于UCMA的博客文章,但截至目前尚无定义的“有用”帖子集合,但即将推出! 在此期间,您可以随意浏览列表

-Tom


4
投票

要详细说明Tom Morgan的答案,为此创建一个UCMA应用程序会很容易。

创建UCMA应用程序

现在这不必复杂。 由于您只想接收InstantMessage并回复它,因此您不需要受信任应用程序的全部功能。 我的选择是使用一个简单的UserEndpoint 。 幸运的是,Tom有一个很好的在线示例:使用UCMA UserEndpoint发送IM的最简单示例

让它听取传入的消息

示例应用程序在连接时发送消息,而我们需要收听消息。 在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);
}

处理消息

这里有一点复杂,你的第一条消息可以在新消息参数的“toast”中,或者稍后到达消息流(流程)。

处理Toast消息

toast消息是会话设置的一部分,但它可以为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


0
投票

我从来没有使用过Lync,但是当我看着开发文档时,我偶然发现了一个可能是您正在寻找的样本。

Lync 2013:在发布之前过滤房间消息

一旦过滤了消息,您只需要捕获首字母缩略词并调用调用API的自定义代码。

除非我遗漏了什么,否则我认为你也可以通过简单的GET请求来做到这一点。 只需调用您的API,如yoursite.com/api/acronym/[the_acronym_here]


0
投票

您可以使用UCWA(Microsoft统一通信Web API),是一个REST API。有关详细信息,可以参考如下..

https://ucwa.lync.com/documentation/what-is-lync-ucwa-api

© www.soinside.com 2019 - 2024. All rights reserved.