Google Apps ScriptćØMicrosoft Graph APIć®é€£ęŗ - Teamsćƒ­ć‚°å–å¾—ē·Ø怐GAS怑

ē¤¾å†…å¤–ć§Teamsć®ćƒćƒ¼ćƒ ć«ęŠ•ēØæć•ć‚ŒćŸćƒćƒ£ćƒƒćƒˆćƒ­ć‚°ć‚’é›†čØˆć—ćŸć„č¦ęœ›ćŒéžåøøć«é«˜ććŖć£ć¦ć„ć¾ć™ć€‚ć—ć‹ć—ć€ć“ć®ćƒ‡ćƒ¼ć‚æć‚’å–å¾—ć™ć‚‹ć®ćÆå®¹ę˜“ć§ćÆć‚ć‚Šć¾ć›ć‚“ć€‚Power Automate恠ćØę–°č¦ćƒ”ćƒƒć‚»ćƒ¼ć‚øꊕēØæꙂ恋ļ¼Ÿč‡Ŗ分č‡Ŗčŗ«ć«ćƒ”ćƒ³ć‚·ćƒ§ćƒ³ćŒć‚ć£ćŸå “åˆć®ćƒ‡ćƒ¼ć‚æć‚’å–ć‚‹ć“ćØćÆå‡ŗę„ć¾ć™ćŒć€ćć‚Œä»„å¤–ć®ć‚±ćƒ¼ć‚¹ćÆå–ć‚Œć¾ć›ć‚“ć€‚ć¾ćŸć€ć„ć„ć­ē­‰ć®é›†čØˆć‚‚å‡ŗę„ć¾ć›ć‚“ć€‚čŖ°ć‹ćŒčæ”äæ”ć‚„ćƒ”ćƒƒć‚»ćƒ¼ć‚øꊕēØæ恗恟悉å…Øć¦å–å¾—ć™ć‚‹ć‚¢ć‚Æć‚·ćƒ§ćƒ³ćŒć‚ć‚Œć°č‰Æć„ć®ć§ć™ćŒć€ē¾åœØćÆē”Øę„ć•ć‚Œć¦ć„ć¾ć›ć‚“ć€‚

恝恓恧ä½æ恆äŗ‹ć«ćŖć‚‹ć®ćŒMicrosoft Graph API怂恟恠恗ē®”ē†č€…ęØ©é™ćŒåæ…要恫ćŖć‚Šć¾ć™ć€‚ä»Šå›žćÆ恓恮API悒ä½æć£ć¦ć€Google Apps Script恋悉Teamsć®ćƒćƒ£ćƒƒćƒˆćƒ­ć‚°ć‚’å–å¾—ć—ć¦ćæ恟恄ćØę€ć„ć¾ć™ć€‚

ā€»ęœ€čæ‘Google Apps ScriptćÆAPIčæ½åŠ ćØ恋恻ćØć‚“ć©ę­¢ć¾ć£ć¦ć‚‹ć‹ć‚‰ćŖ恁怂Keep悄Meet恮APIē”Øę„ć—ć¦ćć‚ŒćŸć‚‰ć„ć„ć®ć«ć€‚

今回ä½æē”Øć™ć‚‹ć‚¹ćƒ—ćƒ¬ćƒƒćƒ‰ć‚·ćƒ¼ćƒˆē­‰

äŗ‹å‰ć«Azure ADć«ć¦ćƒ—ćƒ­ć‚ø悧ć‚Æćƒˆć®ä½œęˆćŒåæ…要恫ćŖć£ć¦ć„ć¾ć™ć€‚ć¾ćŸć€ć‚¢ć‚Æć‚»ć‚¹ęة限ćØ恗恦ē®”ē†č€…ęØ©é™ćŒåæ…要ćØćŖ悋恮恧态čرåÆć‚’å¾—ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚

äŗ‹å‰ęŗ–å‚™

利ē”Ø恙悋ē‚ŗ恫ćÆAzure ADć§ć‚¢ćƒ—ćƒŖē™»éŒ²ć‚’č”Œć„ć€Client IDćØClient Secret恮2ć¤å–å¾—ć—ć¦ćŠćåæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚å¾®å¦™ć«ä»„前ćØćÆå–å¾—ę–¹ę³•ćŒē•°ćŖć£ć¦ć„ć‚‹ē‚ŗć€ę”¹ć‚ć¦ć“ć“ć§2020幓6꜈ē¾åœØć®å–å¾—ę–¹ę³•ć‚’čؘčæ°ć—ć¦ćŠććŸć„ćØę€ć„ć¾ć™ć€‚ē¾åœØćÆ态Azure AD悂ē„”å„Ÿć§åˆ©ē”Ø恌åÆčƒ½ć«ćŖć£ć¦ć„ć‚‹ć®ć§ć€ćƒ•ćƒŖćƒ¼ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć®å “åˆć§ć‚‚ę§‹ēÆ‰ć™ć‚‹äŗ‹ćŒåÆčƒ½ć«ćŖć£ć¦ć„ć¾ć™ļ¼ˆćŸć ć—ćƒ•ćƒŖćƒ¼ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć§čŖčØ¼ć‚’å®Ÿč”Œć§ćć‚‹ć‚ˆć†ć«ć™ć‚‹ć«ćÆć€ć”ć‚‡ć£ćØꉋ順恌åæ…要恧恙怂ļ¼‰ć€‚恓恮ē‚ŗ恠恑恫Microsoft365å„‘ē“„恙悋恮ćÆć”ć‚‡ć£ćØ恭惻惻惻

GASå“ć®äŗ‹å‰ęŗ–å‚™

ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖ恮čæ½åŠ 

