blank_stare
blank_stare

Reputation: 11

BotFramework-DirectLine JS - Initial Message Missing

I have a Bot I have built with MS BotFramework, hosted on Azure. The Bot is built to start the convo with a Welcome Message. When I test the bot through emulator, or on Azure test webchat, the bot will initiate the conversation as expected with the welcome message.

However, in my chat client using BotFramework-DirectLineJS, it isn't until I send a message that the bot will respond with the Welcome message (along with a response to the message the user just sent).

My expectation is that when I create a new instance of DirectLine and subscribe to its activities, this Welcome message would come through. However, that doesn't seem to be happening.

Am I missing something to get this functionality working?

Upvotes: 0

Views: 317

Answers (1)

billoverton
billoverton

Reputation: 2885

Given this is working for you on "Test in Webchat", I'm assuming your if condition isn't the issue, but check if it is if (member.id === context.activity.recipient.id) { (instead of !==). The default on the template is !== but that doesn't work for me outside of emulator. With === it works both in emulator and other deployed channels.

However, depending on your use cases you may want to have a completely different welcome message for Directline sessions. This is what I do. In my onMembersAdded handler I actually get channelId from the activity via const { channelId, membersAdded } = context.activity;. Then I check that channelId != 'directline' before proceeding.

Instead, I use the onEvent handler to look for and respond to the 'webchat/join' event from Directline. That leaves for no ambiguity in the welcome response. For a very simple example, it would look something like this:

this.onEvent(async (context, next) => {
  if (context.activity.name && context.activity.name === 'webchat/join') {
    await context.sendActivity('Welcome to the Directline channel bot!');
  }

  await this.userState.saveChanges(context);
  await this.conversationState.saveChanges(context);

})

You'll still want to have something in your onMembersAdded for non-directline channel welcome messages if you use this approach.

Upvotes: 0

Related Questions