Herhangi bir bot oluştururken birincil hedef, kullanıcınızla anlamlı bir konuşmada etkileşim kurmaktır. Bu hedefe ulaşmanın en iyi yollarından biri, bir kullanıcı ilk kez bağlandığından botunuzun ana amacını ve yeteneklerini, botunuzun oluşturulma nedenini anlamasını sağlamaktır. Bu makalede, kullanıcıları botunuza karşılamanıza yardımcı olacak kod örnekleri sağlanır.
Not
Bot Framework JavaScript, C# ve Python SDK'ları desteklenmeye devam edecektir, ancak Java SDK'sı son uzun vadeli destek Kasım 2023'te sona erecek şekilde kullanımdan kaldırılacaktır.
Java SDK ile oluşturulan mevcut botlar çalışmaya devam edecektir.
Yeni bot derlemesi için Microsoft Copilot Studio'yu kullanmayı göz önünde bulundurun ve doğru copilot çözümünü seçme hakkında bilgi edinin.
C# Örneği, JS Örneği, Java Örneği veya Python Örneği'ndeki Hoş Geldiniz kullanıcı örneğinin bir kopyası. Örnekteki kod, hoş geldiniz iletileri göndermeyi açıklamak için kullanılır.
Bu örnek kod hakkında
Bu örnek kod, botunuza başlangıçta bağlı olan yeni kullanıcıları algılamayı ve karşılamayı gösterir. Aşağıdaki diyagramda bu bot için mantıksal akış gösterilmektedir.
Bot tarafından karşılaşılan iki ana olay şunlardır:
OnMembersAddedAsync, botunuza yeni bir kullanıcı bağlandığında çağrılır.
OnMessageActivityAsync, botunuz yeni kullanıcı girişi aldığında çağrılır.
Yeni bir kullanıcı her bağlandığında bot tarafından bir WelcomeMessage, InfoMessageve PatternMessage ile sağlanır.
Yeni bir kullanıcı girişi alındığında WelcomeUserState değeri true olarak ayarlandığını DidBotWelcomeUser görmek için denetlendi. Aksi takdirde, kullanıcıya ilk karşılama kullanıcı iletisi döndürülür.
Bot tarafından karşılaşılan iki ana olay şunlardır:
onMembersAdded, botunuza yeni bir kullanıcı bağlandığında çağrılır.
onMessage, botunuz yeni kullanıcı girişi aldığında çağrılır.
Yeni bir kullanıcı her bağlandığında bot tarafından bir welcomeMessage, infoMessageve patternMessage ile sağlanır.
Yeni bir kullanıcı girişi alındığında, welcomedUserProperty true olarak ayarlı olup olmadığını didBotWelcomeUser görmek için denetlenirse. Aksi takdirde, kullanıcıya ilk karşılama kullanıcı iletisi döndürülür.
DidBotWelcomeUser True ise kullanıcının girişi değerlendirilir. Kullanıcının girişinin içeriğine bağlı olarak bu bot aşağıdakilerden birini yapar:
Kullanıcıdan alınan bir karşılamayı geri yankılar.
Botlar hakkında ek bilgi sağlayan bir hero kartı görüntüleyin.
WelcomeMessage Bu bot için beklenen girişleri açıklamayı yeniden gönderin.
Bot tarafından karşılaşılan iki ana olay şunlardır:
onMembersAdded, botunuza yeni bir kullanıcı bağlandığında çağrılır.
onMessageActivity, botunuz yeni kullanıcı girişi aldığında çağrılır.
Yeni bir kullanıcı her bağlandığında bot tarafından bir WELCOME_MESSAGE, INFO_MESSAGEve PATTERN_MESSAGE ile sağlanır.
Yeni bir kullanıcı girişi alındığında WelcomeUserState değeri true olarak ayarlandığını getDidBotWelcomeUser() görmek için denetlendi. Aksi takdirde, kullanıcıya ilk karşılama kullanıcı iletisi döndürülür.
Bot tarafından karşılaşılan iki ana olay şunlardır:
on_members_added_activity, botunuza yeni bir kullanıcı bağlandığında çağrılır.
on_message_activity, botunuz yeni kullanıcı girişi aldığında çağrılır.
Yeni bir kullanıcı her bağlandığında, bot tarafından bir karşılama iletisi, bilgi iletisi ve bir desen iletisi sağlanır.
Yeni bir kullanıcı girişi alındığında özelliği welcome_user_state.did_welcome_user denetlener. True olarak ayarlı değilse, kullanıcıya ilk hoş geldiniz kullanıcı iletisi döndürülür. True olarak ayarlanırsa, kullanıcının girişinin içeriğine bağlı olarak bu bot aşağıdakilerden birini yapar:
Kullanıcıdan alınan bir karşılamayı geri yankılar.
Botlar hakkında ek bilgi sağlayan bir hero kartı görüntüleyin.
Kullanıcı durumu nesnesi başlangıçta oluşturulur ve bağımlılık bot oluşturucusuna eklenir.
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.
Botlar\WelcomeUserBot.cs
// Initializes a new instance of the "WelcomeUserBot" class.
public WelcomeUserBot(UserState userState)
{
_userState = userState;
}
Başlangıçta, kullanıcı durumu içinde tanımlanır index.js ve bot oluşturucu tarafından tüketilir.
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');
Kullanıcı durumu nesnesi başlangıçta oluşturulur ve Spring kapsayıcısı tarafından bot oluşturucusuna eklenen bağımlılık.
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;
}
Başlangıçta, kullanıcı durumu içinde tanımlanır app.py ve bot oluşturucu tarafından tüketilir.
app.py
# Create the Bot
BOT = WelcomeUserBot(USER_STATE)
# Listen for incoming requests on /api/messages.
Şimdi bize yönteminin içinde OnMessageActivityAsync bir tanıtıcı WelcomeUserState sağlayan bir özellik erişimcisi oluşturuyoruz.
Ardından, doğru kapsamlı anahtarı almak için yöntemini çağırın GetAsync . Ardından, yöntemini kullanarak her kullanıcı girişi yinelemesinin SaveChangesAsync ardından kullanıcı durumu verilerini kaydederiz.
Botlar\WelcomeUserState.cs
// Gets or sets whether the user has been welcomed in the conversation.
public bool DidBotWelcomeUser { get; set; } = false;
Botlar\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);
}
Şimdi bize yönteminin içinde onMessageActivity bir tanıtıcı WelcomeUserState sağlayan bir özellik erişimcisi oluşturuyoruz.
Ardından, doğru kapsamlı anahtarı almak için yöntemini çağırın get . Ardından, yöntemini kullanarak her kullanıcı girişi yinelemesinin saveChanges ardından kullanıcı durumu verilerini kaydederiz.
WelcomeUserBot.java
// Get state data from UserState.
StatePropertyAccessor<WelcomeUserState> stateAccessor =
userState.createProperty("WelcomeUserState");
CompletableFuture<WelcomeUserState> stateFuture =
stateAccessor.get(turnContext, WelcomeUserState::new);
İşleyicide özellik erişimcisini on_message_activity kullanır ve işleyiciyi on_turn geçersiz kılarak dönüş bitmeden önce durumu kaydeder.
# 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)
WelcomeUserBot'ta, konuşmaya yeni bir kullanıcı eklenip eklenmediğini görmek için kullanarak OnMembersAddedAsync() bir etkinlik güncelleştirmesi olup olmadığını denetler ve sonra onlara üç başlangıç karşılama iletisi InfoMessageWelcomeMessagegöndeririz ve PatternMessage. Bu etkileşim için tam kod aşağıda gösterilmiştir.
Botlar\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);
}
}
}
Bu JavaScript kodu, kullanıcı eklendiğinde ilk karşılama iletilerini gönderir. Bu, konuşma etkinliğini denetleyerek ve konuşmaya yeni bir üye eklendiğini doğrulayarak yapılır.
botlar/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();
});
WelcomeUserBot'ta, konuşmaya yeni bir kullanıcı eklenip eklenmediğini görmek için kullanarak onMembersAdded() bir etkinlik güncelleştirmesi olup olmadığını denetler ve sonra onlara üç başlangıç karşılama iletisi INFO_MESSAGEWELCOME_MESSAGEgöndeririz ve PATTERN_MESSAGE. Bu etkileşim için tam kod aşağıda gösterilmiştir.
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'";
Yeni on_members_added_activity bir kullanıcının eklenip eklenmediğini denetler ve ardından üç ilk karşılama iletisi gönderir: karşılama iletisi, bilgi iletisi ve desen iletisi.
botlar/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)
Ayrıca, kullanıcınızın girişinin gerçekten yararlı bilgiler içerebileceği ve bu durum her kanal için farklılık gösterebileceği durumlarda da göz önünde bulundurmanız önemlidir. Kullanıcınızın tüm olası kanallarda iyi bir deneyime sahip olduğundan emin olmak için didBotWelcomeUser durum bayrağını kontrol ediyoruz ve bu "false" ise ilk kullanıcı girişini işlemeyiz. Bunun yerine kullanıcıya bir ilk karşılama iletisi sağlıyoruz. Bool welcomedUserProperty değeri daha sonra UserState'te depolanan "true" olarak ayarlanır ve kodumuz artık tüm ek ileti etkinliklerinden bu kullanıcının girişini işler.
Botlar\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
Ayrıca, kullanıcınızın girişinin gerçekten yararlı bilgiler içerebileceği ve bu durum her kanal için farklılık gösterebileceği durumlarda da göz önünde bulundurmanız önemlidir. Kullanıcınızın olası tüm kanallarda iyi bir deneyime sahip olduğundan emin olmak için didBotWelcomedUser özelliğini denetleriz, yoksa bunu "false" olarak ayarlarız ve ilk kullanıcı girişini işlemeyiz. Bunun yerine kullanıcıya bir ilk karşılama iletisi sağlıyoruz. Bool didBotWelcomeUser daha sonra "true" olarak ayarlanır ve kodumuz tüm ek ileti etkinliklerinden kullanıcı girişini işler.
botlar/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();
});
Kullanıcınızın girişinin her kanal için farklılık gösterebilecek yararlı bilgiler içerebileceği zamanları göz önünde bulundurmanız önemlidir. Kullanıcınızın tüm olası kanallarda iyi bir deneyime sahip olduğundan emin olmak için getDidBotWelcomeUser durum bayrağını denetleriz ve bu "false" ise ilk kullanıcı girişini işlemeyiz. Bunun yerine kullanıcıya bir ilk karşılama iletisi sağlıyoruz. Bool setDidBotWelcomeUser daha sonra UserState'te depolanan "true" olarak ayarlanır ve kodumuz artık tüm ek ileti etkinliklerinden bu kullanıcının girişini işler.
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))
Ayrıca kullanıcının girişinin gerçekten yararlı bilgiler içerebileceği zamanları da göz önünde bulundurmanız önemlidir; bu durum her kanal için farklılık gösterebilir. Kullanıcının tüm olası kanallarda on_message_activity iyi bir deneyime sahip olduğundan emin olmak için özelliği denetler did_welcome_user . İlk kez false olarak ayarlar ve kullanıcı girişini işlemez. Bunun yerine, kullanıcıya bir ilk karşılama iletisi sağlar. Ardından true olarak ayarlanır did_welcome_user ve tüm ek ileti etkinliklerinden kullanıcı girişini işler.
botlar/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}"
)
Ek girişi işleme
Yeni bir kullanıcı kabul edildikten sonra, her ileti dönüşü için kullanıcı girişi bilgileri değerlendirilir ve bot bu kullanıcı girişinin bağlamını temel alan bir yanıt sağlar. Aşağıdaki kod, bu yanıtı oluşturmak için kullanılan karar mantığını gösterir.
'intro' veya 'help' girişi, kullanıcıya bilgilendirici bir hero kartı sunmak için işlevini SendIntroCardAsync çağırır. Bu kod, bu makalenin sonraki bölümünde incelendi.
Botlar\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;
}
}
'intro' veya 'help' girişi, kullanıcıya Giriş Uyarlamalı Kart sunmak için CardFactory kullanır. Bu kod, bu makalenin sonraki bölümünde incelendi.
botlar/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`);
}
'intro' veya 'help' girişi, kullanıcıya bilgilendirici bir hero kartı sunmak için işlevini sendIntroCard çağırır. Bu kod, bu makalenin sonraki bölümünde incelendi.
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);
}
Kullanıcının giriş veya yardım girişi, botun çağrısına __send_intro_cardneden olur ve bu da kullanıcıya giriş uyarlamalı bir kart sunar.
botlar/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)
Hero kartı karşılamayı kullanma
Yukarıda belirtildiği gibi, bazı kullanıcı girişleri isteklerine yanıt olarak bir Hero Kartı oluşturur. Kahraman kartı karşılamaları hakkında daha fazla bilgi için bkz . Giriş Kartı Gönderme. Bu bota ait hero kart yanıtını oluşturmak için gereken kod aşağıdadır.
{
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);
}
}
botlar/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);
}
botlar/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))
)