我是微软机器人的新手。 我的公司有自己的通信应用程序,我想将我的机器人与通信应用程序连接,我的客户可以在我的campany的通信应用程序上使用我的机器人。我读到它需要使用Direct Line来做到这一点。但我真的不知道该怎么做。 有人帮帮我吗?还是给我一些建议?或者任何一个例子。 非常感谢你。
答案 0 :(得分:9)
请参考documentation关于Bot框架的直线方法。
您需要做的是使用https://directline.botframework.com/api/conversations作为您的终端并调用这些API,如文档中所示。
示例: - 我刚尝试使用ASP.MVC应用程序。我创建了一个文本框和按钮,用于向bot提交消息。
以下代码示例向您展示了如何将聊天应用或公司应用与使用bot框架工作构建的bot连接。
首先,您需要授权您访问直接链接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)
如果您在之前的回复中取得了成功,则可以开始新的对话 型号 -
公共课堂对话 { public string conversationId {get;组; } public string token {get;组; } public string eTag {get;组; } }
控制器内的代码 -
var conversation = new Conversation();
response = await client.PostAsJsonAsync("/api/conversations/",conversation);
if (response.IsSuccessStatusCode)
如果您使用此响应成功,您将获得conversationId和令牌以开始发送消息。
然后通过以下代码将您的消息传递给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)
如果您获得成功回复,则表示您已将消息发送至机器人。现在您需要从BOT
获取回复消息要从bot获取消息,
response = await client.GetAsync(conversationUrl); if(response.IsSuccessStatusCode){ MessageSet BotMessage = response.Content.ReadAsAsync(typeof(MessageSet))。结果为MessageSet; ViewBag.Messages = BotMessage; IsReplyReceived = true; }
这里有一个消息集,这意味着你发送的消息和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;
}
谢谢你干杯。