Как я могу обновить channelData для EventUpdate Событие, запускаемое из компонента WebChat? - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь подключиться к службе бота с помощью Angular клиента. Я могу подключиться к службе ботов, но как только я отправляю сообщение Activity, клиент WebChat отправляет на сеанс сообщения EventUpdate, в результате чего я получаю карточку входа от бота. (Если я отправлю userToken в channelData firstMessage в службу Bot от клиента, я не получу карточку входа).

Я пытаюсь отправить действие с userToken в channelData, но событие dialogUpdate достигает службы Bot. до того, как я отправил сообщение и получил карточку входа.

Мне нужно отправить пользовательские данные channelData с событием dialogUpdate, отправляемым из клиента.

Используя механизм обратного канала, я могу отправить пользовательские данные channelData для публикации действий, но это событие dialogUpdate инициируется внутренне из websocket, и мне нужно перехватить этот триггер события.

Ниже приведены подробности кода:

Index. html

<script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
<script src="https://unpkg.com/simple-update-in/dist/simple-update-in.production.min.js"></script>

app.component.ts


// after response from https://directline.botframework.com/v3/directline/conversations
createDirectLine(response: any) {
        this.directLine =  window.WebChat.createDirectLine({
            token: response.token,
            webSocket: true,
            streamUrl: response.streamUrl,
            conversationId: response.conversationId
          });
}

this.store = window.WebChat.createStore({},
            ({dispatch}) => next => action => {
                    if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {
                     // add custom channelData to every postActivity
                     action = window.simpleUpdateIn(action, ['payload', 'activity', 'channelData', 'UserToken'], function () { return this.userToken; });
                    }
                    if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
                        // Send event to bot with custom data
                        dispatch({
                          type: 'WEB_CHAT/SEND_EVENT',
                          payload: {
                            activity: {
                                type : 'conversationUpdate',
                                channelData : { 'UserToken : this.userToken}
                                }
                            }
                        })
                    }
                  return next(action);
                });

renderWebChat() {
        window.WebChat.renderWebChat(
            {
                directLine: this.directLine,
                store: this.store
            },
            this.botWindowElement.nativeElement
        );
}

PS Это ' Не полный код, я только добавил фрагменты.

1 Ответ

0 голосов
/ 09 мая 2020

Вы не должны пытаться использовать веб-чат для непосредственной манипуляции с действиями по обновлению бесед, порожденными Direct Line. Вы можете влиять на эти действия, предоставляя идентификатор пользователя при создании беседы, но остальное не в ваших руках. Вероятно, не стоит пытаться встроить токен в идентификатор пользователя, но вы можете разместить токен там, где бот сможет его найти, используя идентификатор пользователя.

Я думаю, что вы действительно хотите Для этого нужно отправить бот-активность, указывающую на успешное соединение, и затем использовать ее вместо обновления разговора. Похоже, вы уже на правильном пути, потому что пытаетесь реагировать на действия DIRECT_LINE / CONNECT_FULFILLED в промежуточном программном обеспечении. Просто попробуйте следующий пример: https://github.com/microsoft/BotFramework-WebChat/tree/master/samples/04.api/a.welcome-event

...