मैं एक टीम बॉट पर काम कर रहा हूं जिसे एक ज्ञात उपयोगकर्ता के साथ एक नई 1:1 बातचीत शुरू करने की क्षमता की आवश्यकता है (यानी, हम टीम उपयोगकर्ता आईडी जानते हैं)।

मैंने GitHub पर "पूर्ण-csharp" OfficeDev नमूने देखे हैं (https: //github.com/OfficeDev/microsoft-teams-sample-complete-csharp) और साथ ही ग्राफ़ API के टीम-संबंधित भाग, लेकिन मुझे नई बातचीत शुरू करने की कोई सुविधा नहीं दिखती।

हमारा लक्ष्य एक ज्ञात उपयोगकर्ता को 1:1 चैट में आमंत्रित करके और उनकी प्रतिक्रिया का अनुरोध करके हमारे बॉट को एक शेड्यूल पर पिंग करना है। बॉट के संदेश में एक बटन फीडबैक फॉर्म (टास्क मॉड्यूल के माध्यम से) प्रकट करेगा।

2
Easy Rhino 20 जुलाई 2019, 01:24

1 उत्तर

सबसे बढ़िया उत्तर

अद्यतन

बॉट फ्रेमवर्क ने टीमों के लिए विशिष्ट कोड में जोड़ा है जो इस उत्तर में बहुत सारे कोड को गलत या गलत बनाता है। देखें यह नमूना टीमों में सक्रिय संदेश भेजने के लिए, अभी।

टीमें इसे "प्रोएक्टिव मैसेज" कहती हैं। जब तक आपको टीम द्वारा उपयोग की जाने वाली उपयोगकर्ता आईडी मिलती है, यह करना काफी आसान है।

डॉक्स के अनुसार, प्रोएक्टिव मैसेजिंग बॉट्स के लिए:

जब तक आपके बॉट के पास व्यक्तिगत, ग्रुपचैट या टीम स्कोप में पिछले जोड़ के माध्यम से प्राप्त उपयोगकर्ता जानकारी है, तब तक बॉट एक व्यक्तिगत Microsoft टीम उपयोगकर्ता के साथ नई बातचीत बना सकते हैं। यह जानकारी आपके बॉट को सक्रिय रूप से उन्हें सूचित करने में सक्षम बनाती है। उदाहरण के लिए, यदि आपका बॉट किसी टीम में जोड़ा गया था, तो यह टीम रोस्टर को क्वेरी कर सकता है और उपयोगकर्ताओं को व्यक्तिगत चैट में व्यक्तिगत संदेश भेज सकता है, या कोई उपयोगकर्ता उस उपयोगकर्ता को एक सीधा संदेश भेजने के लिए बॉट को ट्रिगर करने के लिए किसी अन्य उपयोगकर्ता का @उल्लेख कर सकता है।

ऐसा करने का सबसे आसान तरीका Microsoft.Bot.Builder.Teams मिडलवेयर है।

नोट: Microsoft.Bot.Builder.Teams एक्सटेंशन अभी भी चालू है V4 के लिए पूर्व-रिलीज़, यही कारण है कि नमूने और कोड इसके लिए खोजना कठिन है।

मिडलवेयर जोड़ना

Startup.cs में:

var credentials = new SimpleCredentialProvider(Configuration["MicrosoftAppId"], Configuration["MicrosoftAppPassword"]);

services.AddSingleton(credentials);

[...]

services.AddBot<YourBot>(options =>
{
    options.CredentialProvider = credentials;

    options.Middleware.Add(
        new TeamsMiddleware(
            new ConfigurationCredentialProvider(this.Configuration)));
[...]

आपका bot . तैयार कर रहा है

आपके मुख्य <YourBot>.cs में:

private readonly SimpleCredentialProvider _credentialProvider;

[...]

public <YourBot>(ConversationState conversationState, SimpleCredentialProvider CredentialProvider)
{
     _credentialProvider = CredentialProvider;

[...]

संदेश भेजना

var teamConversationData = turnContext.Activity.GetChannelData<TeamsChannelData>();
var connectorClient = new ConnectorClient(new Uri(activity.ServiceUrl), _credentialProvider.AppId, _credentialProvider.Password);

var userId = <UserIdToSendTo>;
var tenantId = teamConversationData.Tenant.Id;
var parameters = new ConversationParameters
{
    Members = new[] { new ChannelAccount(userId) },
    ChannelData = new TeamsChannelData
    {
        Tenant = new TenantInfo(tenantId),
    },
};

var conversationResource = await connectorClient.Conversations.CreateConversationAsync(parameters);
var message = Activity.CreateMessageActivity();
message.Text = "This is a proactive message.";
await connectorClient.Conversations.SendToConversationAsync(conversationResource.Id, (Activity)message);

नोट: यदि आपको उपयोगकर्ता आईडी प्राप्त करने की आवश्यकता है, तो आप इसका उपयोग कर सकते हैं:

var members = (await turnContext.TurnState.Get<IConnectorClient>().Conversations.GetConversationMembersAsync(
    turnContext.Activity.GetChannelData<TeamsChannelData>().Team.Id).ConfigureAwait(false)).ToList();

इसके अलावा, मुझे अपने परीक्षण में इसकी आवश्यकता नहीं थी, लेकिन अगर आपको 401 त्रुटियां मिलती हैं, तो आपको टीमों के सेवा यूआरएल पर भरोसा करें:

MicrosoftAppCredentials.TrustServiceUrl(turnContext.Activity.ServiceUrl); 

साधन

4
mdrichardson 10 मार्च 2020, 20:10