microsoft / BotFramework-WebChat

A highly-customizable web-based client for Azure Bot Services.
https://www.botframework.com/
MIT License
1.58k stars 1.53k forks source link

Suggested Actions vanish after sending an event #2124

Open artemvalmus opened 5 years ago

artemvalmus commented 5 years ago

Version

"botframework-webchat": "^4.3.0"

Describe the bug

After sending an event to the bot the suggested actions from the previous conversation, loaded from DirectLine using the conversation ID and WebChat token, disappear. So all the chat history is loaded, including the last suggested actions. But when I send a WEB_CHAT/SEND_EVENT activity to the bot the buttons vanish. This behavior is clear with sending a user message, but is there a point in hiding them after the event which may not be connected with the user actions?

The event is sent as follows:

const store = createStore(
{},
({ dispatch }: any) => (next: any) => (action: any) => {
    if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
        setTimeout(() => {
            const jobId = getJobIdFromRoute();
            dispatch({
                payload: {
                    name: 'webchat/jobcontext',
                    value: {
                        gdprAccepted,
                        jobId: jobId ? jobId : 0
                    }
                },
                type: 'WEB_CHAT/SEND_EVENT'
            });
        }, 1000);
    } else if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
        if (action.payload.activity.from.role === 'bot') {
            this.setState(() => ({ newMessage: true }));
        }
    }
    return next(action);
});

To Reproduce

Steps to reproduce the behavior:

  1. Retrieve an existing conversation using the ID and the WebChat token as described here - https://github.com/microsoft/BotFramework-WebChat/issues/2116#issuecomment-505177342. Make sure the conversation has suggested actions in the last activity
  2. Initialize the bot so the conversation history is displayed including the suggested actions
  3. Send a WEB_CHAT/SEND_EVENT event to the bot using the Redux store dispatch method as in the code above
  4. See error - the suggested actions disappear

Expected behavior

Suggested actions from the previous conversation, loaded from DirectLine using the conversation ID and WebChat token, are displayed after sending a WEB_CHAT/SEND_EVENT activity to the bot.

[Bug]

corinagum commented 5 years ago

Taking a look at the Bot Framework schema, there's nothing to indicate whether the client should or should not make a suggested action disappear if the BOT sends another message after suggested actions is displayed.

However, suggested actions are sent with and tied to an activity, and I don't believe it would make sense or be easy to implement continual showing of the suggested actions when a new activity has come in via the send box. If anything, this would mean removing the suggested actions component and instead of displaying it in the send box, associating it with the activity that it came in with. In such case I believe a regular adaptive or Hero card is sufficient, and changes in this manner would defeat the original intent of suggested actions.

According to this sample

Unlike buttons that appear within rich cards (which remain visible and accessible to the user even after being tapped), buttons that appear within the suggested actions pane will disappear after the user makes a selection. This prevents the user from tapping stale buttons within a conversation and simplifies bot development (since you will not need to account for that scenario)."

To me, associating the suggested action with the activity it comes with (and thereby moving it up the transcript as more messages come in) defeats the purpose of preventing stale action items that the user might click when they are no longer relevant.

TLDR: I think that another activity coming in, whether from the bot or the user, renders the suggested action 'stale'.

@EricDahlvang, @cwhitten, @compulim, do you have other thoughts?

compulim commented 5 years ago

I think @artemvalmus has the point. Event is designed for non-visual and/or non-interactive activities, e.g. telemetry, idle check, etc. And this is not an intention from user, thus, it should not dismiss suggested actions. I believe this is same for the bot too.

Looking at packages/core/src/sagas/clearSuggestedActionsOnPostActivitySaga.js, this is one of the code that will modify suggested actions (the other one is sagas/incomingActivitySaga.js).

The code will clear suggested actions only if the user is posting an activity of type message. It won't clear suggested actions if the user is posting an event activity.

On the other side, in sagas/incomingActivitySaga.js, if the bot is sending any type of activities, we will clear the suggested actions.

@artemvalmus can you check if the suggested actions is caused by the bot, instead of the user?

I think it's fair to update our code to not clearing suggested actions if the last message from the bot is not of type message, because this is not visible to the user.

hhasenauer commented 5 years ago

@compulim Thank you for taking care of this. Can you maybe tell us when we can expect this change?

corinagum commented 5 years ago

@hhasenauer currently there's no date associated with this work item. It's in our Backlog. Customers who are looking for this change should add their +1 here. :)

nmishr commented 4 years ago

Also have the same issue.

cwhitten commented 3 years ago

Loading this up for discussion/prioritization in our upcoming milestone

corinagum commented 3 years ago

Didn't make the R13 list but we'll keep this on front-burner.