Мой бот используется таким образом, что когда пользователь вводит вопрос, он перенаправляет диалог и возвращает ответ на основе вопроса. В настоящее время я пытаюсь сохранить историю разговоров. Добавление промежуточного программного обеспечения является частью процесса сохранения, и я столкнулся с проблемой, из-за которой в журнале сообщений неожиданно появляется «неопределенный».
Мой фрагмент кода
bot.dialog('cards', [
function (session) {
session.send('Test1');
var msg = new builder.Message(session)
.attachmentLayout(builder.AttachmentLayout.carousel)
.textFormat(builder.TextFormat.xml)
.attachments([
new builder.HeroCard(session)
.title('Test1')
.images([
builder.CardImage.create(session, 'imgURL')
])
.buttons([builder.CardAction.dialogAction(session, 'Card1', null, 'Here')
])
]);
msg.addAttachment (
new builder.HeroCard(session)
.title("Test2")
.images([
builder.CardImage.create(session, "imgUrl")
])
.buttons([
builder.CardAction.dialogAction(session, "Card2", null, "Here")
])
);
session.endDialog(msg)
}
]).triggerAction({
matches: 'Greetings'})
//Adding of new card
bot.dialog('Card1', [
function (session) {
var msg1 = new builder.Message(session).sourceEvent({
//specify the channel
facebook: {
text:"Card1"
}
});
session.endDialog(msg1)
session.beginDialog('card1link');
}
]).triggerAction({
matches: 'card1'})
bot.dialog('card1link', [
function (session, args, next) {
builder.Prompts.choice(session, '1. Card2\n2. Card3\n', ['1', '2'], {
retryPrompt: "Please pick your choice.\n1. Card2\n2. Card3\n",
maxRetries: 1
});
},
function (session, args, next) {
if (args.response) {
var choice = args.response.entity;
switch (choice) {
case '1':
session.replaceDialog('Card2');
break;
case '2':
session.replaceDialog('Card3');
break;
}
}
else{
session.send("Sorry");
}
}
]);
Выход
(User-to-Bot) message: hi
(Bot-to-User) message: Test1
(Bot-to-User) message: undefined
(User-to-Bot) message: Card1
(Bot-to-User) message: undefined
(Bot-to-User) message: Please pick your choice. 1. Card2 2. Card3
Ожидал
(User-to-Bot) message: hi
(Bot-to-User) message: Test1
(User-to-Bot) message: Card1
(Bot-to-User) message: Please pick your choice. 1. Card2 2. Card3
Хотя я не смог завершить ожидаемые шаги из-за некоторых проблем с маршрутизацией, копирование и вставка вашего кода успешно отрисовали карусель в эмуляторе.
Извините, я только что увидел тег Facebook. Я не уверен, поддерживает ли Facebook форматирование XML для Rich Cards / Шаблоны
@ СтивенГ. Я могу отображать богатые карты на FB. Есть ли способ опустить слово «undefined»?
Когда генерируется слово «undefined»? Прямо перед тем, как пользователю будут показаны какие-либо карточки?
@ СтивенГ. Я понял, что слово "undefined" появится при отправке сообщения (facebook: {text: "Card1"}) и карусели карточек от бота.





Для этого можно использовать синонимы и retryPrompt.
builder.Prompts.choice(
session,
"Selection one option",
[
{
value: "1",
synonyms: ["Card1", "Card 1"]
},
{
value: "2",
synonyms: ["Card2", "Card 2"]
}
],
{
listStyle: builder.ListStyle.button,
retryPrompt: 'Selection one option.'
}
)
Вы не предоставили фрагмент кода в промежуточном программном обеспечении recieve или send. Предположим, вы используете следующий код для регистрации истории:
bot.use({
receive: (evt, next) => {
//handle evt
//what you save should be `evt.text` as the message
next();
},
send: (evt, next) => {
//handle evt
//what you save should be `evt.text` as the message
next();
}
})
Когда ваш бот получил (Bot-to-User) message: undefined, он должен сработать по событию endOfConversation. Это событие имеет такую структуру:
{
address:Object {id: "9n1h124ddkb2", channelId: "emulator", user: Object, …}
code:"completedSuccessfully"
textLocale:"en-US"
type:"endOfConversation"
}
Которые не содержат свойства text.
Это должен быть преступник.
Вы можете добавить условие, чтобы этого избежать:
receive: (evt, next) => {
console.info(evt);
if (evt.type == 'message') {
your logic here
}
next();
}
@GuessssMe помог ли ответ Гэри? У меня не было возможности проверить это, но я также предполагаю, что несуществующее свойство text является основной причиной. Вы пробовали установить для свойства исходящего сообщения пустую строку: ''?
На каком канале вы наблюдаете такое поведение, это на тестовой панели WebChat в Azure?