diff --git a/libraries/botbuilder/tests/teams/mentionsBot/.env b/libraries/botbuilder/tests/teams/mentionsBot/.env
new file mode 100644
index 0000000000..a695b3bf05
--- /dev/null
+++ b/libraries/botbuilder/tests/teams/mentionsBot/.env
@@ -0,0 +1,2 @@
+MicrosoftAppId=
+MicrosoftAppPassword=
diff --git a/libraries/botbuilder/tests/teams/mentionsBot/package.json b/libraries/botbuilder/tests/teams/mentionsBot/package.json
new file mode 100644
index 0000000000..f094cd00ae
--- /dev/null
+++ b/libraries/botbuilder/tests/teams/mentionsBot/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "mentions-bot",
+ "version": "1.0.0",
+ "description": "",
+ "main": "./lib/index.js",
+ "scripts": {
+ "start": "tsc --build && node ./lib/index.js",
+ "build": "tsc --build",
+ "watch": "nodemon --watch ./src -e ts --exec \"npm run start\""
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "botbuilder": "file:../../../",
+ "dotenv": "^8.1.0",
+ "node-fetch": "^2.6.0",
+ "restify": "^8.4.0",
+ "uuid": "^3.3.3"
+ },
+ "devDependencies": {
+ "@types/node": "^12.7.1",
+ "@types/node-fetch": "^2.5.0",
+ "@types/request": "^2.48.1",
+ "@types/restify": "^7.2.7",
+ "nodemon": "^1.19.1",
+ "ts-node": "^7.0.1",
+ "typescript": "^3.2.4"
+ }
+}
diff --git a/libraries/botbuilder/tests/teams/mentionsBot/src/index.ts b/libraries/botbuilder/tests/teams/mentionsBot/src/index.ts
new file mode 100644
index 0000000000..9f8c08889f
--- /dev/null
+++ b/libraries/botbuilder/tests/teams/mentionsBot/src/index.ts
@@ -0,0 +1,53 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+import { config } from 'dotenv';
+import * as path from 'path';
+import * as restify from 'restify';
+
+// Import required bot services.
+// See https://aka.ms/bot-services to learn more about the different parts of a bot.
+import { BotFrameworkAdapter } from 'botbuilder';
+
+// This bot's main dialog.
+import { MentionsBot } from './mentionsBot';
+
+const ENV_FILE = path.join(__dirname, '..', '.env');
+config({ path: ENV_FILE });
+
+// Create HTTP server.
+const server = restify.createServer();
+server.listen(process.env.port || process.env.PORT || 3978, () => {
+ console.log(`\n${server.name} listening to ${server.url}`);
+ console.log(`\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator`);
+ console.log(`\nTo test your bot, see: https://aka.ms/debug-with-emulator`);
+});
+
+// Create adapter.
+// See https://aka.ms/about-bot-adapter to learn more about adapters.
+const adapter = new BotFrameworkAdapter({
+ appId: process.env.MicrosoftAppId,
+ appPassword: process.env.MicrosoftAppPassword
+});
+
+// adapter.use(new TranscriptLoggerMiddleware(new FileTranscriptStore('./transcripts')));
+
+// Catch-all for errors.
+adapter.onTurnError = async (context, error) => {
+ // This check writes out errors to console log .vs. app insights.
+ console.error('[onTurnError]:');
+ console.error(error);
+ // Send a message to the user
+ await context.sendActivity(`Oops. Something went wrong in the bot!\n ${error.message}`);
+};
+
+// Create the main dialog.
+const myBot = new MentionsBot();
+
+// Listen for incoming requests.
+server.post('/api/messages', (req, res) => {
+ adapter.processActivity(req, res, async (context) => {
+ // Route to main dialog.
+ await myBot.run(context);
+ });
+});
diff --git a/libraries/botbuilder/tests/teams/mentionsBot/src/mentionsBot.ts b/libraries/botbuilder/tests/teams/mentionsBot/src/mentionsBot.ts
new file mode 100644
index 0000000000..aef1ff2abd
--- /dev/null
+++ b/libraries/botbuilder/tests/teams/mentionsBot/src/mentionsBot.ts
@@ -0,0 +1,32 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+import {
+ Mention,
+ MessageFactory,
+ TeamsActivityHandler,
+} from 'botbuilder';
+
+export class MentionsBot extends TeamsActivityHandler {
+ /*
+ * You can @mention the bot from any scope and it will reply with the mention.
+ */
+ constructor() {
+ super();
+
+ // See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.
+ this.onMessage(async (context, next) => {
+ var mention = { mentioned: context.activity.from, text:`${context.activity.from.name}` };
+
+ // Against Teams having a Mention in the Entities but not including that
+ // mention Text in the Activity Text will result in a BadRequest.
+ var replyActivity = MessageFactory.text(`Hello ${mention.text}.`);
+ replyActivity.entities = [ mention ];
+
+ await context.sendActivity(replyActivity);
+
+ // By calling next() you ensure that the next BotHandler is run.
+ await next();
+ });
+ }
+}
diff --git a/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-color.png b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-color.png
new file mode 100644
index 0000000000..bd9928dfc8
Binary files /dev/null and b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-color.png differ
diff --git a/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-outline.png b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-outline.png
new file mode 100644
index 0000000000..45e7a7c56e
Binary files /dev/null and b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-outline.png differ
diff --git a/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/manifest.json b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/manifest.json
new file mode 100644
index 0000000000..ae3dc76169
--- /dev/null
+++ b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/manifest.json
@@ -0,0 +1,43 @@
+{
+ "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.3/MicrosoftTeams.schema.json",
+ "manifestVersion": "1.3",
+ "version": "1.0.0",
+ "id": "<>",
+ "packageName": "com.teams.sample.mentionsbot",
+ "developer": {
+ "name": "MentionsBot",
+ "websiteUrl": "https://www.microsoft.com",
+ "privacyUrl": "https://www.teams.com/privacy",
+ "termsOfUseUrl": "https://www.teams.com/termsofuser"
+ },
+ "icons": {
+ "color": "icon-color.png",
+ "outline": "icon-outline.png"
+ },
+ "name": {
+ "short": "MentionsBot",
+ "full": "MentionsBot"
+ },
+ "description": {
+ "short": "MentionsBot",
+ "full": "MentionsBot"
+ },
+ "accentColor": "#FFFFFF",
+ "bots": [
+ {
+ "botId": "<>",
+ "scopes": [
+ "groupchat",
+ "team",
+ "personal"
+ ],
+ "supportsFiles": false,
+ "isNotificationOnly": false
+ }
+ ],
+ "permissions": [
+ "identity",
+ "messageTeamMembers"
+ ],
+ "validDomains": []
+}
\ No newline at end of file
diff --git a/libraries/botbuilder/tests/teams/mentionsBot/tsconfig.json b/libraries/botbuilder/tests/teams/mentionsBot/tsconfig.json
new file mode 100644
index 0000000000..a168d60662
--- /dev/null
+++ b/libraries/botbuilder/tests/teams/mentionsBot/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "target": "es2016",
+ "module": "commonjs",
+ "composite": true,
+ "declaration": true,
+ "sourceMap": true,
+ "outDir": "./lib",
+ "rootDir": "./src",
+ }
+}
\ No newline at end of file