рд╡рд░реНрдЪреБрдЕрд▓ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ рд╕реНрдХрд┐рд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯред
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯред
MS Teams Channel рд╕реЗ, рдХрд┐рд╕реА рд╕реНрдХрд┐рд▓ рд╕реЗ рдХрд┐рд╕реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рд╡рд░реНрдЪреБрдЕрд▓ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
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');
рдХрд╛рд░реНрдб рдЯреАрдореЛрдВ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рддреНрд░реБрдЯрд┐ рддрдм рджрд┐рдЦрд╛рдИ рдЬрд╛рддреА рд╣реИ рдЬрдм VA рдкрд┐рдЫрд▓реЗ рд╡рд░реНрдгрд┐рдд рдлрд╝рдВрдХреНрд╢рди 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
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ VA рдФрд░ рдХреМрд╢рд▓ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░реЗрдВbotskills connect
рдХрдорд╛рдВрдб . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реАрдП рдФрд░ рд╕реНрдХрд┐рд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВCustomSkillHandler
рдкрд░ onUpdateActivity рдФрд░ updateActivity рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВCustomSkillHandler
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрд╣рдо рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рдкреНрд░рддрд┐ рдЪреМрдХрд╕ рд░рд╣реЗрдВрдЧреЗ!
рдирдорд╕реНрддреЗ @ рдмрдЯреНрдЯрд╛32 , рдЖрдкрдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛:
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ MS Teams рдЪреИрдирд▓ рдореЗрдВ рдПрдХ adaptive card
рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП (рдХрд╛рд░реНрдб рдХреМрд╢рд▓ рдХреЗ рднреАрддрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг updateActivity
рдХреМрд╢рд▓ рд╕реЗ рд╡реАрдП рддрдХ)ред
рд╣рд╛рдВ, рд╡реАрдП рдФрд░ рд╕реНрдХрд┐рд▓ рджреЛрдиреЛрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реИрдВ
рдХреМрд╢рд▓ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ adaptive card
, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рдж рдЗрд╕ рдХрд╛рд░реНрдб рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреМрд╢рд▓ рд╕реЗ рдореИрдВ updateActivity
рдХрд╣рддрд╛ рд╣реВрдВ:
dc.context.updateActivity(previouslySentActivity);
previouslySentActivity
рдпрд╣ рд╡рд╣ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдореЗрдВ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рднреЗрдЬрдиреЗ рдФрд░ рдЕрджреНрдпрддрди рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдкреНрд░рд╡рд╛рд╣ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдмрджрд▓ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рд╡реАрдП рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ (рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ) рдЬрд┐рд╕реЗ рддрдм рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЙрд▓ CustomSkillHandler
рдореЗрдВ onUpdateActivity
рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рддрдм рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬрдм рдЧрддрд┐рд╡рд┐рдзрд┐ рдПрдордПрд╕ рдЯреАрдореЛрдВ рдХреЛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред
рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕ рдмреАрдЪ, рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреА рд╢рд╛рдЦрд╛ рдкрд░ рднреА рдЖрдЬрд╝рдорд╛ рд╕рдХрддрд╛ рд╣реВрдБ рдФрд░ рдЬрд╛рдБрдЪ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рдХреНрдпрд╛ рдореЗрд░реЗ рдкрд╛рд╕ рднреА рдпрд╣реА рддреНрд░реБрдЯрд┐ рд╣реИред
рдирдорд╕реНрддреЗ @ рдмрдЯреНрдЯрд╛32 , рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдЙрд╕ рд╢рд╛рдЦрд╛ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдпрд╛: https://github.com/tommyJimmy87/botframework-solutions/tree/feature/southworks/conversationid-issue
рдореИрдВрдиреЗ рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рд╢рд╛рдЦрд╛ рдмрджрд▓ рджреА рд╣реИред testSkillHandler
рдореИрдВрдиреЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрд╢рд┐рд╢-рдкрдХрдбрд╝ рдЬреЛрдбрд╝рд╛:
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' } } }
рдЬреЛ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИред
рдпрд╣ рд╡рд╣ рдкрд░реАрдХреНрд╖рдг рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛:
рдореИрдВрдиреЗ рдирдореВрдирд╛-рдХреМрд╢рд▓ testUpdateActivityDialog
рдЕрдВрджрд░ рдПрдХ рдирдпрд╛ рд╕рдВрд╡рд╛рдж рдмрдирд╛рдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ startDialog рдореЗрдВ рдореИрдВ рдПрдХ рдкрд╛рда рдХреЗ рд╕рд╛рде TestCard
рднреЗрдЬрддрд╛ рд╣реВрдВред onContinueDialog
рдореИрдВ рдПрдХ рд╣реА рдХрд╛рд░реНрдб рднреЗрдЬрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдкрд╛рда рдХреЗ рд╕рд╛рде;
рд╡реАрдП рдХреЛ рд╕реНрдХрд┐рд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
рд╡реАрдП рдХреЛ рдХрд┐рд╕реА рдЗрд░рд╛рджреЗ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ рдЬреЛ рд╕реНрдХрд┐рд▓ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рдЯреЗрд╕реНрдЯ рдбрд╛рдпрд▓реЙрдЧ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ рдФрд░ рдХрд╛рд░реНрдб рджрд┐рдЦрд╛рдПрдЧрд╛;
VA рдХреЛ рдХрд┐рд╕реА рдРрд╕реЗ рдЗрд░рд╛рджреЗ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ рдЬреЛ рдХреМрд╢рд▓ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╡рд╛рдж рдХреЗ continueDialog
рдХреЛ рдмреБрд▓рд╛рдПрдЧрд╛;
рдХрд╛рд░реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрд╢рд▓ рд╡реАрдП рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред
рдмрдврд╝рд┐рдпрд╛ @ tommyJimmy87 ! рд╣рдо рдЗрд╕ рдирдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ, рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж .
рд╣рд╛рдп @ tommyJimmy87! рд╣рдордиреЗ рдЖрдкрдХреЗ рдирд╡реАрдирддрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдФрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд░реЗрдкреНрд░реЛ рдЪрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ред
рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╢реЛрдз рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред рдЬреИрд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реЛрдЧрд╛, рд╣рдо рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖрдПрдВрдЧреЗ ред
_рд╣рдордиреЗ рд╡реАрдП рдФрд░ рд╕реНрдХрд┐рд▓ рдмреЙрдЯ рдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдЬрдм рдХреМрд╢рд▓ рд╡реАрдП рдХреЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬрддрд╛ рд╣реИ рддреЛ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рд╛рдп @ рдбрд┐рдПрдЧреЛрдХрд╛рд░реНрдбреЛрдЬрд╝реЛ94 ,
рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрдм рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ резрен рддрд╛рд░реАрдЦ рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реА рддрд░рдл рд╕реЗ рд╕рдЦреНрдд рд░рд┐рд╣рд╛рдИ рд╣реИ, рд╣рдо рд╕рд┐рд░реНрдл рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ резренрд╡реАрдВ рддрд╛рд░реАрдЦ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИ рдпрд╛ рдирд╣реАрдВ? :)
рдзрдиреНрдпрд╡рд╛рдж
рд╣рд╛рдп @ tommyJimmy87 , рджреЗрд░реА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред
рд╣рдо рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рд╕реА # рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рди рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред
рд╣рдореЗрдВ рдХреБрдЫ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЗ рдорд┐рд▓реЗ :
SkillHandler
рдПрдХ рдирдХрд▓реА ResourceResponse
рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдХреМрд╢рд▓ рд╕реЗ рдЪреИрдирд▓ рддрдХ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ update
рдФрд░ delete
рдЬреИрд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ редSkillHandler
рд╡рд░реНрдЧ OnUpdateActivityAsync
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИредрдЕрдВрддрд┐рдо рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо, рд╣рдордиреЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЪрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд┐рдпрд╛:
@darrenj , рд╣рдордиреЗ рд╕реА # рдмреЙрдЯреНрд╕ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ ред
рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг :
рд╣рдорд╛рд░реЗ рд░реЗрдкреНрд░реЛ рдХрджрдо :
_рдХрд┐рд╕реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рд╡рд░реНрдЪреБрдЕрд▓ рд╕рд╣рд╛рдпрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛_
_рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдХрд┐рд▓ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдЯреАрдореНрд╕ рдЪреИрдирд▓ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдкрд╣рд▓реЗ рднреЗрдЬреЗ рдЧрдП рдХрд╛рд░реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ_
рдирдорд╕реНрддреЗ, https://github.com/microsoft/botframework-sdk/issues/5919 рдиреЗ рд╕рднреА 3 рд╕рдорд░реНрдерд┐рдд рднрд╛рд╖рд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ, рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рд╕рдорд╛рдзрд╛рди рдХрд▓ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рджреИрдирд┐рдХ рдмрд┐рд▓реНрдб рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдирдорд╕реНрддреЗ @ рдмрдЯреНрдЯрд╛32 , рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛? рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рд╣рд╛рдп @ tommyJimmy87! рд╣рд╛рдБ, рд╣рдо рдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпрд╛ @gabog рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдФрд░ рд╕реА #ред
рд╣рдо рдЕрдВрддрд┐рдо рдЕрдкрдбреЗрдЯ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рд╢рд╛рдЦрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдПрд╕рдбреАрдХреЗ рдХреЗ
рдЬреИрд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реЛрдЧрд╛, рд╣рдо рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖрдПрдВрдЧреЗ ред
рдирдорд╕реНрддреЗ @ tommyJimmy87 , рд╣рдордиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ рдХрд┐ testSkillHandler
рдореЗрдВ Microsoft/botbuilder-js#2489 рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ Microsoft Teams рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдкрдиреЗ testSkillHandler
рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ processActivity
рдкрджреНрдзрддрд┐ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред
@darrenj & @gabog - рд╣рдордиреЗ C# рдмреЙрдЯреНрд╕ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Microsoft/botbuilder-dotnet#4264 рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рд╣реИред
рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг:
рд░реЗрдкреНрд░реЛ рдХрджрдо:
_рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди testSkillHandler_ рдХреА рд╕рдХреНрд░рд┐рдпрддрд╛ рд╡рд┐рдзрд┐
_рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд░реНрдЪреБрдЕрд▓ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдЯреАрдореНрд╕ рдЪреИрдирд▓ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдкрд╣рд▓реЗ рднреЗрдЬреЗ рдЧрдП рдХрд╛рд░реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ_
рд╣рдо рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рдкреНрд░рддрд┐ рдЪреМрдХрд╕ рд░рд╣реЗрдВрдЧреЗ!
рдирдорд╕реНрддреЗ @ рдмрдЯреНрдЯрд╛32 , рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЗрд╕реЗ
@ tommyJimmy87 - рдмрд╕ рдкреНрд░рддрд┐рдмрджреНрдз рд╣рдо рдКрдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ!
рд╣рд╛рдп рдлрд┐рд░ рд╕реЗ @ рдмрдЯреНрдЯрд╛ 32 :) рдпрд╣ рднреА рд╣рд▓ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ! рдореИрдВ рдХрд▓ рдХреБрдЫ рдФрд░ рдЧрд╣рди рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдБрдЧрд╛ рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЯреЗрд╕реНрдЯ рд╕реНрдХрд┐рд▓ рд╣реИрдВрдбрд▓рд░ рд╡рд░реНрдЧ рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!
рдзрдиреНрдпрд╡рд╛рдж @ tommyJimmy87! рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
рд╣рд╛рдп @ рдмрдЯреНрдЯрд╛32! рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рд╣рд░реНрд╖ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :)
рдзрдиреНрдпрд╡рд╛рдж @ tommyJimmy87 рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП!
@darrenj - рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдПрд╕рдбреАрдХреЗ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд╛рдп рдлрд┐рд░ рд╕реЗ @ рдмрдЯреНрдЯрд╛ 32 :) рдпрд╣ рднреА рд╣рд▓ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ! рдореИрдВ рдХрд▓ рдХреБрдЫ рдФрд░ рдЧрд╣рди рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдБрдЧрд╛ рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЯреЗрд╕реНрдЯ рд╕реНрдХрд┐рд▓ рд╣реИрдВрдбрд▓рд░ рд╡рд░реНрдЧ рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!