#botframework #azure-blob-storage
#botframework #azure-blob-storage
Вопрос:
Мы пытаемся сохранить информацию о пользователе в хранилище больших двоичных объектов. Мы можем записать, проверить, что файл существует нормально, но когда мы пытаемся получить к нему доступ в диалоговом окне от context
пользователя, он не найден.
В нашей начальной конечной точке подключения проверьте, существует ли пользователь, если нет, мы создаем его:
await storage.write({
[`directline/users/${userId}`]: {
[USER_STATE_PROPERTY]: {
customData: {},
}
}
});
Запись находится в хранилище больших двоичных объектов. Хранилище больших двоичных объектов, которое у нас есть, выглядит так:
import {
AutoSaveStateMiddleware,
BotFrameworkAdapter,
UserState,
ConversationState
} from 'botbuilder';
import { log } from './logger';
import { BlobStorage } from 'botbuilder-azure';
import Bot from '../bot';
const storage = new BlobStorage({
containerName: BLOB_CONTAINER_NAME,
storageAccountOrConnectionString: BLOB_CONNECTION_STRING
});
const userState = new UserState(storage);
const conversationState = new ConversationState(storage);
const botInstance = new Bot(conversationState, userState);
const adapter = new BotFrameworkAdapter({
appId: APP_ID,
appPassword: APP_PASSWORD,
});
adapter.use(new AutoSaveStateMiddleware(conversationState, userState));
...
Однако, когда начинается диалог, мы не можем найти текущего пользователя:
class Bot {
private conversationState;
private userState;
private dialogState;
private dialogs;
private userProfile;
constructor(conversationState: ConversationState, userState) {
this.conversationState = conversationState;
this.userState = userState;
this.dialogState = this.conversationState.createProperty(DIALOG_STATE_PROPERTY);
this.userProfile = this.userState.createProperty(USER_STATE_PROPERTY);
this.dialogs = new DialogSet(this.dialogState);
}
public async onTurn(turnContext) {
const { type, membersAdded, recipient } = turnContext.activity;
if (type === ActivityTypes.Message || type === ActivityTypes.Event) {
const user = await this.userProfile.get(turnContext, {});
// user is always {}
}
}
Комментарии:
1. Используете ли вы метод SaveChanges для проверки изменений свойства в кэше состояний, а затем записи этих изменений в хранилище?
Ответ №1:
Так плохо. Ошибка отсутствовал конец /
, который MS добавляет к каждому идентификатору