ΠΡΠΎΠ΅ΠΊΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π°Π²ΡΠΊΠΎΠ².
ΠΠ°ΡΠΈΠ½ΠΎΠΏΠΈΡΡ.
Π ΠΊΠ°Π½Π°Π»Π΅ MS Teams ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈΠ· Π½Π°Π²ΡΠΊΠ° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ.
updateActivity
Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌ SkillHandler)onUpdateActivity
: protected async onUpdateActivity(claimsIdentity: ClaimsIdentity, conversationId: string, activityId: string, activity: Activity): Promise<ResourceResponse> {
return await this.updateActivity(claimsIdentity, conversationId, activityId, activity);
}
Π° ΡΡΠ½ΠΊΡΠΈΡ updateActivity
Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
private async updateActivity(claimsIdentity: ClaimsIdentity, conversationId: string, replyToActivityId: string, activity: Activity): Promise<ResourceResponse> {
let skillConversationReference: SkillConversationReference;
try {
skillConversationReference = await this.conversationIdFactory.getSkillConversationReference(conversationId);
} catch (err) {
// If the factory has overridden getSkillConversationReference, call the deprecated getConversationReference().
// In this scenario, the oAuthScope paired with the ConversationReference can only be used for talking with
// an official channel, not another bot.
if (err.message === 'Not Implemented') {
const conversationReference = await this.conversationIdFactory.getConversationReference(conversationId);
skillConversationReference = {
conversationReference,
oAuthScope: JwtTokenValidation.isGovernment(this.channelService) ?
GovernmentConstants.ToChannelFromBotOAuthScope :
AuthenticationConstants.ToChannelFromBotOAuthScope
};
} else {
// Re-throw all other errors.
throw err;
}
}
if (!skillConversationReference) {
throw new Error('skillConversationReference not found');
}
if (!skillConversationReference.conversationReference) {
throw new Error('conversationReference not found.');
}
const activityConversationReference = TurnContext.getConversationReference(activity);
const callback = async (context: TurnContext): Promise<void> => {
const adapter: BotFrameworkAdapter = (context.adapter as BotFrameworkAdapter);
// Cache the ClaimsIdentity and ConnectorClient on the context so that it's available inside of the bot's logic.
context.turnState.set(adapter.BotIdentityKey, claimsIdentity);
context.turnState.set(this.SkillConversationReferenceKey, activityConversationReference);
activity = TurnContext.applyConversationReference(activity, skillConversationReference.conversationReference) as Activity;
const client = adapter.createConnectorClient(activity.serviceUrl);
context.turnState.set(adapter.ConnectorClientKey, client);
context.activity.id = replyToActivityId;
await context.updateActivity(context.activity);
return;
};
AppCredentials.trustServiceUrl(skillConversationReference.conversationReference.serviceUrl);
await (this.adapter as BotFrameworkAdapter).continueConversation(skillConversationReference.conversationReference, skillConversationReference.oAuthScope, callback);
return { id: uuid() };
}
SkillHandler
:// Register the request handler.
const handler: CustomSkillHandler = new CustomSkillHandler(adapter, bot, skillConversationIdFactory, credentialProvider, authenticationConfiguration);
const skillEndpoint = new ChannelServiceRoutes(handler);
skillEndpoint.register(server, '/api/skills');
ΠΠ°ΡΡΠΎΡΠΊΠ° ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Π² Teams
ΠΡΠΈΠ±ΠΊΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈΠ· ΡΠ°Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ onUpdateActivity
.
(node:13410) UnhandledPromiseRejectionWarning: Error: Failed to decrypt conversation id
at new RestError (/Users/xxxx/Desktop/repository/xxx/virtual-assistant/node_modules/botframework-connector/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1397:28)
at /Users/xxxx/Desktop/repository/xxx/virtual-assistant/node_modules/botframework-connector/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1849:37
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:13410) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 10)
ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΊΠ°Π½Π°Π»ΠΎΠ²
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @ tommyJimmy87 Π·Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, ΠΌΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ Π΅Π΅. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΌΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π²Π°ΠΌ π!
ΠΡΠΈΠ²Π΅Ρ, @ tommyjimmy87 , ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π²Ρ Π½Π΅ ΡΠΌΠΎΠ³Π»ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ.
The Card is updated in Teams
?CustomSkillHandler
?ΠΠΎΡ Π²Π΅ΡΠΊΠ° Ρ Π½Π°ΡΠΈΠΌΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π²Π½Π΅ΡΠ»ΠΈ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
generator-bot-virtualassistant
botskills connect
CustomSkillHandler
CustomSkillHandler
ΠΡΠ΄Π΅ΠΌ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½Ρ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΠΎΡΠ²Π΅ΡΡ!
ΠΡΠΈΠ²Π΅Ρ @ Batta32 , ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π²Π°ΡΠΈ Π²ΠΎΠΏΡΠΎΡΡ:
Π― ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Ρ ΠΏΡΡΠ°ΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ adaptive card
Π² ΠΊΠ°Π½Π°Π»Π΅ MS Teams, ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΊΠ°ΡΡΠ° ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ (ΠΊΠ°ΡΡΠ° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
Π½Π°Π²ΡΠΊΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ΅ΡΡ - ΡΡΠΎ updateActivity
ΠΎΡ Π½Π°Π²ΡΠΊΠ° Π΄ΠΎ VA).
ΠΠ°, ΠΈ VA, ΠΈ Skill Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½ΠΎΠΏΠΈΡΠ½ΠΎΠΌ ΡΠ΅ΠΊΡΡΠ΅
Π Π½Π°Π²ΡΠΊΠ΅ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ adaptive card
, ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ° ΠΊΠ°ΡΡΠΎΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° ββΠ΄ΡΡΠ³ΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ. ΠΠ· Π½Π°Π²ΡΠΊΠ° Ρ Π½Π°Π·ΡΠ²Π°Ρ updateActivity
:
dc.context.updateActivity(previouslySentActivity);
previouslySentActivity
ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ, ΠΌΡ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅. ΠΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΎΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ, Π½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ Ρ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ.
ΠΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ VA (ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ), ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ. ΠΡΠ·ΠΎΠ² ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ Π² CustomSkillHandler
Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ onUpdateActivity
Π½ΠΎ Π·Π°ΡΠ΅ΠΌ Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΊΠΎΠ³Π΄Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² MS Teams.
ΠΠ°ΠΉΡΠ΅ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, ΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Ρ ΡΠΌΠΎΠ³Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π² Π²Π°ΡΠ΅ΠΉ Π²Π΅ΡΠΊΠ΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π΅ΡΡΡ Π»ΠΈ Ρ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠ°.
ΠΡΠΈΠ²Π΅Ρ @ Batta32 , Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» Π΅Π³ΠΎ ΠΈΠ· Π²Π΅ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π― ΡΠΎΠ·Π΄Π°Π» Π²ΠΈΠ»ΠΊΡ Π·Π΄Π΅ΡΡ: https://github.com/tommyJimmy87/botframework-solutions/tree/feature/southworks/conversationid-issue
Π― ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Π²Π°ΡΡ Π²Π΅ΡΠΊΡ, ΡΡΠΎΠ±Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΡ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΡ. Π testSkillHandler
Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ» try-catch, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
try{
await context.updateActivity(activity);
}catch(e){
console.log(e);
}
ΠΡΠΎ Π½Π°ΡΡΠΎΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ updateActivity
:
{ body: '{"error":{"code":"ServiceError","message":"Unknown"}}',
headers: HttpHeaders { _headersMap: [Object] },
status: 400 },
body: { error: { code: 'ServiceError', message: 'Unknown' } } }
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΈ Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅.
ΠΡΠΎ ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΠ΄Π΅Π»Π°Π»:
Π― ΡΠΎΠ·Π΄Π°Π» Π½ΠΎΠ²ΡΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³ Π²Π½ΡΡΡΠΈ sample-skill testUpdateActivityDialog
Π³Π΄Π΅ Π² beginDialog Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡ TestCard
Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ. Π onContinueDialog
Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡ ΡΡ ΠΆΠ΅ ΠΎΡΠΊΡΡΡΠΊΡ, Π½ΠΎ Ρ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠΌ;
ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ VA ΠΊ Π½Π°Π²ΡΠΊΡ.
ΠΡΠ·Π²Π°ΡΡ VA Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΠ°Π²ΡΠΊ, Π·Π°ΠΏΡΡΡΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ ΠΊΠ°ΡΡΡ;
ΠΡΠ·ΠΎΠ² VA Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΠ°Π²ΡΠΊ ΠΈ continueDialog
Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ;
ΠΠ°Π²ΡΠΊ Π²ΡΠ·ΠΎΠ²Π΅Ρ VA, ΡΡΠΎΠ±Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΊΠ°ΡΡΡ, Π° Π·Π°ΡΠ΅ΠΌ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
ΠΡΠ»ΠΈΡΠ½ΠΎ @ tommyJimmy87 ! ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΅Π³ΠΎ Ρ ΡΡΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ.
ΠΡΠΈΠ²Π΅Ρ @ tommyJimmy87! ΠΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π»ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π°ΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ ΡΠ°Π³ΠΎΠ²
ΠΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π½Π°Ρ ΠΏΠΎΡΠ²ΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, ΠΌΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π²Π°ΠΌ π.
_ΠΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΎΡΠ°ΠΌΠΈ VA ΠΈ Skill, ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ² ΡΡ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π½Π°Π²ΡΠΊΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ VA_
ΠΡΠΈΠ²Π΅Ρ, @ DiegoCardozo94!
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.
Π£ Π²Π°Ρ Π΅ΡΡΡ ΠΈΠ΄Π΅ΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΡΡΠ΅Π½ΠΎ?
ΠΠ°ΠΊ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΡΡΠ΅Π½ΠΎ Π΄ΠΎ 17-Π³ΠΎ ΡΠΈΡΠ»Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΡΡΠΎΠ³ΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ Π½Π°ΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΌΡ Ρ
ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ½ΡΡΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ 17-Π΅ ΡΠΈΡΠ»ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ? :)
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
ΠΡΠΈΠ²Π΅Ρ, @ tommyJimmy87 , ΠΈΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π·Π° Π·Π°Π΄Π΅ΡΠΆΠΊΡ.
ΠΠ°ΠΌ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ, ΡΡΠΎ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈ Π² C #, ΠΏΠΎΡΡΠΎΠΌΡ, ΠΏΠΎΡ ΠΎΠΆΠ΅, ΠΎΠ½Π° ΡΠ²ΡΠ·Π°Π½Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ TypeScript.
ΠΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ :
SkillHandler
Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅Π»ΡΠ½ΡΠΉ ResourceResponse
ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΎΡ Π½Π°Π²ΡΠΊΠ° Π½Π° ΠΊΠ°Π½Π°Π». ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΠΊ update
ΠΈ delete
, ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ Π±ΡΠ΄ΡΡ .SkillHandler
Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ OnUpdateActivityAsync
.Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅, Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠ΅: ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΠ°Π³ΠΈ:
@darrenj , ΠΌΡ ΠΏΠΎΠ²ΡΠΎΡΠΈΠ»ΠΈ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΎΡΠΎΠ² C #.
ΠΠ°ΡΠ° ΡΠ΅ΡΡΠΎΠ²Π°Ρ ΡΡΠ΅Π΄Π° :
ΠΠ°ΡΠΈ ΡΠ°Π³ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ :
_ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ Π²ΡΠ΄Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ _
_TypeScript Skill ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Microsoft Teams Channel, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ ΡΠ°Π½Π΅Π΅ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΠΊΠ°ΡΡΡ _
ΠΡΠΈΠ²Π΅Ρ, https://github.com/microsoft/botframework-sdk/issues/5919 Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π°Π΄ΡΠ΅ΡΠΎΠ²Π°ΡΡ Π½Π° Π²ΡΠ΅Ρ ΡΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠ·ΡΠΊΠ°Ρ , Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ, ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π»ΠΈ ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π·Π°Π²ΡΡΠ°ΡΠ½Π΅Π³ΠΎ Π΄Π½Ρ.
ΠΡΠΈΠ²Π΅Ρ @ Batta32 , Π²ΠΎΡ ΡΡΠΎ Π½Π°Π΄ΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ, Π²Π΅ΡΠ½ΠΎ? ΠΡΠΎ Π½Π΅ ΡΠΎ, ΡΡΠΎ Ρ ΡΠΆΠ΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ?
ΠΡΠΈΠ²Π΅Ρ @ tommyJimmy87! ΠΠ°, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΡΠΎ @gabog ΡΠΏΠΎΠΌΡΠ½ΡΠ» Π΄Π»Ρ TypeScript ΠΈ C #.
ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΡΡ Π²Π΅ΡΠΊΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΡΡ ΡΠ±ΠΎΡΠΊΡ ΠΏΠ°ΠΊΠ΅ΡΠ° SDK botbuilder-v4-js-daily, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ microsoft / botbuilder-js # 2489 ΠΈ microsoft / botbuilder-dotnet # 4264.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π½Π°Ρ ΠΏΠΎΡΠ²ΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, ΠΌΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π²Π°ΠΌ π.
ΠΡΠΈΠ²Π΅Ρ, @ tommyJimmy87 , ΠΌΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΠ»ΠΈ, ΡΡΠΎ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ microsoft / botbuilder-js # 2489 Π² testSkillHandler
ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ΅Π½Π° ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ°Π½Π°Π»Π° Microsoft Teams.
ΠΡΠΌΠ΅ΡΡΡΠ΅ ΡΡΡ ΡΠΈΠΊΡΠ°ΡΠΈΡ , ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π² ΡΠ²ΠΎΠ΅ΠΌ testSkillHandler
, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ processActivity
.
@darrenj & @gabog - ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ microsoft / botbuilder-dotnet # 4264 Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΎΡΠΎΠ² C # .
ΠΠ°ΡΠ° ΡΠ΅ΡΡΠΎΠ²Π°Ρ ΡΡΠ΅Π΄Π°:
Π¨Π°Π³ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ:
_ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π²Π½Π΅ΡΠ΅Π½Π½ΡΠ΅ Π² ΠΌΠ΅ΡΠΎΠ΄ processActivity ΠΈΠ· testSkillHandler_
_TypeScript Virtual Assistant ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Microsoft Teams Channel, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ ΡΠ°Π½Π΅Π΅ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΠΊΠ°ΡΡΡ _
ΠΡΠ΄Π΅ΠΌ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½Ρ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΠΎΡΠ²Π΅ΡΡ!
ΠΡΠΈΠ²Π΅Ρ @ Batta32 , ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΌΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΡΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΡΠ΅Π΅. Π’ΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π²ΠΎΠΏΡΠΎΡ Ρ ΠΌΠΎΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ: ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ Π»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-Π»ΠΈΠ±ΠΎ Π²Π΅ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ»ΠΈ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠΌΠΌΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ Π²ΡΡΠ΅? Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
@ tommyJimmy87 - ΠΡΠΎΡΡΠΎ ΠΊΠΎΠΌΠΌΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ Π²ΡΡΠ΅!
ΠΡΠΈΠ²Π΅Ρ Π΅ΡΠ΅ ΡΠ°Π· @ Batta32 :) Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΡΠ΅ΡΠ΅Π½! ΠΠ°Π²ΡΡΠ° Ρ ΠΏΡΠΎΠ²Π΅Π΄Ρ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³Π»ΡΠ±ΠΎΠΊΠΈΡ ΡΠ΅ΡΡΠΎΠ², Π½ΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅, ΠΌΠ΅Π½Ρ ΡΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠ»Π°ΡΡΠ΅ Test Skill Handler, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @ tommyJimmy87! ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΠ΅, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΊΡΡΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ π.
ΠΡΠΈΠ²Π΅Ρ @ Batta32! ΠΡ Ρ ΡΠ°Π΄ΠΎΡΡΡΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΊΡΡΡΡ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ :)
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @ tommyJimmy87 Π·Π° ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅!
@darrenj - ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΊΡΡΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π±ΡΠ»Π° ΡΠ΅ΡΠ΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ SDK!
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΈΠ²Π΅Ρ Π΅ΡΠ΅ ΡΠ°Π· @ Batta32 :) Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΡΠ΅ΡΠ΅Π½! ΠΠ°Π²ΡΡΠ° Ρ ΠΏΡΠΎΠ²Π΅Π΄Ρ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³Π»ΡΠ±ΠΎΠΊΠΈΡ ΡΠ΅ΡΡΠΎΠ², Π½ΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅, ΠΌΠ΅Π½Ρ ΡΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠ»Π°ΡΡΠ΅ Test Skill Handler, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!