Для веб-чата MS Botframework: есть ли способ перехватить сообщение пользователя перед его отображением в веб-чате и изменить его?
Можете ли вы отобразить сообщение пользователя до того, как оно появится в веб-чате?
Ответы (1)
Это легко сделать с помощью метода createStore()
.
В скрипте веб-чата, расположенном на вашей странице, создайте магазин, используя описанный выше метод. В нем сопоставьте action.type
с "WEB_CHAT / SEND_MESSAGE". Это будет фиксировать каждое сообщение, которое передается через компонент веб-чата, прежде чем оно будет отображено.
Имейте в виду, что этот измененный текст (или любое другое значение, которое вы меняете) отправляется боту. action
- корневой объект. action.payload
, по сути, представляет собой деятельность. Здесь вы найдете текстовое значение и т. Д.
В операторе if
выполните все необходимые изменения, а затем верните объект action
.
Наконец, включите объект store
в компонент renderWebChat
. Это должно вас настроить.
В приведенном ниже примере я добавляю текст в текстовое поле, изменяя его перед визуализацией и отображением.
<script>
( async function () {
const res = await fetch( 'http://somesite/directline/token', { method: 'POST' } );
const { token } = await res.json();
// We are using a customized store to add hooks to connect event
const store = window.WebChat.createStore( {}, ( { dispatch } ) => next => action => {
if ( action.type === 'WEB_CHAT/SEND_MESSAGE' ) {
action.payload.text = action.payload.text + ' (Hello from behind the curtain)'
}
return next( action );
} );
window.WebChat.renderWebChat( {
directLine: window.WebChat.createDirectLine( { token } ),
userID: 'user123',
username: 'johndoe',
botAvatarInitials: 'BB',
userAvatarInitials: 'JD',
store
}, document.getElementById( 'webchat' ) );
document.querySelector( '#webchat > *' ).focus();
} )().catch( err => console.error( err ) );
</script>
Надеюсь на помощь!