我想调用我的BOT框架Directline,它具有附加的标头属性以及直接行的秘密。如何在我的BOT框架代码中提取它,并将其放在IBOTStore中供将来使用。我想知道是否可以在意图级别中读取header属性?
这里是解析alexa请求的示例代码:
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
{...............}感谢您的提前支持!!
发布于 2018-09-05 17:26:37
正如@Fei所述,自定义标头被剥离,无法到达应用程序,因此这不是发送信息的好方法。
在活动上发送自定义数据的一个好方法是通过通道数据。对于非直接线路频道,有一个关于如何做这里的教程.幸运的是,对于Direct,对于channelData属性上的数据没有预先格式化的模式,您需要将JSON保存在其中,因此您可以从本质上形成您想要的数据。
发布于 2018-08-31 05:51:50
我想调用我的BOT框架Directline,它具有附加的标头属性以及直接行的秘密。如何在我的BOT框架代码中提取它,并将其放在IBOTStore中供将来使用。
根据我的测试,我们在Direct请求中指定的其他自定义标头将被删除,bot应用程序将不会接收自定义标头。
如果您想传递一些有用的信息并将其保存在Bot数据存储中,那么您就可以在LUIS对话框或bot应用程序中的其他代码逻辑中检索它。您可以尝试通过Direct发送event活动,在请求正文中指定有用的信息,然后在bot应用程序中从该event活动中提取数据,并将数据存储在UserData或ConversationData等。
https://stackoverflow.com/questions/52105266
复制相似问题