仄äø‹ć®ę‰‹é †ć§OAuth2 for Apps Scriptćƒ©ć‚¤ćƒ–ćƒ©ćƒŖ悒čæ½åŠ ć—ć¾ć—ć‚‡ć†ć€‚

  1. ć‚¹ć‚ÆćƒŖ惗惈ć‚Øćƒ‡ć‚£ć‚æć‚’é–‹ćć¾ć™ć€‚
  2. ćƒ”ćƒ‹ćƒ„ćƒ¼ć‚ˆć‚Šć€ŒćƒŖć‚½ćƒ¼ć‚¹ć€ā‡’ć€Œćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć€ć‚’é–‹ćć¾ć™ć€‚
  3. ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖ悒čæ½åŠ ę¬„ć«ć€Œ1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF怍悒čæ½åŠ ć—ć¾ć™ć€‚
  4. 今回ćÆćƒćƒ¼ć‚øćƒ§ćƒ³ćÆ38悒éøꊞ恗恦ćæć¾ć™ć€‚
  5. äæå­˜ćƒœć‚æćƒ³ć‚’ęŠ¼ć—ć¦å®Œäŗ†

恓悌恧态OAuth2.0čŖčØ¼ć«ć¾ć¤ć‚ć‚‹ę§˜ć€…ćŖé–¢ę•°ć‚’ę‰‹č»½ć«åˆ©ē”Øć§ćć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć™ć€‚

図ļ¼šćƒ©ć‚¤ćƒ–ćƒ©ćƒŖ悒čæ½åŠ ć—ćŸę§˜å­

ć‚³ćƒ¼ćƒ«ćƒćƒƒć‚ÆURLć‚’å–å¾—ć™ć‚‹

ć‚³ćƒ¼ćƒ«ćƒćƒƒć‚ÆURLćØćÆ态čŖčØ¼ć‚’å®Œäŗ†ć—Access Tokenć‚’å–å¾—ć—ćŸć‚‰ęˆ»ć‚‹ć¹ćURLć‚’ęŒ‡å®šć™ć‚‹ć‚‚ć®ć§ć™ć€‚ć“ć‚ŒćÆć€ć‚¹ć‚ÆćƒŖ惗惈ID悒悂ćØć«ä½œć‚‰ć‚Œć¦ć„ć‚‹ć®ć§ć€ć‚¹ć‚ÆćƒŖ惗惈IDć‚’å–å¾—ć—ć¦ēµ„ćæē«‹ć¦ć¾ć™ć€‚

  1. ć‚¹ć‚ÆćƒŖ惗惈ć‚Øćƒ‡ć‚£ć‚æć®ćƒ”ćƒ‹ćƒ„ćƒ¼ć‚ˆć‚Šć€Œćƒ•ć‚”ć‚¤ćƒ«ć€ā‡’ć€Œćƒ—ćƒ­ć‚ø悧ć‚Æćƒˆć®ćƒ—ćƒ­ćƒ‘ćƒ†ć‚£ć€ć‚’é–‹ć
  2. ęƒ…å ±ć®äø­ć«ć‚ć‚‹ć€Œć‚¹ć‚ÆćƒŖ惗惈IDć€ć‚’ęŽ§ćˆć¦ćŠćć€‚
  3. https://script.google.com/macros/d/ć‚¹ć‚ÆćƒŖ惗惈ID/usercallback ćØ恗恦ēµ„ćæē«‹ć¦ć‚‹ć€‚ć“ć‚ŒćŒć‚³ćƒ¼ćƒ«ćƒćƒƒć‚ÆURLćØćŖ悋怂

図ļ¼šć‚¹ć‚ÆćƒŖ惗惈IDćÆćƒ•ć‚”ć‚¤ćƒ«ęÆŽć«ē•°ćŖ悋恮恧恙怂

