scouterna / google-scoutnet-synk Goto Github PK
View Code? Open in Web Editor NEWSynkronisering av användarkonton och google-grupper från Scoutnet
Synkronisering av användarkonton och google-grupper från Scoutnet
Nu går det att styra på varje enskild e-postlista i Scoutnet vilka e-postadresser som den sänder till.
Detta påverkar även API:t går det att styra om så att detta även följer med till G suitegrupperna?
Exempel på användning: du har en avdelning med yngre ledare (utmanare) som även har kontaktuppgifter till sina anhöriga i Scoutnet.
Du vill genom att kombinera två e-postlistor från Scoutnet skapa en lista för en avdelning där scouternas alla kontaktuppgifter följer med men i ledarnas fall så blir det bara den primära e-postadressen.
Förslag:
Gör det möjligt att stänga av konversationshistoriken i grupperna.
Samt att på gruppnivå ställa in vilken e-postadress som modererar skräpposten.
vi har idag ca 50 vuxna i vår kår.
Nu när Corona dök upp så påskyndades vår implementering av Google plattformen.
Synkningen går bra som det är men jag saknade återställningsinformation på konton när jag började synca konton.
Som scriptet ser ut så uppdateras Googleanvändaren utifrån information från objektet som gommer från maillistan som är angiven userAccountConfig, det innebär att det finns en begränsad mängd data att anväda som källa till uppdateringen. tillexempel så saknas mobilnummer.
Jag har för att kunna uppdatera den informationen på Googlekontot gjort lite ändringar i Användare.gs som innebär att när listorna gås igenom så letar jag upp medlemen i arrayen allmembers och skickar den till funktionerna som skall göra jobbet.
samt att jag använder lite linq/lambda syntax istället för en mängd "for" satser, jag tror att det är lite lättare att följa koden då
Vill ni att jag öppnar en pullrequest för att implementera detta i projektet? och eller delar av det.
Jag har aldrig vare sig programmerat mot Googles plattform eller bidragit med kod i Github tidigare.
Jag har alltid varit en ensamvarg i mina projekt
MVH
Lasse Skogshus
Svarar man på ett mail som kommer till en lista, så svarar man alltid till listan.
Det går inte att ändra fältet för to-mailadressen i gmail (det fältet verkar helt låst).
Det hade varit najs om man kunde ändra den inställningen i kalkylarket, ändrar jag inställningen manuellt i grupper så verkar den skrivas över vid nästa synk.
Vi har några användare som tas bort/läggs till vid varenda syncning. Samtliga användare med detta problem har en gmail-address.
För gmail-adresser, så ignoreras punkten, dvs namn.efternamn är samma som namnefternamn och n.a.m.n.e.f.t.e.r.n.a.m.n, allting hamnar i samma inbox.
I loggen Audit-loggen i administratörsappen så ser det ut så här (äldsta even överst, nyast längst ner)
fornamn.efternamn tas bort från lista
fornamnefternam läggs till lista
Detta upprepas varje dag.
De adresser där vi sett detta problemet är anhörigadresser. Maillistorna synkas med tom synkinställning och begränsa åtkomst satt till: ALL_IN_DOMAIN_CAN_POST.
Tittar man i grupperna, så adresserna verkligen tillagda med "fornamnefternamn" i grupperna.
Hej, jag tänkte köra en uppdatering manuellt idag, behövde debugga inställningarna i mitt excelark.
Nu avslutas synkningen av grupper med fel av typen:
HttpResponseException: Response Code: 429. Message: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="initial-scale=1"><title>https://admin.googleapis.com/admin/directory/v1/groups?alt=json&domain=blablabla.se&maxResults=150&quotaUser=XXXXXXXXXXXXXXXXXXXX</title></head>
<body style="font-family: arial, sans-serif; background-color: #fff; color: #000; padding:20px; font-size:18px;" onload="e=document.getElementById('captcha');if(e){e.focus();}">
<div style="max-width:400px;">
<hr noshade size="1" style="color:#ccc; background-color:#ccc;"><br>
<form id="captcha-form" action="index" method="post">
To continue, please type the characters below:<br><br>
<img src="/sorry/image?id=bla bla blaj&hl=en&continue=https://admin.googleapis.com/admin/directory/v1/groups%3Falt%3Djson%26domain%3blablabla.se%26maxResults%3D150%26quota....
checkIfGroupExists @ Grupper.gs:1416
checkIfEmailIsAGroup @ Grupper.gs:1401
getEmailadressesToSendSpamNotification @ Grupper.gs:1163
updateGroup @ Grupper.gs:492
Grupper @ Grupper.gs:214
Vet inte om det här är tekniskt möjligt, men frågar.
Det är inte alla i scoutkåren som har tillgång till Google Workspace som använder det, men kontona skapas ändå. Ibland medför det förvirring då adressen dyker upp i listor även om det inte finns någon som läser den.
Är det möjligt att som standard ha kontot inaktivt, på något sätt, tills dess att personen loggat in (via ScoutID)?
I enlighet med rekommendationen, kör jag raderna i grupper som olika triggers för att det inte ska ta för lång tid.
Det skulle vara trevligt om man kunde välja rader baserat på tex en tag (ny kolumn) så att man slapp uppdatera på två eller fler ställen när man lägger in en rad i kalkylarket.
Jag har valt att köra rader som motsvarar olika grupperingar, och att sätta en tag på de raderna och att kunna välja ut rader för körning baserat på den hade varit guld.
T.ex.
I kalkylarket har jag ett antal rader som rör kårens avdelningar. Jag har valt att köra alla avdelningar i en batch och kallar den funktionen Grupper_Avdelningar
function Grupper_Avdelningar() {
Grupper(17, 29);
}
Problemet är nu att urvalet baserar sig på radnummer och om jag tar bort, infogar, eller lägger till rader i kalkylarket, måste jag uppdatera skriptet. Skulle vara sjukt bra om man istället kunde köra grupper typ så här:
function Grupper_Avdelningar() {
var rader = HamtaGruppRaderForTag("Avdelningar")
Grupper(rader);
}
När jag försöker köra Grupper()
funktionen får jag felmeddelandet nedan. Tidigare har jag kört scriptet tidsstyrt och det har fungerat. Vad jag vet så har felet uppstått utan att jag har ändrat något. Jag får samma problem om jag kör scriptet manuellt, som om jag kör det tidsstyrt.
TypeError: Cannot read property 'delivery_settings' of undefined
at getMembertype(Grupper:637:53)
at updateGroup(Grupper:497:27)
at Grupper(Grupper:187:7)
Migrerade just till version 2.0, från 1.7 via 1.8.
Pallade ärligt talat inte flytta alla scriptfiler in i kalkylarket, men det behövde jag inte då jag kunde dra in alla scriptfilerna som ett bibliotek och enkelt skapa en lokal skriptfil som bara innehåller det jag vill köra.
Så nu har jag alla Scoutnet Sync skripten i ett projekt och exponerar det som ett bibliotek, drar in detta i kalkylarket där jag skapat en enda fil 'Mina_funktioner.gs' där jag exponerar de funktioner jag vill köra på timer.
Min tanke var nu att det skulle vara sjukt nice om man istället för att kopiera scripten kunde dra in dem som ett bibliotek, då behöver alla inställningar flyttas ut ur biblioteket (Konfiguration.gs) kanske som ett settingsobjekt som sedan kunde skickas med vid körningar, på så sätt kunde jag som konsument enkelt välja vilken version av scripten jag ville köra med minimal insatts. Allt jag behöver är ett Script Id för att dra in scriptet.
Kanske funkar detta inte mellan google domäner, kanske är det förknippat med sjuka säkerhetsproblem, men jag villa bara så ett frö som skulle kunna underlätta för alla.
Jag har en fungerande testmedlemslista men har problem att få bifogat dokument att fungera, möts av följande felmeddelande när jag anropar synkroniseraMedlemslistorVissaRaderUppdateraOchSkicka1
: [TypeError: Cannot read properties of null (reading 'getText')]
. Mejlet går iväg, men det finns ingen bifogad PDF.
Jag har skapat ett Google Dokument med lite text i för att testa, typ Hej {{Förnamn}} {{Efternamn}}
, och kopierat dokumentets ID till kolumn F ("Koppla dokument").
Antagligen uppstår felet på
. Observera att jag kör versionen vi diskuterade i samband med #81.is:issue is:open vi har Google grupper som vi vill bara organisationen ska kunna skicka till så jag gjorde dom inställningarna i mitt kalkylark. Med @ i "Kan skicka" men detta gorde också att andra grupper inte kan skicka till den utan bara använder. Har jag gjort fel eller är detta något som går att lösa?
Vore kanon om man kunde styra listorna mot alternativ e-post enbart ungefrä som -f fungerar idag.
I dessa tider kan det vara fördelaktigt att bjuda in ALLA medlemmar (inte bara ledare/funktionärer). Kanske kan scouter och (ledare/funktionärer) skiljas åt i två olika organisationer, så det går att slå av/på appar beroende på detta (ex: scouter har bara google chat/meet). Måste också hantera flytt mellan dessa organisationsenheter då någon går från scout->ledare, exempelvis.
Det vore praktiskt att kunna ställa synk-inställningar per importerad lista.
Ett tydligt exempel är vår medlemslista där vi för ledare och scouter över 18 år bara vill skicka till primär epostadress medans för scouter under 18 vill skicka till primär + anhörig.
Det går göra med att skapa två listor och slå ihop dem i google till en tredje men det känns lite onödigt.
Man skulle kunna tänka sig att ha synk-inställningarna inom []:ar för att enkelt kunna urskilja dem.
Exempel: 1234 [-m], 4321 [-amf]
Ett förslag: kan vi synka in G Suiteanvändarnas mobilnummer till deras profiler?
Det skulle göra t ex katalogen mycket användbar.
Våra föräldrar har gjort val för hur de ska skickas mail till dem i scoutnet.
Man kan ju där välja om primär eller vilka anhörig-adresser som ska användas.
Det vill vi ju gärna använda och jag trodde att "-e" skulle göra detta. Men jag får inga adresser översyncade då.
Har jag missuppfattat vad e ska ge?
ska man skriva "-me" kanske?
När synk körs så skapas en länk i kalkylarket, åtminstone första gången det körs för en grupp. Tas den länken bort ersätts den inte.
Skapar jag en ny grupp stämmer inte länken som skapas, den hamnar i gruppens "inkorg" istället för sida med lista över medlemmar.
Hej,
Jag uppdaterade nyligen till 3.0.0 och passade då på att ändra så biblioteket används. I samband med det tog jag bort alla filer utom Konfiguration.gs
från Apps Script eftersom det, som jag förstod det, var den enda filen som ska behövas. Det jag inte uppfattat är schemaläggning. Eftersom det nu är ett bibliotek kommer jag inte åt funktioner för att uppdatera användare och grupper.
Hur ser jag till att skript(en) körs regelbundet, och går det att se logg för körningar?
Om en person byter namn i Scoutnet så blir uppdateringen felaktig.
rad 436 i Anvandare.gs ska vara:
user.name.familyName = member.last_name;
inte
user.name.givetName = ...
Jag har fått följande fel de senaste två dagarna (kör inte den senaste versionen).
GoogleJsonResponseException: API-anrop till groupsSettings.groups.patch misslyckades med felet:
Invalid value at 'group_settings.include_custom_footer' (TYPE_STRING), true
Invalid value at 'group_settings.allow_external_members' (TYPE_STRING), true
Invalid value at 'group_settings.include_in_global_address_list' (TYPE_STRING), true
at changeGroupPermissions(Grupper:915:30)
at updateGroup(Grupper:601:3)
at Grupper(Grupper:187:7)
Jag tolkar det som att dessa tre parametrar förväntas vara av typen STRING.
Dessa värden sätts som booleans (true, false) och inte ("true", "false") i koden.
Jag har försökt söka i googles dokumentation men blir inte klok på om parametrarna ska anges som booleans eller strängar.
Jag testat att ändra till strängar, och då får jag inte detta felet längre.
Det listas flera bra exempel på hur man skulle kunna använda medlemslistor för utskick och sedan hänvisas men till en tom sida för mer detaljer.
Medlemslistor Hur gör jag för att
Jag är intresserad av att sätta upp några listor och kan tänka mig att hjälpa till att dokumentera hur man gör. Kontakta mig om det är intressant.
Vi har problem med att inställningen vi har valt på respektive grupp under "Gruppinställningar>E-postalternativ>Lägg upp svar till" skrivs över vid synkning.
Jag har lyckats hitta raden som är orsaken till detta, 1033 i Grupper.gs - kan jag bara kommentera bort denna eller kommer jag få andra problem då?
Det ultimata hade varit om standardinställningen på nya listor är "endast meddelandets författare", men att inställningen får vara kvar om den skrivs över via Google Grupper.
Får detta error när jag försöker implementera skriptet. Vad kan man göra åt det?
Starta | Funktion | Felmeddelande | Utlösare | Sluta |
---|---|---|---|---|
2018-04-25 18:18 | AccountsAndGroups | ReferenceError: "AdminDirectory" har inte definierats. (rad: 263, fil: Användare) | time-based | 2018-04-25 18:18 |
I korthet: för att sätta recoverPhone kräver Google att numret är på formatet E.164. intphonenumber() försöker nog skapa sådana telefonnummer men lyckas inte alltid varpå uppdateringen av användaren inte lyckas.
Ett exempel på ett telefonnummer som inte är rätt "46 70 7560000" (jag har skrivit nollor på slutet istf det riktiga numret).
Antingen bör recoveryPhone inte sättas (om man inte kan garantera rätt format) eller så kan man prova att sätta recoveryPhone i ett eget anrop så att inga andra uppdateringar av användaren försvinner pga detta problem.
Egentligen inte ett syckproblem än, men det vore bra om coutnet kunde leverera smeknamn så man kan lägga till det som alias i google/o365
Hej!
Jag har ett antal listor som som går till alla föräldrar på en avdelning, och en lista som går till alla adresser i kåren.
På något sätt vill jag få till att begränsa så att endast de som har ett gsuite-konto ska kunna skicka till listan (jag la till @ i kan skicka/sync). Det fick då till följd att personer med ett gsuite-konto som INTE är med på listan från scoutnet blev tillagda i gruppen (med rollen manager).
Innebär det att dessa personer kommer få mailen som skickas till listan också (det vill jag inte :)
Det här verkar vara ett användbart system och jag försöker sätta upp det. Tack för ett stort jobb!
Men, det har varit svårt för mig att förstå principerna och hur man får tag på listid, rule_id etc från Scoutnet, så jag skulle vilja ha mer dokumentation, om grundläggande kopplingar, var man får listid, rule_id etc ifrån och hur man gör när man
redan har manuellt kontrollerade listor och grupper tidigare.
Jag tror att ett bra sätt att få till detta vore att skriva några ämnen i Wiki'n här för det här projektet.
Här är några frågor/områden som jag skulle vilja ha mer info om:
Jag har till slut tagit mig rätt långt, så det går ju uppenbarligen, men lite mer information hade sparat mig en hel del tid. När jag väl lärt mig lite mer själv kan jag kanske bidra med en Wiki-artikel om det finns intresse.
Tycker jag har följt readmen korrekt, men får inte synkningen av grupper att fungera.
Användarna går bra man när jag kör grupperna får jag
"API call to directory.users.list failed with error: Not Authorized to access this resource/api (line 620, file "Grupper")"
Något tips på vad jag gjort fel?
När jag kollar på kalkylarket för grupper ser jag att kolumnen "E-post skräppostmoderator" (kolumn M) får röd bakgrund vid synk. Stämmer det verkligen, eller borde det hamna i nästa kolumn (N = "Felmeddelande")?
Jag uppdaterade till 1.7.0 igår, tror det var så innan men är inte säker. Jag återställde alla bakgrundsfärger och körde om AnvandareOchGrupper
, ifall det var något som låg kvar sedan tidigare, men samma kolumn får röd bakgrund igen.
Färgen sätts alltså för rader 3 fram till och med sista raden som innehåller en grupp.
Jag var inne och kollade lite i kodbasen och kände en väldig avsaknad av olika log-nivåer. Exempelvis finns det två i dagsläget;
Logger.log
)Logger.error
då ett mail skickas iväg)Jag känner speciellt att en mellannivå (eller flera) saknas, exempelvis en Logger.warn
som ser till att det går iväg ett mail om skriptet körs via trigger så att man kan gå in och kolla men utan att skriptet för den sakens skull behöver krascha.
Skulle vilja ha lite fler exempel på hur grupper konfigureras i kalkylark.
Följande två fall är jag intresserad av, kanske är fler som söker svar på det:
Skrev mail till Emil den 2019-09-27 med följande innehåll (klippt ut det jag anser är viktigt i frågan)... Vid behov går det att få se delar av min kod för felsökning - dock kommer API-nycklar att ändras efter hand i så fall...
Felmeddelandet jag får är:
API-anrop till directory.users.list misslyckades med felet: Invalid Input:
INVALID_OU_ID (line 426, file "Användare")
Jag har testat lite med att synka kontakter men är lite osäker på användarvänligheten. Har jag förstått det rätt är nuvarande lösning att inom kåren dela ett kalkylark där användaren skriver in sin e-postadress och lösenord (eller lämnar lösenord blankt för att få det skickat till sig), trycker på en knapp, så ska synkronisering aktiveras.
Det jag funderar på är:
Kalkylarket ska visserligen bara delas inom kåren, och lösenordet ger en begränsad åtkomst, men det är kanske ändå bra att hålla nere risken att något går fel.
Ett alternativ skulle vara att ersätta kalkylarket som delas med ett formulär. Parametrarna kan antingen sättas i ett skript, eller så används funktionen med förifyllda data. Det är något jag börjat kolla på, men kommer behöva skriva om delar av Kontakter-Anvandare.gs
för att det ska fungera.
Jag ser egentligen två nackdelar:
Annars kanske det går att använda Google Sites? Vet inte om det är lika enkelt att dela mellan kårer.
Har sedan några dagar sedan fått felmeddelande när skriptet körs. Idag försökte jag uppdatera från version 1.7.0 till 1.8.0, men får följande fel när jag försöker synka grupper:
GoogleJsonResponseException: API-anrop till directory.members.list misslyckades med felet: Resource Not Found: groupKey
at getGroupMembers(Grupper:381:35)
at updateGroup(Grupper:543:23)
at Grupper(Grupper:219:7)
Förslag på var jag ska börja felsöka?
Ett tips på att göra så att kåren får in alla medlemmar från scoutnet som kontakter i G-suite i en katalog så man kan skicka till enskilda scouter vid tillfälle. Just detta har min kår ett behov av.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.