我想将我的BOT框架Directline API与其他标题属性以及直接线密码一起调用。如何在我的BOT框架代码中提取它并将其放在IBOTStore中以备将来使用。我想知道我是否可以在意图级别读取头属性?
这是我解析alexa API请求的示例代码:
var directLineSecret = ConfigurationManager.AppSettings["directlinesecret"];
_client = new DirectlineClient(directLineSecret, "alexa" + Guid.NewGuid().ToString().Replace("-", ""));
var client = new HttpClient
{
BaseAddress = new Uri("https://directline.botframework.com")
};
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("BotConnector", _secret);
client.DefaultRequestHeaders.Add("ETag", "*");
client.DefaultRequestHeaders.Add("channel", _from);
var response =
await client.GetAsync("/api/tokens/", HttpCompletionOption.ResponseHeadersRead)
.ConfigureAwait(false);
response.EnsureSuccessStatusCode();
response =
await client.PostAsJsonAsync("/api/conversations/", new object())
.ConfigureAwait(false);
response.EnsureSuccessStatusCode();
var conversationInfo =
await response.Content.ReadAsAsync<JObject>()
.ConfigureAwait(false);
_conversationId = (string)conversationInfo["conversationId"];
var scopedToken = (string)conversationInfo["token"];
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("BotConnector", scopedToken);
BOT框架
public async Task None(IDialogContext context, LuisResult result)
{
try
{...............}
感谢您的预支!
正如@Fei Han所说,自定义标题被剥离并且没有到达应用程序,因此这不是发送信息的好方法。
在活动上发送自定义数据的好方法是通过渠道数据。对于非Direct Line频道,有一个关于如何做here的教程。幸运的是,对于Direct Line,没有预先格式化的channelData属性上的数据,您需要保留JSON,因此您可以根据需要实际构建数据。
我想将我的BOT框架Directline API与其他标题属性以及直接线密码一起调用。如何在我的BOT框架代码中提取它并将其放在IBOTStore中以备将来使用。
根据我的测试,我们在Direct Line API请求中指定的其他自定义标头将被剥离,bot应用程序将不会收到自定义标头。
如果您想传递一些有用的信息并将其保存在Bot数据存储中,以便您可以在机器人应用程序中的LUIS对话框或其他代码逻辑中检索它。您可以尝试通过Direct Line API发送event
活动,在请求正文中指定有用信息,然后在您的bot应用程序中,您可以从event
活动中提取数据并将数据存储在UserData
或ConversationData
等