Azure恧惗惭ć‚ø悧ć‚Æćƒˆć‚’ä½œęˆ

  1. ć‚¢ćƒ—ćƒŖ恮ē™»éŒ²ć«ć¦ē™»éŒ²ć‚’é–‹å§‹ć™ć‚‹
  2. ę–°č¦ē™»éŒ²ć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋
  3. åå‰ć‚’å…„åŠ›ļ¼ˆä»Šå›žćÆteamsscraperćØå…„åŠ›ć—ć¾ć—ćŸļ¼‰ć€ćƒŖćƒ€ć‚¤ćƒ¬ć‚Æ惈URIćÆ怌web悒éøꊞ恗https://script.google.com/macros/d/ć‚¹ć‚ÆćƒŖ惗惈ID/usercallbackć€ć‚’å…„åŠ›
  4. ē™»éŒ²ćƒœć‚æćƒ³ć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋
  5. å‡ŗć¦ććŸäø­ć§ć€ć€Œć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ļ¼ˆć‚Æ惩ćØę›øć‹ć‚Œć¦ć„ć‚‹ć®ćŒć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆID怍ćŖć®ć§ć€ć“ć®ć‚³ćƒ¼ćƒ‰ć‚’ćƒ”ćƒ¢ć—ć¦ćŠć
  6. å·¦ć‚µć‚¤ćƒ‰ćƒćƒ¼ć‚ˆć‚Šć€ć€ŒčØ¼ę˜Žę›øćØć‚·ćƒ¼ć‚Æćƒ¬ćƒƒćƒˆć€ć‚’ć‚ÆćƒŖ惃ć‚Æ
  7. 怌ꖰ恗恄ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć‚·ćƒ¼ć‚Æćƒ¬ćƒƒćƒˆć€ć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋
  8. 今回ćÆē‰¹ć«ęœ‰åŠ¹ęœŸé™ć‚’čØ­ć‘ćŖ恄恧čæ½åŠ ć‚’ć‚ÆćƒŖ惃ć‚Æ
  9. ć“ć‚Œć§å€¤ć«ć€Œć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć‚·ćƒ¼ć‚Æćƒ¬ćƒƒćƒˆć€ćŒē”Ÿęˆć•ć‚Œć¦ę‰‹ć«å…„ć‚Šć¾ć—ćŸć€‚ć“ć®ć‚·ćƒ¼ć‚Æ惬惃惈ćÆ恓恮Ꙃ恠恑恗恋č”Øē¤ŗ恕悌ćŖ恄恮恧态ę³Øę„ć—ć¦ćć ć•ć„ć€‚
  10. ć¤ć„ć‘ć¦ć€å·¦ć‚µć‚¤ćƒ‰ćƒćƒ¼ć‚ˆć‚Šć€ŒAPIć®ć‚¢ć‚Æć‚»ć‚¹čرåÆ怍悒ć‚ÆćƒŖ惃ć‚Æ恙悋
  11. Microsoft API恮äø­ć«ć‚ć‚‹ć€ŒMicrosoft Graph怍悒ć‚ÆćƒŖ惃ć‚Æ恙悋怂
  12. ć€Œå§”ä»»ć•ć‚ŒćŸć‚¢ć‚Æć‚»ć‚¹čرåÆ怍悒ć‚ÆćƒŖ惃ć‚Æ恙悋
  13. ćƒ‡ćƒ•ć‚©ćƒ«ćƒˆć§User.ReadćŒć™ć§ć«ONćŖć®ć§ć€ä»Šå›žćÆoffline_access态Group.Read.All态User.Read.All态Group.ReadWrite.All态ChannelMessage.Read.All悒ꤜē“¢ć—恦ONć«ć—ć¾ć—ć‚‡ć†ć€‚
  14. ć‚¢ć‚Æć‚»ć‚¹čرåÆ恮čæ½åŠ ć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋
  15. čæ½åŠ å‡ŗę„ćŸć‚‰ć€xxxxx恫ē®”ē†č€…ć®åŒę„ć‚’äøŽćˆć¾ć™ć‚’ć‚ÆćƒŖ惃ć‚Æć—ć¾ć™ć€‚ć™ć‚‹ćØ态ēŠ¶ę…‹ćŒē·‘č‰²ć«ćŖć‚Šć¾ć™ć€‚
  16. ę¬”ć«å·¦ć‚µć‚¤ćƒ‰ćƒćƒ¼ć‚ˆć‚Šć€ŒčŖčØ¼ć€ć‚’ć‚ÆćƒŖ惃ć‚Æ
  17. ęš—é»™ć®ä»˜äøŽć«ć¦ć€ć€Œć‚¢ć‚Æć‚»ć‚¹ćƒˆćƒ¼ć‚Æćƒ³ć€ć«ćƒć‚§ćƒƒć‚Æć‚’å…„ć‚Œć‚‹
  18. ć‚µćƒćƒ¼ćƒˆć•ć‚Œć¦ć„ć‚‹ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć®ēØ®é”žć«ę–¼ć„ć¦ćÆć€ć€Œćƒžćƒ«ćƒćƒ†ćƒŠćƒ³ćƒˆć€ć«ć—ć¦ćŠćć¾ć—ćŸć€‚
  19. äæå­˜ć‚’ć‚ÆćƒŖ惃ć‚Æ
  20. ꦂ要恮ć‚Øćƒ³ćƒ‰ćƒć‚¤ćƒ³ćƒˆć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋ćØ态恄悍恄悍ćŖć‚Øćƒ³ćƒ‰ćƒć‚¤ćƒ³ćƒˆURL恌å‡ŗ悋怂
  21. ę¦‚č¦ć®ćƒ‡ć‚£ćƒ¬ć‚Æ惈ćƒŖļ¼ˆćƒ†ćƒŠćƒ³ćƒˆć®ę•°å€¤ćÆćƒ”ćƒ¢ć£ć¦ćŠćć¾ć™ć€‚ć‚ćØć§ćƒ—ćƒ­ć‚°ćƒ©ćƒ äø­ć§ä½æē”Øć—ć¾ć™ć€‚
  22. ćƒ‡ćƒ•ć‚©ćƒ«ćƒˆć§ćÆēµ„ē¹”ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć§ćŖ恑悌恰OAuth2.0čŖčØ¼ćŒå‡ŗę„ć¾ć›ć‚“ć€‚ćƒ•ćƒŖćƒ¼ć®Microsoftć‚¢ć‚«ć‚¦ćƒ³ćƒˆć§ć‚‚čŖčØ¼ć§ćć‚‹ć‚ˆć†ć«ć™ć‚‹ćŸć‚ć«ćÆ仄äø‹ć®ę‰‹é †ćŒåæ…要恧恙怂
  23. å·¦ć‚µć‚¤ćƒ‰ćƒćƒ¼ć®ćƒžćƒ‹ćƒ•ć‚§ć‚¹ćƒˆć‚’ć‚ÆćƒŖ惃ć‚Æć—ć¾ć™ć€‚
  24. ćƒžćƒ‹ćƒ•ć‚§ć‚¹ćƒˆć‚Øćƒ‡ć‚£ć‚æćŒčµ·å‹•ć—ć¾ć™ć€‚ćć®äø­ć«ć‚ć‚‹signInAudienceć®å€¤ć‚’ć€ŒAzureADandPersonalMicrosoftAccount怍ćøå¤‰ę›“ć—ć¦äæå­˜ć‚’ć‚ÆćƒŖ惃ć‚Æć€‚ć“ć‚Œć§ä¾‹ćˆć°hotmailć‚¢ć‚«ć‚¦ćƒ³ćƒˆć§ć‚‚čŖčØ¼ćŒé€šć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć™ć€‚

ā€»3.恧Web悒éø恰ćŖ恄SPA悒éøć‚“ć§ć—ć¾ć†ćØ态Proof Key for Code Exchange by OAuth Public ClientsćØć„ć£ćŸć‚Øćƒ©ćƒ¼ćŒå‡ŗć¦ć—ć¾ć„čŖčØ¼ćŒć§ćć¾ć›ć‚“ć®ć§ę³Øꄏ怂

