К сожалению, отображение состояния подключения зависит от событий, полученных от DirectLineJs, и в настоящее время Web Chat не поддерживает настройку его поведения.При этом существует хакерский способ выполнить то, что вы пытаетесь сделать, отправив псевдо-события DirectLine.
Вот следующие шаги:
Создатьфлаг, который укажет, отправил ли бот приветственное сообщение - received_welcome_message
.
Когда веб-чат отправляет событие выполненного подключения, установите флажок, чтобы убедиться, что приветственное сообщение было отправлено.получено.Если бот не отправил приветственное сообщение, отправьте ему приветственное событие и сбросьте статус подключения на выполнение.
Когда веб-чат получает активность от бота, проверьте, является ли это приветствием.Я бы порекомендовал добавить атрибут name к сообщению на стороне бота, чтобы проверить - await
context.sendActivity({ text: 'Welcome', name: 'welcome'})
.Если действие является приветственным сообщением, отправьте событие выполненного подключения и установите флаг в значение true.
Для получения более подробной информации ознакомьтесь с фрагментами кода ниже.
let received_welcome_message = false;
const store = createStore(
{},
({ dispatch}) => next => action => {
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
if (!received_welcome_message) {
dispatch({
type: 'DIRECT_LINE/CONNECT_FULFILLING'
});
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: { name: 'webchat/join' }
});
return
}
} else if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY' && action.payload.activity.name === 'welcome') {
received_welcome_message = true;
dispatch({
type: 'DIRECT_LINE/CONNECT_FULFILLED',
});
}
return next(action);
}
);
Edit
Менее хакерский подход - отправлять событие, ожидающее публикацию после того, как соединение с ботом выполнено, чтобы имитировать бот, отправляющий приветственное сообщение.Обратите внимание, что бот не знает об имитируемой активности.Смотрите фрагмент кода ниже.
const store = createStore(
{},
({ dispatch}) => next => action => {
console.log(action)
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
dispatch({
type: 'DIRECT_LINE/POST_ACTIVITY_PENDING',
meta: { method: 'keyboard' },
payload: {
activity: {
from: { role: "bot" },
text: "Welcome Message",
textFormat: "plain",
timestamp: new Date().toString(),
type: "message"
}
}
})
}
return next(action);
}
Надеюсь, это поможет!