您如何检测 MS Bot Framework 正在响应哪个消息传递平台?

How do you detect which messaging platform MS Bot Framework is responding to?

我希望能够根据用户使用的是 Slack 还是 Facebook Messenger 还是 SMS 向他们提供略有不同的响应,但我不确定如何检测哪个消息传递平台是用户当前在线。

这有可能吗?我似乎无法在文档中找到这方面的任何示例。

我在研究一些示例代码时找到了自己问题的答案:

var isSkypeMessage = function (message) {
  return message.source === 'skype';
}; 

您可以在 session.message.source.

上获取消息的来源平台

该值将是以下值之一(取自 Channel.js source code):

exports.channels = {
  facebook: 'facebook',
  skype: 'skype',
  telegram: 'telegram',
  kik: 'kik',
  email: 'email',
  slack: 'slack',
  groupme: 'groupme',
  sms: 'sms',
  emulator: 'emulator',
  directline: 'directline',
  console: 'console'
};

这绝对是可能的 - 请参阅以下示例以了解如何在 C# 中执行此操作:

private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
    {

        var activity = await result as Activity;
        string msg = activity.Text;

        //setting ChannelID
        string channelID = activity.ChannelId;
        switch (channelID)
        {
            case "skype":
            case "emulator":
            default:
                break;
        }
}

文档在这里:https://docs.microsoft.com/en-us/bot-framework/resources-identifiers-guide#channel-id

.channelID 属性 的大部分结果都非常明显,"slack"、"kik" 等,但如果匹配未命中,则只需调试和看看是什么returns :)