ā€»å€‹äŗŗć‚¢ć‚«ć‚¦ćƒ³ćƒˆć§ć†ć¾ćå‹•ä½œć—ćŖ恄ćŖ恁ćØę€ć£ćŸå “åˆć«ćÆ态Azure Portalć®ćƒ¦ćƒ¼ć‚¶ē”»é¢ć«ć¦onmicrosoft.comć®ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć‚’ä½œęˆć—ć¦ćć‚Œć§čŖčØ¼ä½œę„­ć‚’č”Œć†ćØč‰Æć„ć€‚ć“ć®ę™‚ć€ć‚°ćƒ«ćƒ¼ćƒ—ćØćƒ­ćƒ¼ćƒ«ć«ćŠć„ć¦ćÆć€Œć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ē®”ē†č€…态ć‚Æćƒ©ć‚¦ćƒ‰ ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ē®”ē†č€…ć€ć®2ć¤ćŒå‰²ć‚Šå½“ć¦ć‚‰ć‚Œć¦ć‚Œć°OKć§ć™ć€‚å€‹äŗŗēš„恫ćÆć“ć®ä½œę„­ć‚’ć‚Ŗć‚¹ć‚¹ćƒ”ć—ć¾ć™ć€‚ä»„é™ć€ćƒ­ć‚°ć‚¤ćƒ³čŖčؼē­‰ć‚‚ć“ć®ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć§č”Œć„ć¾ć™ć€‚

図ļ¼šć‚¢ćƒ—ćƒŖ恮ē™»éŒ²ć‹ć‚‰å…Ø恦ćÆå§‹ć¾ć‚Šć¾ć™ć€‚

図ļ¼šGraph悒éøꊞ恙悋

図ļ¼šć‚¢ć‚Æć‚»ć‚¹ęة限付äøŽć—ćŸēŠ¶ę…‹

図ļ¼ščŖčØ¼ć®čØ­å®šå¤‰ę›“ć«ę³Øꄏ

図ļ¼šćƒ•ćƒŖćƒ¼ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć§ć‚‚åÆ恫恙悋ćØ恓恆恄恆č”Øē¤ŗ恫ćŖ悋

図ļ¼šonmicrosoft.comć‚¢ć‚«ć‚¦ćƒ³ćƒˆć®ćƒ­ćƒ¼ćƒ«

Teamsć®ćƒ­ć‚°å–å¾—ć«åæ…要ćŖęƒ…å ±ć‚’é›†ć‚ć‚‹

Teamsć®ćƒ­ć‚°å–å¾—ć«åæ…要ćŖęƒ…å ±ć‚’é›†ć‚ćŖ恑悌恰ćŖć‚Šć¾ć›ć‚“ć€‚é›†ć‚ćŸęƒ…å ±ć§Graph Explorer悒ä½æć„å®Ÿéš›ć«å–å¾—ć§ćć‚‹ć®ć‹ć©ć†ć‹ć‚’ćƒ†ć‚¹ćƒˆć™ć‚‹äŗ‹ćŒåÆčƒ½ć§ć™ć€‚

  1. Graph Explorerć«č”Œćć€ćƒ­ć‚°ć‚¤ćƒ³ć—ć¦ćŠć
  2. ć‚µćƒ³ćƒ—ćƒ«ć‚Æć‚ØćƒŖ恫恦teams恧ꤜē“¢ć€‚ćƒćƒ£ćƒćƒ«å†…ć®ćƒ”ćƒƒć‚»ćƒ¼ć‚ø悒ć‚ÆćƒŖ惃ć‚Æ恙悋
  3. å–å¾—ć™ć‚‹URLćÆ态https://graph.microsoft.com/beta/teams/{group-id-for-teams}/channels/{channel-id}/messages/{message-id}ćØć„ć£ćŸć‚ˆć†ćŖć‚¹ć‚æć‚¤ćƒ«
  4. ć‚°ćƒ«ćƒ¼ćƒ—IDćŒćƒćƒ¼ćƒ ć®IDćØćŖć‚Šć¾ć™ć€‚ćƒćƒ¼ćƒ ć‚’é–‹ćć“ć®ćƒćƒ¼ćƒ ćø恮ćƒŖćƒ³ć‚Æć‚’å–å¾—ć§ćƒŖćƒ³ć‚Æć‚’ć¾ćšå–å¾—ć—ć¾ć™ć€‚
  5. groupIdćŒå…„ć£ć¦ć‚‹ć®ć§ć€ćć®IDć‚’å–å¾—ć—ć¾ć™ć€‚
  6. ę¬”ć«ćƒćƒ£ćƒćƒ«ID恌åæ…要恧恙怂åÆ¾č±”ć®ćƒćƒ£ćƒćƒ«ć‚’é–‹ćć¾ć™ć€‚
  7. URL悒見恦ćæ悋ćØ态threadId仄äø‹ć«ę•°å­—2ꔁ:åŠč§’č‹±ę•°ę–‡å­—åˆ—ļ½ž@thread.skypeć®ę–‡å­—ćŒć‚ć‚Šć¾ć™ć€‚ć“ć‚ŒćŒćƒćƒ£ćƒćƒ«IDćØćŖć‚‹ć®ć§ęŽ§ćˆć¦ćŠćć¾ć™ć€‚
  8. ćƒćƒ¼ćƒ ć®ID悒group-id-for-teamsć«å…„ć‚Œć€ćƒćƒ£ćƒćƒ«ID悒channel-idć«å…„ć‚Œć‚‹ć€‚message-idćÆäøč¦ćŖć®ć§å‰Šé™¤ć™ć‚‹ć€‚
  9. ēµ„ćæē«‹ć¦ćŸURLć‚’å…„ć‚Œć¦ć‚Æć‚ØćƒŖå®Ÿč”Œć‚’ć™ć‚‹
  10. ć¾ć ć“ć®ę®µéšŽć§ćÆå–ć‚Œć¦ć„ć¾ć›ć‚“ć€‚ć“ć“ć§ć‚¢ć‚Æć‚»ć‚¹čرåÆ恮äæ®ę­£ć‚’ć‚ÆćƒŖ惃ć‚Æ
  11. å‡ŗć¦ććŸć‚¢ć‚Æć‚»ć‚¹äø€č¦§ć®å…Øć¦ć®åŒę„ć‚’ć‚ÆćƒŖ惃ć‚Æ恙悋怂恓恮Ꙃ态onmicrosoft.comć‚¢ć‚«ć‚¦ćƒ³ćƒˆć§ćÆćŖć„å “åˆć€ChannelMessage.Read.Allć®åŒę„ćŒå‡ŗę„ćŖ恄äŗ‹ćŒć‚ć‚Šć¾ć™ć€‚
  12. ē„”äŗ‹ć«å–å¾—ć§ćć‚‹ćØ态OK - 200恌čæ”ć£ć¦ćć¦åÆ¾č±”ć®ćƒćƒ£ćƒćƒ«å†…ć®å…Øćƒ”ćƒƒć‚»ćƒ¼ć‚øćŒå–å¾—å‡ŗę„ć¾ć™ć€‚
  13. 恔ćŖćæ恫态ćŖ悓ćØćŖ恏悏恋悋ćØę€ć„ć¾ć™ćŒć€JSON恮äø­ć®bodyćŒćƒ”ćƒƒć‚»ćƒ¼ć‚øęœ¬ę–‡ć€reactions恮äø­ć®reactionTypećŒć„ć„ć­ć«č©²å½“ć—ć¾ć™ć€‚displayName恌ꊕēØæ恗恟äŗŗć®åå‰ć§ć™ć­ć€‚

