How to use botframework-webchat - 10 common examples

To help you get started, we’ve selected a few botframework-webchat examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github microsoft / botframework-solutions / solutions / testharnesses / typescript / assistant-WebChat / packages / app / src / App.js View on Github external
constructor(props) {
    super(props);

    this.state = {
      webChatStore: createStore(
        {},
        ({ dispatch }) => next => action => {
          // console.log(action);

          try {
            const { payload, type } = action;

            if (type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
              const { activity } = payload;

              if (
                activity.type === 'event'
                && activity.name === 'ActiveRoute.Directions'
              ) {
                console.log(activity);
github microsoft / BotFramework-WebChat / packages / playground / src / index.js View on Github external
let store;

window.addEventListener('keydown', event => {
  const { ctrlKey, keyCode } = event;

  if (ctrlKey && keyCode === 82) {
    // CTRL-R
    sessionStorage.removeItem(REDUX_STORE_KEY);
  } else if (ctrlKey && keyCode === 83) {
    // CTRL-S
    event.preventDefault();
    store && console.log(store.getState());
  }
});

store = createStore(
  onErrorResumeNext(() => JSON.parse(window.sessionStorage.getItem(REDUX_STORE_KEY))),
  ({ dispatch }) => next => action => {
    if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
      dispatch({
        type: 'WEB_CHAT/SEND_EVENT',
        payload: { name: 'webchat/join', value: { language: window.navigator.language } }
      });
    }

    return next(action);
  }
);

store.subscribe(() => {
  sessionStorage.setItem(REDUX_STORE_KEY, JSON.stringify(store.getState()));
});
github microsoft / BotFramework-Emulator / packages / app / client / src / ui / editor / emulator / emulator.tsx View on Github external
initConversation(props: EmulatorProps, options: any): void {
    const encodedOptions = encode(JSON.stringify(options));

    // TODO: We need to use encoded token because we need to pass both endpoint ID and conversation ID
    //       We should think about a better model to pass conversation ID from Web Chat to emulator core
    const directLine = createDirectLine({
      secret: encodedOptions,
      domain: `${this.props.url}/v3/directline`,
      webSocket: false,
    });

    this.props.newConversation(props.documentId, {
      conversationId: options.conversationId,
      // webChatStore,
      directLine,
      userId: options.userId,
      mode: options.mode,
    });
  }
github microsoft / BotFramework-Emulator / packages / app / client / src / ui / editor / emulator / parts / chat / chat.tsx View on Github external
const {
      botId,
      currentUser,
      conversationId,
      directLine,
      locale,
      mode,
      webchatStore,
      webSpeechPonyfillFactory,
    } = this.props;

    const isDisabled = mode === 'transcript' || mode === 'debug';

    // Due to needing to make idiosyncratic style changes, Emulator is using `createStyleSet` instead of `createStyleOptions`. The object below: {...webChatStyleOptions, hideSendBox...} was formerly passed into the `styleOptions` parameter of React Web Chat. If further styling modifications are desired using styleOptions, simply pass it into the same object in createStyleSet below.

    const styleSet = createStyleSet({ ...webChatStyleOptions, hideSendBox: isDisabled });

    styleSet.uploadButton = {
      ...styleSet.uploadButton,
      padding: '1px',
    };

    if (this.props.pendingSpeechTokenRetrieval) {
      return <div>Connecting...</div>;
    }

    if (directLine) {
      const bot = {
        id: botId || 'bot',
        name: 'Bot',
      };
github microsoft / BotFramework-Composer / Composer / packages / client / src / pages / webchat / MinimizableWebchat.js View on Github external
runRpcCommand(rpcCommand);
            // stop webchat redux action propagation
            return;
          }
        }
      }

      return next(action);
    });

    this.state = {
      minimized: true,
      newMessage: false,
      side: 'right',
      store,
      styleSet: createStyleSet({
        backgroundColor: 'Transparent',
      }),
      token: props.token,
    };
  }
github SharePoint / sp-dev-fx-extensions / samples / react-msal-bot / spfx / src / extensions / graphBot / components / GraphBot.tsx View on Github external
.subscribe((connectionStatus) => {
            switch (connectionStatus) {
                // Successfully connected to the converstaion.
                case ConnectionStatus.Online :
                    if (!conversationId) {
                        // Store the current conversation id in the browser session storage
                        // with 15 minutes expiration
                        this._storage.local.put(
                            this.CONVERSATION_ID_KEY, this._botConnection["conversationId"], 
                            Util.dateAdd(new Date(), "minute", 15)
                        );
                    }

                    break;
            }
        });
github SharePoint / sp-dev-fx-extensions / samples / react-msal-bot / spfx / src / extensions / graphBot / components / GraphBot.tsx View on Github external
private async _login()  {

        this.setState({
            isBotInitializing :true,
            showPanel: true,
        });

        // Get the conversation id if there is one. Otherwise, a new one will be created
        const conversationId = this._storage.local.get(this.CONVERSATION_ID_KEY);

        // Initialize the bot connection direct line
        this._botConnection = new DirectLine({
            secret: this._directLineSecret,
            webSocket: false, // Needed to be able to retrieve history
            conversationId: conversationId ? conversationId : null,
        });

        this._botConnection.connectionStatus$
        .subscribe((connectionStatus) => {
            switch (connectionStatus) {
                // Successfully connected to the converstaion.
                case ConnectionStatus.Online :
                    if (!conversationId) {
                        // Store the current conversation id in the browser session storage
                        // with 15 minutes expiration
                        this._storage.local.put(
                            this.CONVERSATION_ID_KEY, this._botConnection["conversationId"], 
                            Util.dateAdd(new Date(), "minute", 15)
github microsoft / BotFramework-Emulator / src / client / mainView.tsx View on Github external
}

                let botChanged = false;
                if (this.botId !== settings.serverSettings.activeBot) {
                    this.botId = settings.serverSettings.activeBot || '';
                    botChanged = true;
                }

                if (conversationChanged || userChanged || botChanged) {
                    if (this.directline) {
                        this.directline.end();
                        this.directline = undefined;
                    //    log.debug(`ended conversation`);
                    }
                    if (this.conversationId.length && this.userId.length && this.botId.length) {
                        this.directline = new BotChat.DirectLine({
                            secret: settings.conversation.conversationId,
                            token: settings.conversation.conversationId,
                            domain: `${Emulator.serviceUrl}/v3/directline`,
                            webSocket: false
                        });
                    //    log.debug(`started new conversation`);
                    }
                    this.reuseKey++;
                    this.forceUpdate();
                }
            } catch(e) {
                //log.error(e.message);
            }
            this.setState({
              showUpdateDialog: settings.update.showing,
              updateVersion: settings.update.version
github microsoft / botbuilder-js / samples / echobot-es6-botframework-webchat / src / app.js View on Github external
//     containerName: ''
// });

// To use Azure Cosmos DB Storage to store memory, you can the CosmosDbStorage class from `botbuilder-azure`
// const memory = new CosmosDbStorage({
//     serviceEndpoint: '',
//     authKey: '',
//     databaseId: '',
//     collectionId: ''
// });

// Create the custom WebChatAdapter and add the ConversationState middleware
const webChatAdapter = new WebChatAdapter()

// Connect our BotFramework-WebChat App instance with the DOM
App({
    user: { id: "Me!" },
    bot: { id: "bot" },
    botConnection: webChatAdapter.botConnection,
}, document.getElementById('bot'));

// Add the instatiated storage into state middleware
const convoState = new ConversationState(memory);
const userState = new UserState(memory);
webChatAdapter.use(new BotStateSet(convoState, userState));

// Register the business logic of the bot through the WebChatAdapter's processActivity implementation.
webChatAdapter.processActivity(async (context) => {
    const state = convoState.get(context);
    state.bump = state.bump ? state.bump + 1 : 1;
    await context.sendActivity(`${state.bump}: You said, "${context.activity.text}"`);
});
github microsoft / botbuilder-js / samples / alarmbot-es6-botframework-webchat / src / app.js View on Github external
import {Bot, BotStateManager, MemoryStorage} from "botbuilder";
import 'botframework-webchat/botchat.css';
import {App} from 'botframework-webchat/built/App';
import {WebChatAdapter} from './webChatAdapter';
import {AlarmRenderer} from "./alarmRenderer";
import {routes} from './routes';
import {AlarmsListComponent} from "./alarmsListComponent";

const webChatAdapter = new WebChatAdapter();

const bot = new Bot(webChatAdapter)
    .use(new MemoryStorage(),
        new BotStateManager(),
        new AlarmRenderer());
App({
    user: {id: "Me!"},
    bot: {id: "bot"},
    botConnection: webChatAdapter.botConnection,
}, document.getElementById('bot'));

AlarmsListComponent.bootstrap(webChatAdapter.botConnection.activity$, document.querySelector('.alarms-container'));
// handle activities
bot.onReceive((context) => routes(context));

// FOUC
document.addEventListener('DOMContentLoaded', function () {
    requestAnimationFrame(() => document.body.style.visibility = 'visible');
});