我目前正在使用 NPM 包 BotFramework-WebChat 和 Typescript 开发聊天机器人。后端托管在 Azure 上。我遇到过一个场景,我想为 WebChat 中的每条消息实现反应按钮(如竖起大拇指、竖起大拇指等)。目标是允许用户将反应发送回机器人,类似于 Microsoft Teams 中的操作方式。 在探索 BotFramework-WebChat GitHub 文档和示例时,我发现了一个示例,表明这是可能的。然而,我面临着一些挑战:
根据文档,应该可以创建这样的函数:
const postActivity = usePostActivity();
const handleUpvoteButton = useCallback(() => {
postActivity({
type: 'messageReaction',
reactionsAdded: [{ activityID, helpful: 1 }],
});
}, [activityID, postActivity]);
但是我遇到了这些类型错误:
Type '"messageReaction"' is not assignable to type '"event" | "conversationUpdate" | "invoke" | "message" | "typing"'
'reactionsAdded' does not exist in type 'WebChatActivity'
我的问题是:
不幸的是,我无法重现您在测试代码时收到的确切错误。但是,您的
handleUpvoteButton
实现与示例代码不一致。应该这样设置:
const addMessageReaction = helpful => {
postActivity( {
type: 'messageReaction',
reactionsAdded: [ { type: helpful === 1 ? 'ThumbsUp' : 'ThumbsDown' } ],
replyToId: activityID,
} );
};
const handleUpvoteButton = useCallback( () => {
addMessageReaction( 1 );
}, [ activityID, postActivity ] );
或者,如果您不想将
addMessageReaction
的代码外推到其自己的函数中,那么代码应如下所示:
const handleUpvoteButton = useCallback( () => {
(helpful => {
postActivity( {
type: 'messageReaction',
reactionsAdded: [ { type: helpful === 1 ? 'ThumbsUp' : 'ThumbsDown' } ],
replyToId: activityID,
} );
})()
}, [ activityID, postActivity ] );
这个实现对我有用,所以尝试一下,看看它是否适合你。