図ļ¼šę±‚ć‚ć‚‰ć‚ŒćŸć‚¢ć‚Æć‚»ć‚¹čرåÆ

図ļ¼ščŖčØ¼ćŒé€šć‚‹ćØå…Øćƒ”ćƒƒć‚»ćƒ¼ć‚ø恌JSONć§å–å¾—ć•ć‚Œć‚‹

čŖčØ¼ć‚’č”Œć†å‡¦ē†ć‚’ä½œęˆć™ć‚‹

OAuth2 for Apps Scriptć®ćƒšćƒ¼ć‚øć®ć€ŒCreate the OAuth2 Serviceć€ć«ć‚ć‚‹ć‚³ćƒ¼ćƒ‰ć‚’å…ƒć«ć€Google Apps Scriptå“ć§ę§‹ēÆ‰ć‚’ć—ć¾ć™ć€‚ć“ć®ę™‚ć€Microsoft365å“ć§å–å¾—ć—ćŸć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³IDć‚„ć‚·ćƒ¼ć‚Æćƒ¬ćƒƒćƒˆć‚’ä½æć„ć¾ć™ć€‚ć¾ćŸć€ä»Šå›žćÆć„ć¤ć‚‚ć‚ˆć‚Šć‚‚č¦ę±‚ć™ć‚‹ć‚¢ć‚Æć‚»ć‚¹ęØ©é™ćŒå¤šć„ē‚¹ćØć€åˆ©ē”Ø恙悋APIćÆBetać‚’åˆ©ē”Ø恙悋ē‚¹ć«ę³Øꄏ恌åæ…要恧恙ļ¼ˆć¾ć ē¾åœØ态Graph API恧恮Teamsćƒ­ć‚°å–å¾—ćÆv1.0恧ćÆ取得å‡ŗę„ć¾ć›ć‚“ļ¼‰

GASå“ć‚³ćƒ¼ćƒ‰

  • 今回利ē”Ø恙悋Graph API恮ć‚Øćƒ³ćƒ‰ćƒć‚¤ćƒ³ćƒˆćÆhttps://graph.microsoft.com/betaćØćŖć‚Šć¾ć™ć€‚
  • 要걂恙悋ęة限ćÆscopeć«åŠč§’ć‚¹ćƒšćƒ¼ć‚¹ć§åŒŗåˆ‡ć£ć¦ć€Azure ADå“ć§ē”Øę„ć—ćŸć‚‚ć®ćØåŒć˜ć‚‚ć®ć‚’čØ­å®šć—ć¾ć™ć€‚
  • startoauthć‚’å®Ÿč”Œć—ć¦čŖčØ¼ć‚’å®Ÿč”Œć™ć‚Œć°ć€ć‚¹ć‚ÆćƒŖćƒ—ćƒˆćƒ—ćƒ­ćƒ‘ćƒ†ć‚£ć«Access TokenćŒę ¼ē“ć•ć‚Œć¾ć™ć€‚

HTMLå“ć‚³ćƒ¼ćƒ‰

