【问题标题】:Get channel data about user at Microsoft Bot Framework在 Microsoft Bot Framework 中获取有关用户的频道数据
【发布时间】:2018-06-21 22:44:02
【问题描述】:

我在 C# 上的 Microsoft Bot Framework 上制作了一个机器人。我正在尝试获取发送到我的机器人的电报数据。当我直接使用 Telegram bot API 时,我可以看到有关用户的数据,例如:

{
  "update_id": 1111111,
  "message": {
    "message_id": 111111,
    "from": {
      "id": 1111111,
      "is_bot": "False",
      "first_name": "John",
      "last_name": "Dillon",
      "language_code": "en-EN"
    },
    "chat": {
      "id": 111111111,
      "first_name": "John",
      "last_name": "Dillon",
      "type": "private"
    },
    "date": 1111111,
    "text": "Hello"
  }
}

我从这个 json 中获取 first_name,然后我的机器人发送如下消息:

- Whould you like to use John as the name?

我需要在 Microsoft Bot Framework 上做同样的事情,最好在所有可能的渠道上做。我在documentation 中找到了有关状态数据的信息,但没有关于我的问题。他们建议我询问用户名。

【问题讨论】:

    标签: c# bots botframework


    【解决方案1】:

    尝试使用channelData.from.first_name。请注意,只有当用户在 Telegram 的个人资料中实际设置了他们的名字时,这才有效。这是一个工作示例。

        var message = await result as Activity;
        string data = message.ChannelData.ToString();
        TelegramData myClass = JsonConvert.DeserializeObject<TelegramData>(data);
        var fname = myClass.message.from.first_name;
    

    使用编辑创建这些类>特殊粘贴>将 JSON 粘贴为类:

    public class TelegramData
    {
        public int update_id { get; set; }
        public Message message { get; set; }
    }
    
    public class Message
    {
        public int message_id { get; set; }
        public From from { get; set; }
        public Chat chat { get; set; }
        public int date { get; set; }
        public string text { get; set; }
    }
    
    public class From
    {
        public int id { get; set; }
        public bool is_bot { get; set; }
        public string first_name { get; set; }
        public string last_name { get; set; }
        public string username { get; set; }
        public string language_code { get; set; }
    }
    
    public class Chat
    {
        public int id { get; set; }
        public string first_name { get; set; }
        public string last_name { get; set; }
        public string username { get; set; }
        public string type { get; set; }
    }
    

    【讨论】:

    • "channelData" 在当前上下文中不存在
    • 你想从哪里访问这个?在消息控制器中?
    • 不,不在消息控制器中,我试图在对话框中访问(IDialog)。
    猜你喜欢
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2018-03-17
    • 2023-04-08
    • 2020-07-18
    • 2018-08-31
    相关资源
    最近更新 更多