Я пытаюсь отобразить историю чата пользователя с моим ботом, чтобы, когда они вернутся, они могли видеть свои предыдущие разговоры. Когда я пытаюсь использовать функцию " SendConversationHistory (chatId, transcripts) ", я получаю Bad Request (400) , и история не отображается в чат-боте. Кто-нибудь знает, как это исправить?
Я использую BotFramework SDK v.3 в C #.
Что я делаю:
1. Проверка наличия какого-либо идентификатора разговора для повторного подключения с использованием этого идентификатора разговора.
2. Я отправляю событие в бот, чтобы восстановить историю
3. Я могу выбрать предыдущие действия и создать стенограмму
После установки моей расшифровки я попробовал эту функцию SendConversationHistory, которая не работает.
Я могу общаться с ботом, даже если это не удается, используя старый идентификатор разговора. Я также попытался заставить бот сделать ReplyToActivity, и это работает.
Я слежу за примером js (v4) , этот вопрос о стековом потоке и этой теме об истории в github , но ни одна из них не помогла решить эту проблему выпуск.
MessageController.cs (в HandleSystemMessage)
else if (message.Name.Equals("restoreHistory"))
{
string convId = message.Conversation.Id;
List<Activity> activities = JsonConvert.DeserializeObject<List<Activity>>((string)message.Value);
var incrementId = 0;
if (message.Id.Contains("|"))
int.TryParse(message.Id.Split('|')[1], out incrementId);
foreach(var a in activities)
{
incrementId++;
a.Id = string.Concat(convId, "|", incrementId.ToString().PadLeft(7, '0'));
a.ChannelData = string.Empty;
}
if (activities != null && activities.Count > 0)
{
var connector = new ConnectorClient(new System.Uri(message.ServiceUrl));
var transcripts = new Transcript(activities);
connector.Conversations.SendConversationHistory(convId, transcripts);
}
}
default.htm
var botConnection = new BotChat.DirectLine({
secret: ...,
conversationId: getPersistedConversationId(),
token: params['t'],
domain: params['domain'],
webSocket: params['webSocket'] && params['webSocket'] === "true"
});
BotChat.App({
botConnection: botConnection,
user: { id: ... },
bot: { id: ... },
speechOptions: speechOptions
}, document.getElementById("BotChatGoesHere"));
botConnection.connectionStatus$
.subscribe(function (connectionStatus) {
switch (connectionStatus) {
case 2:
if (botConnection.conversationId === localStorage.getItem('conversationId')) {
botConnection.postActivity({
from: user,
type: 'event',
name: 'restoreHistory',
text: '',
value: localStorage.getItem('conversations')
}).subscribe(function (activityId) {
console.log('sending chat history.');
});
} else {
saveConversationId(botConnection.conversationId);
}
}
});
function saveConversationId(conversationId) {
localStorage.setItem('conversationId', conversationId);
}
function getPersistedConversationId() {
return localStorage.getItem('conversationId');
}
Я получаю следующие ошибки:
Exception thrown: 'Microsoft.Rest.TransientFaultHandling.HttpRequestWithStatusException' in Microsoft.Rest.ClientRuntime.dll
Response status code indicates server error: 400 (BadRequest).
Деятельность 'Json
[
{
"type":"message",
"id":"6Tklwkie30H7oCI1eyWx9i-h|0000001",
"timestamp":"2019-06-19T10:37:40.1175096Z",
"channelId":"directline",
"from":{
"id":"MyBotName",
"name":"MyBotName"
},
"conversation":{
"id":"6Tklwkie30H7oCI1eyWx9i-h"
},
"text":"Hello, I'm MyBotName. How can I help you? To get started ask me a question.",
"attachments":[
],
"entities":[
],
"replyToId":"7E6AtBm9iXL"
},
{
"type":"message",
"id":"6Tklwkie30H7oCI1eyWx9i-h|0000003",
"timestamp":"2019-06-19T10:37:43.4034223Z",
"localTimestamp":"2019-06-19T10:37:43.2484146+00:00",
"channelId":"directline",
"from":{
"id":"MyBotName",
"name":"MyBotName"
},
"conversation":{
"id":"6Tklwkie30H7oCI1eyWx9i-h"
},
"attachmentLayout":"carousel",
"locale":"en-US",
"text":"",
"attachments":[
{
"contentType":"application/vnd.microsoft.card.hero",
"content":{
"title":"Title1",
"subtitle":"",
"text":"",
"images":[
{
"url":"http://..."
}
],
"buttons":[
{
"type":"openUrl",
"title":"Button1",
"value":"https://..."
},
{
"type":"openUrl",
"title":"Button2",
"value":"https://..."
}
]
}
},
{
"contentType":"application/vnd.microsoft.card.hero",
"content":{
"title":"Title2",
"subtitle":"",
"text":"",
"images":[
{
"url":"http://..."
}
],
"buttons":[
{
"type":"openUrl",
"title":"Button1",
"value":"https://..."
},
{
"type":"openUrl",
"title":"Button2",
"value":"https://..."
}
]
}
},
{
"contentType":"application/vnd.microsoft.card.hero",
"content":{
"title":"Title3",
"subtitle":"",
"text":"",
"images":[
{
"url":"http://..."
}
],
"buttons":[
{
"type":"openUrl",
"title":"Button1",
"value":"https://..."
},
{
"type":"openUrl",
"title":"Button2",
"value":"https://..."
}
]
}
}
],
"entities":[
],
"replyToId":"6Tklwkie30H7oCI1eyWx9i-h|0000000"
},
{
"type":"message",
"id":"6Tklwkie30H7oCI1eyWx9i-h|0000000",
"timestamp":"2019-06-19T10:37:33.8526334Z",
"serviceUrl":"https://directline.botframework.com/",
"channelId":"directline",
"from":{
"id":"anonymous",
"name":"Anonymous"
},
"conversation":{
"id":"6Tklwkie30H7oCI1eyWx9i-h"
},
"recipient":{
"id":"MyBotName@WI6mwV4z0jY",
"name":"MyBotName"
},
"textFormat":"plain",
"locale":"en-US",
"text":"i'm looking for this",
"entities":[
{
"type":"ClientCapabilities",
"requiresBotState":true,
"supportsTts":true,
"supportsListening":true
}
],
"channelData":{
"clientActivityId":"1560940638882.6146258363791712.0"
}
}
]