template.htmlćØć„ć†ćƒ€ć‚¤ć‚¢ćƒ­ć‚°ē”Øć®ćƒ•ć‚”ć‚¤ćƒ«ć‚’ē”Øę„ć—ć¾ć™ć€‚ć“ć“ć§ć‚¢ć‚Æć‚»ć‚¹ę‰æčŖć‚’å®Ÿč”Œć—ć€ćƒ­ć‚°ć‚¤ćƒ³ć‚’ć™ć‚‹ćØć€ć‚¢ć‚Æć‚»ć‚¹ćƒˆćƒ¼ć‚Æćƒ³ćć®ä»–ćŒå–å¾—åÆčƒ½ć«ćŖć‚Šć¾ć™ć€‚

  • å®Ÿéš›ć«ć“ć‚Œć‚‰ć®ć‚³ćƒ¼ćƒ‰ć§ć€startoauthć‚’å®Ÿč”Œć™ć‚‹ćØć€ć‚¹ćƒ—ćƒ¬ćƒƒćƒ‰ć‚·ćƒ¼ćƒˆäøŠć§čŖčؼē”Øć®ćƒ€ć‚¤ć‚¢ćƒ­ć‚°ćŒå‡ŗć¾ć™ć€‚
  • čŖčØ¼ć§Microsoft365ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć«ćƒ­ć‚°ć‚¤ćƒ³ć—ć¾ć™ļ¼ˆć‚‚ć—ććÆä½œęˆć—ćŸonmicrosoft.comć®ć‚¢ć‚«ć‚¦ćƒ³ćƒˆļ¼‰
  • å–å¾—ć—ćŸAccess Token恻恋ćÆć‚¹ć‚ÆćƒŖćƒ—ćƒˆćƒ—ćƒ­ćƒ‘ćƒ†ć‚£ć®oauth2.GraphćØ恄恆項ē›®ć«ć‚¬ćƒƒćƒ„ćƒŖå€¤ćŒę ¼ē“ć•ć‚Œć¾ć™ć€‚恓恓恫ćÆAccess Token, Refresh Token, expire_in恮ć‚æ悤惠ćŖć©ćŒå…„ć£ć¦ć„ć¾ć™ć€‚
  • reseté–¢ę•°ćÆćƒ­ć‚°ć‚¢ć‚¦ćƒˆć•ć‚Œć¦ć€å†åŗ¦čŖčØ¼ćŒć§ćć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć™ć€‚
  • Chrome v83.xć‚’åˆ©ē”Øć—ć¦ć„ć‚‹å “åˆć€čŖčØ¼å®Ÿč”Œę™‚ć«ćƒŖćƒ€ć‚¤ćƒ¬ć‚Æ惈URL恫ć‚øćƒ£ćƒ³ćƒ—å‡ŗę„ćšć«ć‚Øćƒ©ćƒ¼ć«ćŖ悋恓ćØćŒć‚ć‚Šć¾ć™ć€‚čŖčؼē”ØURL恮äø­ć®redirect_urić®ę–‡å­—ćŒć‚Ŗć‚«ć‚·ćƒŠę–‡å­—ć«ē½®ćę›ć‚ć£ć¦ć„恦redirect_uri恌違恆ćØę€’ć‚‰ć‚Œć‚‹ć‚±ćƒ¼ć‚¹ćŒć‚ć‚Šć¾ć™ć€‚ćć®å “åˆćÆURL悒ē›“ꎄćƒŖćƒ€ć‚¤ćƒ¬ć‚Æ惈URI恮éƒØåˆ†ć‚’ę›øćę›ćˆć¦ćć ć•ć„ć€‚

図ļ¼šē„”äŗ‹ć«čŖčؼē”»é¢ćø到達å‡ŗę„ćŸ

図ļ¼šć‚¹ć‚ÆćƒŖćƒ—ćƒˆćƒ—ćƒ­ćƒ‘ćƒ†ć‚£ć«Access TokenćŒę ¼ē“ć•ć‚ŒćŸ

å–å¾—ć—ćŸTeamsćƒ­ć‚°ć‚’ć‚¹ćƒ—ćƒ¬ćƒƒćƒ‰ć‚·ćƒ¼ćƒˆć«ę›ø恍å‡ŗć™å‡¦ē†

