मैं वर्तमान में किसी विशिष्ट कर्मचारी को Microsoft टीम चैट संदेश भेजने के लिए Microsoft ग्राफ़ का उपयोग करने का प्रयास कर रहा हूँ।

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

महत्वपूर्ण: मैं केवल 1:1 चैट में चैनल पर संदेश पोस्ट नहीं करना चाहता।

मैंने जो कोशिश की है:

मैं अपने स्वयं के उपयोगकर्ता के लिए वर्तमान चैट का उपयोग करके प्राप्त करने में सक्षम हूं:

https://graph.microsoft.com/beta/users/{myid}/chats

अगर, हालांकि, मैं कोशिश करता हूं कि किसी भिन्न उपयोगकर्ता के id के साथ, मुझे एक 401 (permission denied) त्रुटि मिलती है। मेरे पास सभी उपलब्ध अनुमतियाँ होने के बावजूद भी मैं उनकी वर्तमान चैट नहीं देख सकता।

त्रुटि संदेश में, यह निम्नलिखित कहता है:

"उपयोगकर्ता आईडी को प्रतिनिधि मोड में कॉल करने पर एपीआई कॉलर से मेल खाना चाहिए"

... लेकिन मैं प्रत्यायोजित मोड का उपयोग नहीं करना चाहता क्योंकि इसका मतलब है कि मैं कमांड निष्पादित कर रहा हूं जैसे कि मैं वह उपयोगकर्ता बनूंगा, और इसलिए चैट संदेश नहीं बना सका जो मैं पहले स्थान पर चाहता हूं।

यह बल्कि भ्रमित करने वाला लग सकता है, इसलिए मुझे आशा है कि आपको मेरा मतलब समझ में आ गया होगा।

3
Genericness 2 जिंदा 2020, 12:43

2 जवाब

मेरी जानकारी के लिए, किसी प्रकार के संदर्भ के बिना उपयोगकर्ता को सीधे संदेश भेजने का कोई तरीका नहीं है। उदाहरण के लिए, समस्या यह हो जाती है कि संदेश कहाँ दिखाई देगा और वह किसका होगा?

यदि आप इसके बजाय चैनल के अंदर होने से निपट सकते हैं, तो PowerShell ठीक है क्योंकि आप ऐसा करने के लिए एक वेबहुक सेट कर सकते हैं। मैंने कुछ साल पहले पीएस -> टीमों से भी ऐसा ही किया है, इसलिए मुझे लगता है कि इसे अभी भी काम करना चाहिए। यह लेख< /ए> मदद करनी चाहिए।

