带有Direct line Rest API的Microsoft bot,适用于BOT的新手

时间:2016-05-30 06:14:25

标签: bots

我是微软机器人的新手。 我的公司有自己的通信应用程序,我想将我的机器人与通信应用程序连接,我的客户可以在我的campany的通信应用程序上使用我的机器人。我读到它需要使用Direct Line来做到这一点。但我真的不知道该怎么做。 有人帮帮我吗?还是给我一些建议?或者任何一个例子。 非常感谢你。

1 个答案:

答案 0 :(得分:9)

请参考documentation关于Bot框架的直线方法。

您需要做的是使用https://directline.botframework.com/api/conversations作为您的终端并调用这些API,如文档中所示。

示例: - 我刚尝试使用ASP.MVC应用程序。我创建了一个文本框和按钮,用于向bot提交消息。

  1. 首先在机器人应用程序中启用直接链接。然后记住那个秘密。
  2. 以下代码示例向您展示了如何将聊天应用或公司应用与使用bot框架工作构建的bot连接。

  3. 首先,您需要授权您访问直接链接API。

    client = new HttpClient();
    client.BaseAddress = new Uri("https://directline.botframework.com/api/conversations/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("BotConnector", "[Your Secret Key Here]");
    

    response = await client.GetAsync(" / api / tokens /");

    if(response.IsSuccessStatusCode)

  4. 如果您在之前的回复中取得了成功,则可以开始新的对话 型号 -

    公共课堂对话 {     public string conversationId {get;组; }     public string token {get;组; }     public string eTag {get;组; } }

  5. 控制器内的代码 -

     var conversation = new Conversation();
     response = await client.PostAsJsonAsync("/api/conversations/",conversation);
     if (response.IsSuccessStatusCode)
    

    如果您使用此响应成功,您将获得conversationId和令牌以开始发送消息。

    1. 然后通过以下代码将您的消息传递给bot,

      Conversation ConversationInfo = response.Content.ReadAsAsync(typeof(Conversation))。结果为会话;                 string conversationUrl = ConversationInfo.conversationId +" / messages /&#34 ;;                 消息msg = new Message(){text = message};                 response = await client.PostAsJsonAsync(conversationUrl,msg);                 if(response.IsSuccessStatusCode)

    2. 如果您获得成功回复,则表示您已将消息发送至机器人。现在您需要从BOT

      获取回复消息
      1. 要从bot获取消息,

        response = await client.GetAsync(conversationUrl); if(response.IsSuccessStatusCode){ MessageSet BotMessage = response.Content.ReadAsAsync(typeof(MessageSet))。结果为MessageSet; ViewBag.Messages = BotMessage; IsReplyReceived = true; }

      2. 这里有一个消息集,这意味着你发送的消息和Bot的回复。您现在可以在聊天窗口中显示它。

        消息模型 -

         public class MessageSet
        {
            public Message[] messages { get; set; }
            public string watermark { get; set; }
            public string eTag { get; set; }
        }
        
        public class Message
        {
            public string id { get; set; }
            public string conversationId { get; set; }
            public DateTime created { get; set; }
            public string from { get; set; }
            public string text { get; set; }
            public string channelData { get; set; }
            public string[] images { get; set; }
            public Attachment[] attachments { get; set; }
            public string eTag { get; set; }
        }
        
        public class Attachment
        {
            public string url { get; set; }
            public string contentType { get; set; }
        }
        

        使用这些API调用,您可以轻松地将任何自定义聊天应用程序与bot框架连接起来。以下是一种方法中的完整代码,可让您了解如何归档目标。

         private async Task<bool> PostMessage(string message)
            {
                bool IsReplyReceived = false;
        
                client = new HttpClient();
                client.BaseAddress = new Uri("https://directline.botframework.com/api/conversations/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("BotConnector", "[Your Secret Code Here]");
                response = await client.GetAsync("/api/tokens/");
                if (response.IsSuccessStatusCode)
                {
                    var conversation = new Conversation();
                    response = await client.PostAsJsonAsync("/api/conversations/", conversation);
                    if (response.IsSuccessStatusCode)
                    {
                        Conversation ConversationInfo = response.Content.ReadAsAsync(typeof(Conversation)).Result as Conversation;
                        string conversationUrl = ConversationInfo.conversationId+"/messages/";
                        Message msg = new Message() { text = message };
                        response = await client.PostAsJsonAsync(conversationUrl,msg);
                        if (response.IsSuccessStatusCode)
                        {
                            response = await client.GetAsync(conversationUrl);
                            if (response.IsSuccessStatusCode)
                            {
                                MessageSet BotMessage = response.Content.ReadAsAsync(typeof(MessageSet)).Result as MessageSet;
                                ViewBag.Messages = BotMessage;
                                IsReplyReceived = true;
                            }
                        }
                    }
        
                }
                return IsReplyReceived;
            }
        

        谢谢你干杯。