Det främsta målet när du skapar en robot är att engagera användaren i en meningsfull konversation. Ett av de bästa sätten att uppnå det här målet är att se till att från det ögonblick en användare först ansluter förstår de robotens huvudsakliga syfte och funktioner, anledningen till att roboten skapades. Den här artikeln innehåller kodexempel som hjälper dig att välkomna användare till din robot.
Kommentar
Bot Framework JavaScript-, C#- och Python-SDK:erna fortsätter att stödjas, men Java SDK dras tillbaka med slutligt långsiktigt stöd som slutar i november 2023.
Befintliga robotar som skapats med Java SDK fortsätter att fungera.
Den här exempelkoden visar hur du identifierar och välkomnar nya användare när de först är anslutna till din robot. Följande diagram visar logikflödet för den här roboten.
De två viktigaste händelserna som roboten påträffar är:
OnMembersAddedAsync, anropas när en ny användare ansluter till din robot.
OnMessageActivityAsync, anropas när din robot tar emot nya användarindata.
När en ny användare är ansluten får de en WelcomeMessage, InfoMessageoch PatternMessage av roboten.
När en ny användarindata tas emot kontrolleras WelcomeUserState för att se om DidBotWelcomeUser är inställt på sant. Annars returneras ett första välkomstanvändarmeddelande till användaren.
De två viktigaste händelserna som roboten påträffar är:
onMembersAdded, anropas när en ny användare ansluter till din robot.
onMessage, anropas när din robot tar emot nya användarindata.
När en ny användare är ansluten får de en welcomeMessage, infoMessageoch patternMessage av roboten.
När en ny användarindata tas emot welcomedUserProperty kontrolleras för att se om didBotWelcomeUser är inställt på sant. Annars returneras ett första välkomstanvändarmeddelande till användaren.
Om DidBotWelcomeUser är sant utvärderas användarens indata. Baserat på innehållet i användarens indata gör den här roboten något av följande:
Upprepa en hälsning som tagits emot från användaren.
Visa ett hero-kort med tilläggsinformation om robotar.
Skicka om de WelcomeMessage förklarande förväntade indata för den här roboten.
De två viktigaste händelserna som roboten påträffar är:
onMembersAdded, anropas när en ny användare ansluter till din robot.
onMessageActivity, anropas när din robot tar emot nya användarindata.
När en ny användare är ansluten får de en WELCOME_MESSAGE, INFO_MESSAGEoch PATTERN_MESSAGE av roboten.
När en ny användarindata tas emot kontrolleras WelcomeUserState för att se om getDidBotWelcomeUser() är inställt på sant. Annars returneras ett första välkomstanvändarmeddelande till användaren.
De två viktigaste händelserna som roboten påträffar är:
on_members_added_activity, anropas när en ny användare ansluter till din robot.
on_message_activity, anropas när din robot tar emot nya användarindata.
När en ny användare är ansluten får de ett välkomstmeddelande, informationsmeddelande och ett mönstermeddelande från roboten.
När en ny användarindata tas emot kontrolleras egenskapen welcome_user_state.did_welcome_user . Om det inte är inställt på sant returneras ett första välkomstanvändarmeddelande till användaren. Om den är inställd på true gör den här roboten något av följande baserat på innehållet i användarens indata:
Upprepa en hälsning som tagits emot från användaren.
Visa ett hero-kort med tilläggsinformation om robotar.
Användartillståndsobjektet skapas vid start och beroendet matas in i robotkonstruktorn.
Startup.cs
// Create the Bot Framework Authentication to be used with the Bot Adapter.
services.AddSingleton<BotFrameworkAuthentication, ConfigurationBotFrameworkAuthentication>();
// Create the Bot Adapter with error handling enabled.
Robotar\WelcomeUserBot.cs
// Initializes a new instance of the "WelcomeUserBot" class.
public WelcomeUserBot(UserState userState)
{
_userState = userState;
}
Vid start definieras användartillståndet i index.js och förbrukas av robotkonstruktorn.
index.js
// Create HTTP server
const server = restify.createServer();
server.use(restify.plugins.bodyParser());
server.listen(process.env.port || process.env.PORT || 3978, function() {
console.log(`\n${ server.name } listening to ${ server.url }`);
console.log('\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator');
Användartillståndsobjektet skapas vid start och beroendet matas in i robotkonstruktorn av Spring-containern.
Application.java
@Bean
public Bot getBot(UserState userState) {
return new WelcomeUserBot(userState);
}
WelcomeUserBot.java
private final UserState userState;
// Initializes a new instance of the "WelcomeUserBot" class.
@Autowired
public WelcomeUserBot(UserState withUserState) {
userState = withUserState;
}
Vid start definieras användartillståndet i app.py och förbrukas av robotkonstruktorn.
app.py
# Create the Bot
BOT = WelcomeUserBot(USER_STATE)
# Listen for incoming requests on /api/messages.
Nu skapar vi en egenskapsåtkomstor som ger oss ett handtag i WelcomeUserStateOnMessageActivityAsync metoden.
Anropa GetAsync sedan metoden för att hämta rätt omfångsnyckel. Sedan sparar vi användartillståndsdata efter att varje användare har angett iteration med hjälp av SaveChangesAsync metoden .
Robotar\WelcomeUserState.cs
// Gets or sets whether the user has been welcomed in the conversation.
public bool DidBotWelcomeUser { get; set; } = false;
Robotar\WelcomeUserBot.cs
var didBotWelcomeUser = await welcomeUserStateAccessor.GetAsync(turnContext, () => new WelcomeUserState(), cancellationToken);
this.onMessage(async (context, next) => {
// Read UserState. If the 'DidBotWelcomedUser' does not exist (first time ever for a user)
// set the default to false.
const didBotWelcomedUser = await this.welcomedUserProperty.get(context, false);
/**
* Override the ActivityHandler.run() method to save state changes after the bot logic completes.
*/
async run(context) {
await super.run(context);
// Save state changes
await this.userState.saveChanges(context);
}
Nu skapar vi en egenskapsåtkomstor som ger oss ett handtag i WelcomeUserStateonMessageActivity metoden.
Anropa get sedan metoden för att hämta rätt omfångsnyckel. Sedan sparar vi användartillståndsdata efter att varje användare har angett iteration med hjälp av saveChanges metoden .
WelcomeUserBot.java
// Get state data from UserState.
StatePropertyAccessor<WelcomeUserState> stateAccessor =
userState.createProperty("WelcomeUserState");
CompletableFuture<WelcomeUserState> stateFuture =
stateAccessor.get(turnContext, WelcomeUserState::new);
Den använder egenskapsåtkomstorn i on_message_activity hanteraren och åsidosätter on_turn hanteraren för att spara tillstånd före slutet av svängen.
# Get the state properties from the turn context.
welcome_user_state = await self.user_state_accessor.get(
turn_context, WelcomeUserState
)
async def on_turn(self, turn_context: TurnContext):
await super().on_turn(turn_context)
# save changes to WelcomeUserState after each turn
await self._user_state.save_changes(turn_context)
Identifiera och hälsa på nyligen anslutna användare
I WelcomeUserBot söker vi efter en aktivitetsuppdatering med OnMembersAddedAsync() för att se om en ny användare har lagts till i konversationen och skickar sedan en uppsättning med tre inledande välkomstmeddelanden WelcomeMessage, InfoMessage och PatternMessage. Fullständig kod för den här interaktionen visas nedan.
Robotar\WelcomeUserBot.cs
public class WelcomeUserBot : ActivityHandler
{
// Messages sent to the user.
private const string WelcomeMessage = "This is a simple Welcome Bot sample. This bot will introduce you " +
"to welcoming and greeting users. You can say 'intro' to see the " +
"introduction card. If you are running this bot in the Bot Framework " +
"Emulator, press the 'Start Over' button to simulate user joining " +
"a bot or a channel";
private const string InfoMessage = "You are seeing this message because the bot received at least one " +
"'ConversationUpdate' event, indicating you (and possibly others) " +
"joined the conversation. If you are using the emulator, pressing " +
"the 'Start Over' button to trigger this event again. The specifics " +
"of the 'ConversationUpdate' event depends on the channel. You can " +
"read more information at: " +
"https://aka.ms/about-botframework-welcome-user";
private const string LocaleMessage = "You can use the activity's 'GetLocale()' method to welcome the user " +
"using the locale received from the channel. " +
"If you are using the Emulator, you can set this value in Settings.";
{
foreach (var member in membersAdded)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
await turnContext.SendActivityAsync($"Hi there - {member.Name}. {WelcomeMessage}", cancellationToken: cancellationToken);
await turnContext.SendActivityAsync(InfoMessage, cancellationToken: cancellationToken);
await turnContext.SendActivityAsync($"{LocaleMessage} Current locale is '{turnContext.Activity.GetLocale()}'.", cancellationToken: cancellationToken);
await turnContext.SendActivityAsync(PatternMessage, cancellationToken: cancellationToken);
}
}
}
Den här JavaScript-koden skickar inledande välkomstmeddelanden när en användare läggs till. Detta görs genom att kontrollera konversationsaktiviteten och verifiera att en ny medlem har lagts till i konversationen.
robotar/welcomeBot.js
// Sends welcome messages to conversation members when they join the conversation.
// Messages are only sent to conversation members who aren't the bot.
this.onMembersAdded(async (context, next) => {
// Iterate over all new members added to the conversation
for (const idx in context.activity.membersAdded) {
// Greet anyone that was not the target (recipient) of this message.
// Since the bot is the recipient for events from the channel,
// context.activity.membersAdded === context.activity.recipient.Id indicates the
// bot was added to the conversation, and the opposite indicates this is a user.
if (context.activity.membersAdded[idx].id !== context.activity.recipient.id) {
await context.sendActivity(`Welcome to the 'Welcome User' Bot. This bot will introduce you to welcoming and greeting users.`);
await context.sendActivity(`You are seeing this message because the bot received at least one 'ConversationUpdate' ` +
`event, indicating you (and possibly others) joined the conversation. If you are using the emulator, ` +
`pressing the 'Start Over' button to trigger this event again. The specifics of the 'ConversationUpdate' ` +
`event depends on the channel. You can read more information at https://aka.ms/about-botframework-welcome-user`);
await context.sendActivity(`You can use the activity's 'locale' property to welcome the user ` +
`using the locale received from the channel. ` +
`If you are using the Emulator, you can set this value in Settings. ` +
`Current locale is '${ context.activity.locale }'`);
await context.sendActivity(`It is a good pattern to use this event to send general greeting to user, explaining what your bot can do. ` +
`In this example, the bot handles 'hello', 'hi', 'help' and 'intro'. ` +
`Try it now, type 'hi'`);
}
}
// By calling next() you ensure that the next BotHandler is run.
await next();
});
I WelcomeUserBot söker vi efter en aktivitetsuppdatering med onMembersAdded() för att se om en ny användare har lagts till i konversationen och skickar sedan en uppsättning med tre inledande välkomstmeddelanden WELCOME_MESSAGE, INFO_MESSAGE och PATTERN_MESSAGE. Fullständig kod för den här interaktionen visas nedan.
WelcomeUserBot.java
public class WelcomeUserBot extends ActivityHandler {
// Messages sent to the user.
private static final String WELCOME_MESSAGE =
"This is a simple Welcome Bot sample. This bot will introduce you "
+ "to welcoming and greeting users. You can say 'intro' to see the "
+ "introduction card. If you are running this bot in the Bot Framework "
+ "Emulator, press the 'Start Over' button to simulate user joining "
+ "a bot or a channel";
private static final String INFO_MESSAGE =
"You are seeing this message because the bot received at least one "
+ "'ConversationUpdate' event, indicating you (and possibly others) "
+ "joined the conversation. If you are using the emulator, pressing "
+ "the 'Start Over' button to trigger this event again. The specifics "
+ "of the 'ConversationUpdate' event depends on the channel. You can "
+ "read more information at: " + "https://aka.ms/about-botframework-welcome-user";
private String localeMessage =
"You can use the activity's GetLocale() method to welcome the user "
+ "using the locale received from the channel. "
+ "If you are using the Emulator, you can set this value in Settings.";
private static final String PATTERN_MESSAGE =
"It is a good pattern to use this event to send general greeting"
+ "to user, explaining what your bot can do. In this example, the bot "
+ "handles 'hello', 'hi', 'help' and 'intro'. Try it now, type 'hi'";
Kontrollerar on_members_added_activity om en ny användare har lagts till och skickar sedan tre inledande välkomstmeddelanden: ett välkomstmeddelande, ett informationsmeddelande och ett mönstermeddelande.
robotar/welcome-user-bot.py
"""
Greet when users are added to the conversation.
Note that all channels do not send the conversation update activity.
If you find that this bot works in the emulator, but does not in
another channel the reason is most likely that the channel does not
send this activity.
"""
for member in members_added:
if member.id != turn_context.activity.recipient.id:
await turn_context.send_activity(
f"Hi there { member.name }. " + self.WELCOME_MESSAGE
)
await turn_context.send_activity(self.INFO_MESSAGE)
await turn_context.send_activity(
f"{ self.LOCALE_MESSAGE } Current locale is { turn_context.activity.locale }."
)
await turn_context.send_activity(self.PATTERN_MESSAGE)
Välkommen till ny användare och ignorera inledande indata
Det är också viktigt att tänka på när användarens indata faktiskt kan innehålla användbar information, och detta kan variera för varje kanal. För att säkerställa att användaren har en bra upplevelse i alla möjliga kanaler kontrollerar vi statusflaggan didBotWelcomeUser och om detta är "falskt" bearbetar vi inte de första användarindata. I stället ger vi användaren ett första välkomstmeddelande. Bool welcomedUserProperty är sedan inställd på "true", lagrad i UserState och vår kod bearbetar nu användarens indata från alla ytterligare meddelandeaktiviteter.
Robotar\WelcomeUserBot.cs
{
var welcomeUserStateAccessor = _userState.CreateProperty<WelcomeUserState>(nameof(WelcomeUserState));
var didBotWelcomeUser = await welcomeUserStateAccessor.GetAsync(turnContext, () => new WelcomeUserState(), cancellationToken);
if (didBotWelcomeUser.DidBotWelcomeUser == false)
{
didBotWelcomeUser.DidBotWelcomeUser = true;
// the channel should sends the user name in the 'From' object
var userName = turnContext.Activity.From.Name;
await turnContext.SendActivityAsync("You are seeing this message because this was your first message ever to this bot.", cancellationToken: cancellationToken);
await turnContext.SendActivityAsync($"It is a good practice to welcome the user and provide personal greeting. For example, welcome {userName}.", cancellationToken: cancellationToken);
}
else
Det är också viktigt att tänka på när användarens indata faktiskt kan innehålla användbar information, och detta kan variera för varje kanal. För att säkerställa att användaren har en bra upplevelse i alla möjliga kanaler kontrollerar vi egenskapen didBotWelcomedUser. Om den inte finns ställer vi in den på "false" och bearbetar inte de första användarindata. I stället ger vi användaren ett första välkomstmeddelande. Bool didBotWelcomeUser anges sedan till "true" och vår kod bearbetar användarens indata från alla ytterligare meddelandeaktiviteter.
robotar/welcomeBot.js
this.onMessage(async (context, next) => {
// Read UserState. If the 'DidBotWelcomedUser' does not exist (first time ever for a user)
// set the default to false.
const didBotWelcomedUser = await this.welcomedUserProperty.get(context, false);
// Your bot should proactively send a welcome message to a personal chat the first time
// (and only the first time) a user initiates a personal chat with your bot.
if (didBotWelcomedUser === false) {
// The channel should send the user name in the 'From' object
const userName = context.activity.from.name;
await context.sendActivity('You are seeing this message because this was your first message ever sent to this bot.');
await context.sendActivity(`It is a good practice to welcome the user and provide personal greeting. For example, welcome ${ userName }.`);
// Set the flag indicating the bot handled the user's first message.
await this.welcomedUserProperty.set(context, true);
} else {
}
// By calling next() you ensure that the next BotHandler is run.
await next();
});
Det är viktigt att tänka på när användarens indata kan innehålla användbar information, som kan variera för varje kanal. För att säkerställa att användaren har en bra upplevelse i alla möjliga kanaler kontrollerar vi statusflaggan getDidBotWelcomeUser och om detta är "falskt" bearbetar vi inte de första användarindata. I stället ger vi användaren ett första välkomstmeddelande. Bool setDidBotWelcomeUser är sedan inställd på "true", lagrad i UserState och vår kod bearbetar nu användarens indata från alla ytterligare meddelandeaktiviteter.
WelcomeUserBot.java
@Override
protected CompletableFuture<Void> onMessageActivity(TurnContext turnContext) {
// Get state data from UserState.
StatePropertyAccessor<WelcomeUserState> stateAccessor =
userState.createProperty("WelcomeUserState");
CompletableFuture<WelcomeUserState> stateFuture =
stateAccessor.get(turnContext, WelcomeUserState::new);
return stateFuture.thenApply(thisUserState -> {
if (!thisUserState.getDidBotWelcomeUser()) {
thisUserState.setDidBotWelcomeUser(true);
// the channel should send the user name in the 'from' object
String userName = turnContext.getActivity().getFrom().getName();
return turnContext
.sendActivities(
MessageFactory.text(FIRST_WELCOME_ONE),
MessageFactory.text(String.format(FIRST_WELCOME_TWO, userName))
);
// Save any state changes.
.thenApply(response -> userState.saveChanges(turnContext))
Det är också viktigt att tänka på när användarens indata faktiskt kan innehålla användbar information, detta kan variera för varje kanal. Kontrollera egenskapen för att säkerställa att användaren har en bra upplevelse i alla möjliga kanaler on_message_activitydid_welcome_user . Första gången anger den till false och bearbetar inte användarindata. I stället får användaren ett första välkomstmeddelande. Sedan ställs den in did_welcome_user på true och bearbetar användarindata från alla ytterligare meddelandeaktiviteter.
robotar/welcome-user-bot.py
if not welcome_user_state.did_welcome_user:
welcome_user_state.did_welcome_user = True
await turn_context.send_activity(
"You are seeing this message because this was your first message ever to this bot."
)
name = turn_context.activity.from_property.name
await turn_context.send_activity(
f"It is a good practice to welcome the user and provide personal greeting. For example: Welcome {name}"
)
Bearbeta ytterligare indata
När en ny användare har välkomnats utvärderas information om användarindata för varje meddelandesväng och roboten ger ett svar baserat på kontexten för användarens indata. Följande kod visar beslutslogik som används för att generera svaret.
Indata från "intro" eller "help" anropar funktionen SendIntroCardAsync för att presentera användaren med ett informationshjältekort. Koden granskas i nästa avsnitt i den här artikeln.
Robotar\WelcomeUserBot.cs
switch (text)
{
case "hello":
case "hi":
await turnContext.SendActivityAsync($"You said {text}.", cancellationToken: cancellationToken);
break;
case "intro":
case "help":
await SendIntroCardAsync(turnContext, cancellationToken);
break;
default:
await turnContext.SendActivityAsync(WelcomeMessage, cancellationToken: cancellationToken);
break;
}
}
Indata från "intro" eller "help" använder CardFactory för att presentera användaren med ett intro-adaptivt kort. Koden granskas i nästa avsnitt i den här artikeln.
robotar/welcomeBot.js
// This example uses an exact match on user's input utterance.
// Consider using LUIS or QnA for Natural Language Processing.
const text = context.activity.text.toLowerCase();
switch (text) {
case 'hello':
case 'hi':
await context.sendActivity(`You said "${ context.activity.text }"`);
break;
case 'intro':
case 'help':
await this.sendIntroCard(context);
break;
default:
await context.sendActivity(`This is a simple Welcome Bot sample. You can say 'intro' to
see the introduction card. If you are running this bot in the Bot
Framework Emulator, press the 'Start Over' button to simulate user joining a bot or a channel`);
}
Indata från "intro" eller "help" anropar funktionen sendIntroCard för att presentera användaren med ett informationshjältekort. Koden granskas i nästa avsnitt i den här artikeln.
WelcomeUserBot.java
// This example hardcodes specific utterances.
// You should use LUIS or QnA for more advance language understanding.
String text = turnContext.getActivity().getText().toLowerCase();
switch (text) {
case "hello":
case "hi":
return turnContext.sendActivities(MessageFactory.text("You said " + text));
case "intro":
case "help":
return sendIntroCard(turnContext);
default:
return turnContext.sendActivity(WELCOME_MESSAGE);
}
En användares indata från introduktionen eller hjälpen gör att roboten anropar __send_intro_card, vilket ger användaren ett adaptivt introkort.
robotar/welcome-user-bot.py
if text in ("hello", "hi"):
await turn_context.send_activity(f"You said { text }")
elif text in ("intro", "help"):
await self.__send_intro_card(turn_context)
else:
await turn_context.send_activity(self.WELCOME_MESSAGE)
Använda hero card-hälsning
Som nämnts ovan genererar vissa användarindata ett Hero-kort som svar på deras begäran. Du kan läsa mer om hero-korthälsningar här Skicka ett introduktionskort. Nedan visas den kod som krävs för att skapa robotens hero card-svar.
{
var card = new HeroCard
{
Title = "Welcome to Bot Framework!",
Text = @"Welcome to Welcome Users bot sample! This Introduction card
is a great way to introduce your Bot to the user and suggest
some things to get them started. We use this opportunity to
recommend a few next steps for learning more creating and deploying bots.",
Images = new List<CardImage>() { new CardImage("https://aka.ms/bf-welcome-card-image") },
Buttons = new List<CardAction>()
{
new CardAction(ActionTypes.OpenUrl, "Get an overview", null, "Get an overview", "Get an overview", "https://docs.microsoft.com/en-us/azure/bot-service/?view=azure-bot-service-4.0"),
new CardAction(ActionTypes.OpenUrl, "Ask a question", null, "Ask a question", "Ask a question", "https://stackoverflow.com/questions/tagged/botframework"),
new CardAction(ActionTypes.OpenUrl, "Learn how to deploy", null, "Learn how to deploy", "Learn how to deploy", "https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-deploy-azure?view=azure-bot-service-4.0"),
}
};
var response = MessageFactory.Attachment(card.ToAttachment());
await turnContext.SendActivityAsync(response, cancellationToken);
}
}
robotar/welcomeBot.js
async sendIntroCard(context) {
const card = CardFactory.heroCard(
'Welcome to Bot Framework!',
'Welcome to Welcome Users bot sample! This Introduction card is a great way to introduce your Bot to the user and suggest some things to get them started. We use this opportunity to recommend a few next steps for learning more creating and deploying bots.',
['https://aka.ms/bf-welcome-card-image'],
[
{
type: ActionTypes.OpenUrl,
title: 'Get an overview',
value: 'https://docs.microsoft.com/en-us/azure/bot-service/?view=azure-bot-service-4.0'
},
{
type: ActionTypes.OpenUrl,
title: 'Ask a question',
value: 'https://stackoverflow.com/questions/tagged/botframework'
},
{
type: ActionTypes.OpenUrl,
title: 'Learn how to deploy',
value: 'https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-deploy-azure?view=azure-bot-service-4.0'
}
]
);
await context.sendActivity({ attachments: [card] });
}
WelcomeUserBot.java
private CompletableFuture<ResourceResponse> sendIntroCard(TurnContext turnContext) {
HeroCard card = new HeroCard();
card.setTitle("Welcome to Bot Framework!");
card.setText(
"Welcome to Welcome Users bot sample! This Introduction card "
+ "is a great way to introduce your Bot to the user and suggest "
+ "some things to get them started. We use this opportunity to "
+ "recommend a few next steps for learning more creating and deploying bots."
);
CardImage image = new CardImage();
image.setUrl("https://aka.ms/bf-welcome-card-image");
card.setImages(Collections.singletonList(image));
CardAction overviewAction = new CardAction();
overviewAction.setType(ActionTypes.OPEN_URL);
overviewAction.setTitle("Get an overview");
overviewAction.setText("Get an overview");
overviewAction.setDisplayText("Get an overview");
overviewAction.setValue(
"https://docs.microsoft.com/en-us/azure/bot-service/?view=azure-bot-service-4.0"
);
CardAction questionAction = new CardAction();
questionAction.setType(ActionTypes.OPEN_URL);
questionAction.setTitle("Ask a question");
questionAction.setText("Ask a question");
questionAction.setDisplayText("Ask a question");
questionAction.setValue("https://stackoverflow.com/questions/tagged/botframework");
CardAction deployAction = new CardAction();
deployAction.setType(ActionTypes.OPEN_URL);
deployAction.setTitle("Learn how to deploy");
deployAction.setText("Learn how to deploy");
deployAction.setDisplayText("Learn how to deploy");
deployAction.setValue(
"https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-deploy-azure?view=azure-bot-service-4.0"
);
card.setButtons(Arrays.asList(overviewAction, questionAction, deployAction));
Activity response = MessageFactory.attachment(card.toAttachment());
return turnContext.sendActivity(response);
}
robotar/welcome-user-bot.py
async def __send_intro_card(self, turn_context: TurnContext):
card = HeroCard(
title="Welcome to Bot Framework!",
text="Welcome to Welcome Users bot sample! This Introduction card "
"is a great way to introduce your Bot to the user and suggest "
"some things to get them started. We use this opportunity to "
"recommend a few next steps for learning more creating and deploying bots.",
images=[CardImage(url="https://aka.ms/bf-welcome-card-image")],
buttons=[
CardAction(
type=ActionTypes.open_url,
title="Get an overview",
text="Get an overview",
display_text="Get an overview",
value="https://docs.microsoft.com/en-us/azure/bot-service/?view=azure-bot-service-4.0",
),
CardAction(
type=ActionTypes.open_url,
title="Ask a question",
text="Ask a question",
display_text="Ask a question",
value="https://stackoverflow.com/questions/tagged/botframework",
),
CardAction(
type=ActionTypes.open_url,
title="Learn how to deploy",
text="Learn how to deploy",
display_text="Learn how to deploy",
value="https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-deploy-azure?view=azure-bot-service-4.0",
),
],
)
return await turn_context.send_activity(
MessageFactory.attachment(CardFactory.hero_card(card))
)