वैकल्पिक रूप से, यदि आप वास्तव में "1-1" वार्तालाप चाहते हैं, तो बोलने के लिए, आपको एक बॉट बनाने और पंजीकृत करने की आवश्यकता है, ताकि संदेश "किसी से" उपयोगकर्ता के पास आए। इस अवधारणा को प्रो-एक्टिव मैसेजिंग कहा जाता है और मैंने इसके बारे में यहां पोस्ट किया है। हालाँकि, विशुद्ध रूप से PowerShell से आने पर यह बहुत काम आने वाला है:

  1. ऐप आईडी और पासवर्ड प्राप्त करने के लिए Azure में एक बॉट बनाएं। तकनीकी रूप से यह एक गैर-मौजूद बॉट होगा क्योंकि इसका कोई कार्यान्वयन नहीं है, जिसका अर्थ है कि यदि उपयोगकर्ता को उत्तर देना होता तो यह कहीं नहीं जाता। यह ठीक हो सकता है? आप संभवतः PowerShell में Azure फ़ंक्शन बॉट बनाने का प्रयास कर सकते हैं, लेकिन ऐसा कुछ नहीं जो मैंने स्वयं किया है इसलिए सलाह नहीं दे सकता (मैंने अभी तक केवल बॉट्स के लिए C# का उपयोग किया है)
  2. एक वार्तालाप आईडी बनाएं, और इसे बाद के लिए सहेजें - फिर से, काम का एक गुच्छा।
  3. प्रासंगिक NuGet पैकेजों को संदर्भित करते हुए, कोड को (जैसे ऊपर मेरी पोस्ट से) पावरशेल में बदलें।

इसलिए, मैं अनुशंसा करता हूं कि आप एक टीम चैनल का उपयोग करके एक दृष्टिकोण खोजने की कोशिश करें, और वहां उपयोगकर्ता को संदेश भेजें, यदि आप इसे अपने उपयोग के मामले में प्रबंधित कर सकते हैं?

जब तक कि यह सब अप्रासंगिक न हो, यदि आप की ओर से किसी अन्य उपयोगकर्ता को भेजने का प्रयास कर रहे हैं?

2
Hilton Giesenow 2 जिंदा 2020, 14:36

इस संदर्भ में "प्रतिनिधि" शब्द OAuth टोकन में शामिल अनुमतियों के दावों के प्रकार को संदर्भित करता है। दो प्रकार हैं; आवेदन और प्रत्यायोजित।

जब आवेदन बनाम प्रत्यायोजित कार्यक्षेत्र की बात आती है तो दो प्रमुख नियम होते हैं:

  1. एक एकल टोकन में केवल एक ही प्रकार का दायरा हो सकता है। दूसरे शब्दों में, टोकन स्वयं या तो एक एप्लिकेशन या प्रत्यायोजित टोकन है, दोनों का संयोजन कभी नहीं।

  2. किसी टोकन पर लागू किए गए कार्यक्षेत्रों का प्रकार उस OAuth अनुदान द्वारा निर्धारित किया जाता है जिसका उपयोग आपने इसे प्राप्त करने के लिए किया था:

    • प्राधिकरण कोड: प्रत्यायोजित
    • निहित: प्रत्यायोजित
    • क्लाइंट क्रेडेंशियल: एप्लिकेशन

सूची चैट के संबंध में (/chats) समापन बिंदु, केवल प्रत्यायोजित अनुमतियाँ समर्थित हैं:

  • प्रत्यायोजित (कार्यालय या विद्यालय खाता): Chat.Read, Chat.ReadWrite
  • प्रत्यायोजित (व्यक्तिगत Microsoft खाता): समर्थित नहीं है।
  • आवेदन: समर्थित नहीं है।

जब माइक्रोसॉफ्ट ग्राफ में अनुमतियों की बात आती है तो अंगूठे का एक सामान्य नियम होता है (मैं यहां 'सामान्य' का उपयोग करता हूं क्योंकि पुराने एंडपॉइंट्स में कुछ अपवाद हैं): प्रत्यायोजित क्षेत्र जो केवल वर्तमान उपयोगकर्ता पर लागू होते हैं Read या ReadWrite में समाप्त होते हैं जबकि जो किसी भी उपयोगकर्ता पर लागू होते हैं, वे .All में समाप्त होते हैं।

चूंकि ये दो स्कोप (Chat.Read और Chat.ReadWrite) .All में खत्म नहीं होते हैं, और केवल डेलिगेट किए गए स्कोप समर्थित हैं, इससे आपको पता चलता है कि आप केवल उन्हीं चैट को एक्सेस कर सकते हैं, जिनके मालिक हैं वर्तमान में प्रमाणित उपयोगकर्ता। दूसरे शब्दों में, आप एपीआई के माध्यम से किसी अन्य उपयोगकर्ता के चैट संदेशों को नहीं पढ़ सकते हैं।

यदि आप इसके बारे में सोचते हैं, तो यह बहुत मायने रखता है। यदि आपके पास एक प्रमाणित उपयोगकर्ता नहीं था, तो आपके द्वारा भेजा गया चैट संदेश "से" कौन होगा? चैट संदेश के लिए प्रेषक और प्राप्तकर्ता दोनों की आवश्यकता होती है।


आपके परिदृश्य के लिए, टीम चैटबॉट केवल एक नया उपयोगकर्ता सेट करने के लिए जिसे आप प्रमाणित करते हैं और अन्य उपयोगकर्ताओं को संदेश भेजते हैं।

0
Marc LaFleur 2 जिंदा 2020, 21:10
1
धन्यवाद। मुझे लगता है कि मैं टीम चैटबॉट समाधान के लिए जाऊंगा - यहां सबसे अच्छा विकल्प लगता है।
 – 
Genericness
3 जिंदा 2020, 09:35