Я использую веб-чат Bot Framework (на основе React). Я использую «Действия с картами» (карты героев), чтобы предложить список похожих вопросов. Иногда текст в Карте Героя может быть слишком длинным. В этом случае текст усекается и заменяется тремя точками. Возможно ли иметь всплывающую подсказку для Карт Героев?
Я просмотрел варианты HeroCard
в коде, но не нашел ничего подходящего.
Я поднял это на Github: https://github.com/microsoft/BotFramework-WebChat/issues/2032
Любая помощь с этим, пожалуйста?
Веб-чат использует пакет Адаптивные карты NPM для отображения карточек, и, к сожалению, Adaptive Cards не поддерживает добавление описаний всплывающих подсказок к элементам в карточке. Однако на GitHub открыто несколько вопросы, касающихся добавления функций всплывающих подсказок, поэтому мы надеемся, что эта функция скоро будет доступна в веб-чате.
Несмотря на то, что Adaptive Cards не поддерживает добавление всплывающих подсказок, вы можете создать настраиваемое промежуточное ПО для вложений для веб-чата и реализовать собственный модуль визуализации карт героев. Фрагмент кода ниже показывает базовый рендеринг карты героя без каких-либо стилей.
<script type = "text/babel">
const HeroCardAttachment = ({ buttons, images, title, store }) =>
<div className='ac-container'>
<div className='ac-container'>
{ images.map(({ url }, index) =>
<window.React.Fragment key = { index }>
<div>
<img src= { url } />
</div>
<div style = {{height: '8px'}}/>
</window.React.Fragment>
)}
<div>{ title }</div>
</div>
<div />
<div >
{ buttons.map(({ title, type, value }, index) => (
<window.React.Fragment key = { index }>
<button
aria-label = { title }
type='button'
title = { title }
onClick = { () => {
switch (type) {
case 'openUrl':
window.open(value)
break;
case 'postBack':
store.dispatch({
type: 'WEB_CHAT/SEND_POST_BACK',
payload: { value }
});
break;
default:
store.dispatch({
type: 'WEB_CHAT/SEND_MESSAGE_BACK',
payload: { value, text: value, displayText: value }
});
}
}}
>
<div title = { title }>
{ title }
</div>
</button>
<div />
</window.React.Fragment>
))}
</div>
</div>;
(async function () {
const res = await fetch('/directline/token', { method: 'POST' });
const { token } = await res.json();
const { createStore, ReactWebChat } = window.WebChat;
const store = createStore();
const attachmentMiddleware = () => next => card => {
switch (card.attachment.contentType) {
case 'application/vnd.microsoft.card.hero':
return <HeroCardAttachment {...card.attachment.content} store = { store }/>;
default:
return next(card);
}
};
window.ReactDOM.render(
<ReactWebChat
attachmentMiddleware = { attachmentMiddleware }
directLine = { window.WebChat.createDirectLine({ token }) }
store = { store }
/>,
document.getElementById('webchat')
);
store.dispatch({
type: 'WEB_CHAT/SET_SEND_BOX',
payload: { text: 'sample:github-repository' }
});
document.querySelector('#webchat > *').focus();
})().catch(err => console.error(err));
</script>
Дополнительные сведения о промежуточном программном обеспечении для вложений см. в этом образец.
Надеюсь это поможет.
Надеюсь, у тебя получилось. Если вы считаете, что моего ответа было достаточно, пожалуйста, «примите» его, чтобы я мог удалить этот тикет из моего трекера поддержки. Если нет, дайте мне знать, как еще я могу помочь!