首页 文章

Bot可以处理Skype桌面应用程序的请求,但不能处理Skype商店应用程序的请求

提问于
浏览
3

我使用MS bot框架编写了一个小型聊天机器人 . 我添加了Skype和Web Channels ,并使用最小的即用即付计划在Azure上托管机器人 . 当我使用Skype桌面应用程序时,机器人本身在网络聊天和Skype对话中都能很好地工作,无论是直接(1on1聊天)还是小组 .

不幸的是,当使用从Microsoft商店安装的Skype应用程序时,没有任何工作了......向机器人发送消息(直接聊天和组)总是从我的机器人产生HTTP 500响应 . 挖掘它有点重新抛出一个简单的NullReferenceException被抛出,显然是在我的对话框处理程序的第一行(见下文):调用堆栈指向这一行,但错误发生在后面,见下文:

namespace MyBot.Dialogs {
    [Serializable]
    public class RootDialog: IDialog<IMessageActivity> {
        public Task StartAsync(IDialogContext context) {
            context.Wait(MessageReceivedAsync);
            return Task.CompletedTask;
        }

        private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result) {
            // call stack pointed to next line
            Activity activity = await result as Activity;

            //... some unproblematic stuff

            string username = activity.From.Name;
            // the next line was the actual problem:
            if(username.Contains(" "))
                //...
        }
    }
}

代码的这一部分,以及完整的MessagesController都是在不改变机器人框架示例的情况下进行的,如前所述,僵尸程序在网络聊天和“常规”Skype桌面应用程序中运行良好 . 即使在与桌面应用程序上的某些用户和商店应用程序上的某些用户进行群聊时,具有桌面应用程序的用户也可以按预期与机器人交互,而商店应用程序用户仅触发错误 .

这里显而易见的问题当然是:两个Skype应用程序如何(以及为什么)与僵尸程序不同,我该如何处理?

编辑:事实证明,Skype桌面应用程序将activity.From.Name属性设置为用户的名称,而Skype商店应用程序则不会 . 平均部分是,两者的channelid是相同的(显然是"skype") .

1 回答

  • 1

    感谢@EricDahlvang的评论,我注意到错误不是上面提到的那条线,尽管调用堆栈专门给出了这个行号 . 当我尝试使用“activity.From.Name”时,错误发生了 . 事实证明,常规Skype设置此属性以匹配用户显示名称,而Skype商店应用程序不会,并返回null .

相关问题