å¤§é›‘ęŠŠć§ćÆć‚ć‚Šć¾ć™ćŒć€GASå“ć‹ć‚‰åæ…č¦ęœ€ä½Žé™ć®åÆ¾č±”ć®ćƒćƒ£ćƒćƒ«ć®ćƒćƒ£ćƒƒćƒˆćƒ­ć‚°ć‚’ć™ć¹ć¦å–å¾—ć—ć¦ćæ恟恄ćØę€ć„ć¾ć™ć€‚å®Ÿē”Ø恙悋恫ćÆ仄äø‹ć®ć‚ˆć†ćŖč£…å‚™ć‚‚åˆ„é€”åæ…要恧ćÆćŖ恄恋ćØę€ć„ć¾ć™ć€‚ć¾ćŸć‚¹ćƒ¬ćƒƒćƒ‰ć«åÆ¾ć™ć‚‹čæ”äæ”ćÆåˆ„ć®APIć‚’å‘¼ć³å‡ŗ恗恦čæ”äæ”ć‚’å–å¾—ć•ć›ć‚‹åæ…č¦ćŒć‚ć‚‹ć®ć§ć€čæ”äæ”ćƒ¬ć‚¹ćÆč¦Ŗć‚¹ćƒ¬ćƒƒćƒ‰ć®ę•°ć ć‘APIć‚’å©ćåæ…č¦ę€§ćŒć‚ć‚Šć¾ć™ć€‚

  1. id悒ä½æć£ć¦å–å¾—ęøˆćæ恮ć‚Øćƒ³ćƒˆćƒŖćƒ¼ć«ć¤ć„ć¦ćÆć‚¹ćƒ«ćƒ¼ć™ć‚‹ä»•ēµ„ćæ
  2. 今回取得åÆ¾č±”ć«ć—ć¦ć„ćŖć„ć€Œę·»ä»˜ćƒ•ć‚”ć‚¤ćƒ«ć€ćŖ恩恫恤恄恦悂åæ…č¦ć§ć‚ć‚Œć°ć€Google Driveć«ć‚³ćƒ”ćƒ¼ć™ć‚‹ć‚ˆć†ćŖ処ē†
  3. 取得åÆ¾č±”ć«ć™ć‚‹ćƒćƒ£ćƒćƒ«ć‚’å›ŗå®šć§ćÆćŖ恏态éøęŠžć§ćć‚‹ć‚ˆć†ć«å‹•ēš„ć«ęŒ‡å®šć™ć‚‹ä»•ēµ„ćæļ¼ˆć“ć‚Œć‚‚Graph API恧äø€č¦§ćŒå–å¾—åÆčƒ½ć§ć™ļ¼‰
  4. å–å¾—ć—ćŸćƒ‡ćƒ¼ć‚æć‚’å…ƒć«åˆ†ęžćƒ»ćƒ¬ćƒćƒ¼ćƒˆč‡Ŗå‹•ä½œęˆę©Ÿčƒ½ćŖ恩
  5. 他恮APIć‚’åˆ©ē”Øć—ć¦ćƒ‡ćƒ¼ć‚æ悒ē‰¹å®šć®ć‚¢ćƒ‰ćƒ¬ć‚¹ć«åÆ¾ć—ć¦é€ć‚Šč¾¼ć‚€ę©Ÿčƒ½
  6. 他恮APIć‚’åˆ©ē”Ø恗恦Teamsć«ćƒćƒ£ćƒƒćƒˆć‚’é€äæ”ć™ć‚‹ę©Ÿčƒ½ćŖ恩ļ¼ˆćŸć ć—恓恔悉ćÆ态APIä½æ悏恚ćØ悂Incoming Webhookć§ć‚‚ä»£ē”Øć§ćć‚‹ć‘ć‚Œć©ļ¼‰
  7. ę—„ä»˜ć§ćƒ•ć‚£ćƒ«ć‚æ恙悋悈恆ćŖ仕ēµ„ćæ悂åæ…č¦ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“ć€‚
  8. 今回ćÆ恄恄恭ćÆꕰ恠恑悒集čØˆć—ć¦ć„ć¾ć™ćŒć€ćƒŖć‚¢ć‚Æć‚·ćƒ§ćƒ³ć®ēØ®é”žć§é›†čØˆć‚’å¤‰ćˆć‚‹ć‚ˆć†ćŖę‰‹ę³•ć‚‚é¢ē™½ć„ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“ć€‚

  • teamsurlć‚’ć¾ćšå©ć„ć¦ć€č¦Ŗć‚¹ćƒ¬ćƒƒćƒ‰ć®äø€č¦§ć‚’å–å¾—ć—ć¾ć™ć€‚č¦Ŗć‚¹ćƒ¬ćƒƒćƒ‰ć®é …ē›®ć‚’ćƒ¬ć‚³ćƒ¼ćƒ‰ćØ恗恦čæ½åŠ ć—ć¾ć—ć‚‡ć†ć€‚
  • č¦Ŗć‚¹ćƒ¬ćƒƒćƒ‰ć®idć‚’å…ƒć«ę¬”ć«čæ”äæ”ćƒ¬ć‚¹ćŒć‚ć‚‹ć‹teamschildć‚’å©ć„ć¦ć€čæ”äæ”ćƒ¬ć‚¹ć®äø€č¦§ć‚’å–å¾—ć—ć¾ć™ć€‚0ä»¶ć®å “åˆć«ćÆ処ē†ć‚’ć›ćšć«ę¬”ć®å‡¦ē†ćøē§»å‹•ć—ć¾ć™ć€‚
  • 処ē†ć™ć¹ćčæ”äæ”ćŒć‚ć£ćŸć‚‰ć€čæ”äæ”å…ˆć«č¦Ŗć‚¹ćƒ¬ćƒƒćƒ‰ć®idć‚’å…„ć‚Œć¦ć€č¦Ŗć‚¹ćƒ¬ćƒƒćƒ‰ć®ę™‚ćØåŒę§˜ć«JSONć‚’åˆ†č§£ć—ć¦ćƒ¬ć‚³ćƒ¼ćƒ‰ć‚’čæ½åŠ ć—ć¾ć™ć€‚
  • 恄恄恭恮ꕰćÆreactions恮lengthć§å–å¾—ć•ć›ć¦ć„ć¾ć™ć€‚
  • ćć®ä»–ćƒ¬ć‚¹ć—ćŸę—„ä»˜ć€ćƒ”ćƒƒć‚»ćƒ¼ć‚øęœ¬ę–‡ć€é€äæ”č€…åć‚’å–å¾—ć—ć¦appendRowć§ćƒ¬ć‚³ćƒ¼ćƒ‰ć‚’čæ½åŠ ć—ć¦ć„ć¾ć™ć€‚
  • ćƒ‡ćƒ¼ć‚æć®å–å¾—ćÆgraphTeamsGeté–¢ę•°ćŒć™ć¹ć¦ę‹…å½“ć—ć¦ć„ć¾ć™ć€‚ć“ć“ć§Access Token悒ä½æć£ć¦Graph APIć‚’å©ćć€Teamsć®ćƒ­ć‚°ć‚’å–å¾—ć—ć¦ć„ć¾ć™ć€‚
  • ć‚¹ćƒ¬ćƒƒćƒ‰ć®ę•°ć‚„ćƒ¬ć‚¹ę•°ćŒč†Ø大ćŖå “åˆć€UrlfetchApp恮Quotaåˆ¶é™ć‚„GASć®å®Ÿč”Œę™‚é–“åˆ¶é™ļ¼ˆBasic恠ćØ6分ļ¼‰ć«å¼•ć£ć‹ć‹ć‚‹åÆčƒ½ę€§ćŒć‚ć‚Šć¾ć™ć€‚å›žéæ恙悋ē‚ŗ恫sleepć‚’å…„ć‚ŒćŸć‚Šć€ć†ć¾ć„ć“ćØåˆ¶é™ć‚’å›žéæ恙悋悈恆ćŖ仕ēµ„ćæ悂åæ…č¦ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“ć€‚
  • Node.js + Passport Azure AD + Electronć§ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć‚’ēµ„ć‚“ć ć»ć†ćŒē¾å®Ÿēš„ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“ļ¼ˆć“恔悉ćŖć‚‰åˆ¶é™ćŒęŽ›ć‹ć‚Šć«ćć„ļ¼‰ć€‚
  • 恔ćŖćæć«ć€ćƒ‡ćƒ¼ć‚æćÆꊕēØæć•ć‚ŒćŸę—„ä»˜ćŒę–°ć—ć„ć»ć†ć‹ć‚‰å–å¾—ć•ć‚Œć¦ć„ćć®ć§ć€ęœ€ę–°ē‰ˆć®ćƒ¬ć‚¹ćŒäø€ē•ŖäøŠć«ćŖć‚Šć¾ć™ć€‚

