我们正在尝试在Blob存储中保留用户信息。我们可以编写,验证文件是否存在,但是当我们尝试在context
的对话框中访问它时,找不到用户。
在我们的初始连接端点中,检查用户是否存在,如果不存在,我们创建一个:
await storage.write({
[`directline/users/${userId}`]: {
[USER_STATE_PROPERTY]: {
customData: {},
}
}
});
记录在blob存储中。我们拥有的blob存储是这样的:
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 {}
}
}
太糟了。错误缺少跟踪MS附加到每个id的/