図ļ¼šč¦Ŗć‚¹ćƒ¬ćƒƒćƒ‰ćØčæ”äæ”ćƒ‡ćƒ¼ć‚æć‚’ć™ć¹ć¦ęŠ½å‡ŗć§ćć¾ć—ćŸ

Teams恮ć‚æćƒ–ć«åŸ‹ć‚č¾¼ć‚€

Google Apps Scriptć§ä½œć£ćŸć‚¦ć‚§ćƒ–ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć‚„ć‚¹ćƒ—ćƒ¬ćƒƒćƒ‰ć‚·ćƒ¼ćƒˆćÆ态Teams恮ć‚æćƒ–ć«åŸ‹ć‚č¾¼ć‚€äŗ‹ćŒåÆčƒ½ć§ć™ć€‚ä½œę„­ćÆć²ć©ćē°”単ćŖć®ć§ć€ć“ć†ć—ć¦ćŠćć“ćØć§ć€å®Ÿéš›ć«ćć®Teamsé–¢é€£ć®ć‚¢ćƒ—ćƒŖć‚’ćƒ€ć‚¤ćƒ¬ć‚Æćƒˆć«ćć®å “ć§ä½œę„­ćŒć§ćć‚‹ć®ć‚‚ćƒ”ćƒŖ惃惈恮äø€ć¤ć§ć™ć€‚

  1. Google Spreadsheet悄Google Apps Scriptć§ä½œęˆć—ćŸć‚¦ć‚§ćƒ–ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®URLć‚’å–å¾—ć™ć‚‹
  2. Teamsć®ćƒćƒ£ćƒćƒ«äøŠéƒØ恫恂悋ļ¼‹ćƒœć‚æćƒ³ć‚’ć‚ÆćƒŖ惃ć‚Æ
  3. ć‚æćƒ–ć®čæ½åŠ ć§ćÆ怌Webć‚µć‚¤ćƒˆć€ć‚’ć‚ÆćƒŖ惃ć‚Æ
  4. ć‚æćƒ–åć‚’å…„ć‚Œć¦ć€1.恮URLć‚’å…„ć‚Œć¦ć€äæå­˜ćƒœć‚æćƒ³ć‚’ć‚ÆćƒŖ惃ć‚Æ
  5. ć“ć‚Œć§ćƒćƒ£ćƒćƒ«ć«ć‚¹ćƒ—ćƒ¬ćƒƒćƒ‰ć‚·ćƒ¼ćƒˆć‚„ć‚¦ć‚§ćƒ–ć‚¢ćƒ—ćƒŖćŒåŸ‹ć‚č¾¼ćæåÆčƒ½ć§ć™ć€‚ęµć‚Œä½œę„­ć§ćć®ć¾ć¾é–¢é€£ć®ä»•äŗ‹ć‚’ć§ćć‚‹ć®ć§éžåøøć«åŠ¹ēŽ‡ć‚¢ćƒƒćƒ—ć—ć¾ć™ć€‚

図ļ¼šć‚¹ćƒ—ćƒ¬ćƒƒćƒ‰ć‚·ćƒ¼ćƒˆć«ć‚¢ćƒ—ćƒŖć‚’åŸ‹ć‚č¾¼ćæ

čæ”ć£ć¦ćć‚‹JSONć®ć‚µćƒ³ćƒ—ćƒ«

ä»Šå›žć®Teamsćƒ‡ćƒ¼ć‚æå–å¾—ć«ć¦Graph API恋悉čæ”ć£ć¦ćć‚‹JSONć®ć‚µćƒ³ćƒ—ćƒ«ćÆ仄äø‹ć®ć‚ˆć†ćŖę„Ÿć˜ć«ćŖć‚Šć¾ć™ć€‚value恫JSONć®å”ŠćØć—ć¦ćƒ¬ć‚¹ćŒč¤‡ę•°å…„ć£ć¦ćć‚‹ć‚¤ćƒ”ćƒ¼ć‚ø恧恙怂

関連ćƒŖćƒ³ć‚Æ

ć‚³ćƒ”ćƒ³ćƒˆć‚’ę®‹ć™

ćƒ”ćƒ¼ćƒ«ć‚¢ćƒ‰ćƒ¬ć‚¹ćŒå…¬é–‹ć•ć‚Œć‚‹ć“ćØćÆć‚ć‚Šć¾ć›ć‚“ć€‚ ā€» ćŒä»˜ć„ć¦ć„ć‚‹ę¬„ćÆåæ…須項ē›®ć§ć™

ć“ć®ć‚µć‚¤ćƒˆćÆć‚¹ćƒ‘ćƒ ć‚’ä½Žęø›ć™ć‚‹ćŸć‚ć« Akismet 悒ä½æć£ć¦ć„ć¾ć™ć€‚ć‚³ćƒ”ćƒ³ćƒˆćƒ‡ćƒ¼ć‚æć®å‡¦ē†ę–¹ę³•ć®č©³ē“°ćÆć“ć”ć‚‰ć‚’ć”č¦§ćć ć•ć„ć€‚