Slack er et stadig mer populært verktøy for bedrifter og lag som trenger å kommunisere umiddelbart. Mens det kan - i noen tilfeller - betraktes som en daglig forstyrrelse, har den også et godt automatiseringspotensial, og tilbyr dusinvis av integrasjoner for å holde alt på ett sted, og det er sakte erstattet e-post.
Det er mange måter å integrere systemene dine med slakk; Plattformen gir selv en merket bot som lar deg levere påminnelser, eller meldinger på tvers av digitale arbeidsområdet. Og for enda flere samarbeidsforbedringer, prøv disse skylagring alternativer.
Slack tilbyr ulike enheter som kan betraktes som "bots":
I denne opplæringen ser vi spesielt på 'Bot-brukere', hvordan du programmerer dem (sjekk ut vår guide til Beste kode redaktører å gjøre livet enklere) og få dem til å passe dine behov. Dette forutsetter at du har tilgang til et slakkområde hvor du kan legge til appintegrasjoner. Hvis du ikke allerede er en del av en, er de frie til å skape.
I det som følger, bygger vi en Nodejs-app for å legge til og svare på bestemte meldinger i en slakkkanal. Vi bruker "Slackbots" -modulen, som er en wrapper for slack real-time messaging api.
Også interessert i å lage et nettsted? Velg en strålende Nettstedbygger og topp Web Hosting. Tjenesten å gå med den.
Denne opplæringen forutsetter at du har node installert. Hvis ikke, gjør det nå. Deretter Last ned eiendelene du vil trenge. Vi har gitt deg et utgangspunkt og rammeverk for opplæringen.
Gjennom, bruker vi moduler som "slackbots" og "node-slack-upload". De kan fås ved å kjøre installasjonskommandoen.
npm install
Vi bruker integrasjonen "BOT USER". For å gjøre det må vi få et token ved å gå til 'https: // & lt; youSlackworkspace & gt ;SLack.com / Apps / A0F7ys25r-Bots' og klikk på "Legg til konfigurasjon".
Velg et brukernavn for din bot (vi kan overstyre dette programmatisk på et senere tidspunkt), og bekreft.
Inviter botten til ønsket kanal.
Ved å lage en botbruker får du et token i følgende format:
xoxb-000000-000000-x0x0xxxxx0xxxx0x
Kopier token for neste trinn.
Vi benytter seg av miljøvariabler (en ".ENV" -fil) for å unngå hardkoding og avslørende hemmelige tokens og nøkler, som Slack Token vi har generert, og kanalnavnet i ditt private slakk arbeidsområde.
Gå videre og fyll inn ".NOV" -filen med Token, og navnet på kanalen som du har invitert BOT-brukeren på.
slack_token = xoxb- & lt; yourtoken & gt;
Slack_channel = & lt; channel-navn & gt;
Dette neste trinnet tar oss til 2 filer: 'Index.js', som vi får en kort titt på, og 'bin / lib / bot.js', hvor det meste av vår utvikling finner sted. I indeksfilen merker vi vår bot ved å gi det et navn, som er "WDMBOT".
I 'Bot.js' kontrollerer vi parametrene i hvert tilfelle med navn, token, etc.
// index.js
const bot = krever ('./ bin / lib / bot'). init
('WDMBOT');
//bot.js.
const botparams = {
icon_emoji: ': robot_face:',
AS_USER: FALSK
};
la bot;
Funksjon Initbot (Botname) {
bot = ny slackbot ({
Token: prosess.ENV.SLACK_TOKEN,
Navn: Botname.
});
}
Ta en titt på "SendMessage" -funksjonen. Vi bruker metoden "Postto". Dette vil håndtere å legge ut til enhver type kanal, offentlig eller privat. Hvis du bare vil legge inn til private kanaler, kan du bruke "Posttogroup" i stedet (eller "posttokanal" for en offentlig en). For å sende vår første melding, kan vi legge til kode i 'Initbot'.
Funksjon Initbot (Botname) {
BOT = / * Se ovenfor * /
SendMessage ('Jeg er her!');
}
// nå kjøre 'npm start'
Du burde ha lagt merke til at en melding fra WDMBOT vises i kanalen din. Det er verdt å merke seg at i 'Botparams', 'As_User' er satt til False, som lar oss overstyre navn og bilde. Hvis det er satt til TRUE, vil det bruke navnet og bildet du angir når du får token.
Du kan endre bot emoji til et bilde som så:
const Botparams = {
icon_url: 'https://pbs.twimg.com/
Profil_images / 976112552081010688 /
Wllqvj8d_400x400.jpg ',
AS_USER: FALSK
};
Posting meldinger er nyttig, men for å gjøre botten mer interaktiv, må vi kunne identifisere innlegg fra andre brukere i kanalen. La oss høre på meldingshendelsen, og se hva som skjer når vi skriver inn i kanalen. Vi bør se forskjellige meldingstyper som er logget, som "user_typing" eller "melding".
Funksjon Initbot (Botname) {
BOT = / * Se ovenfor * /
BOT.ON ('Melding', Data = & GT; {
konsoll.log (data);
});
}
Deretter vil vi svare på innkommende meldinger om typen "melding", og kanskje til en bestemt setning eller søkeord, for å unngå å svare på absolutt alt. Vi sørger for å sammenligne små bokstaver hvis vi ønsker å matche et eksakt uttrykk. Vi kunne også se om en melding "inkluderer () et bestemt ord.
BOT.ON ('Melding', Data = & GT; {
hvis (data.type === 'melding') {
hvis (data.text.tolowercase () === 'hvor
er du?') {
SendMessage ('Jeg er her!');
}
}
});
Meldinger sendt av BOT-brukere har ulike egenskaper som en subtype av 'BOT_MESSAGE' og en BOT_ID. Du vil kanskje begrense å svare på bare menneskelige meldinger for å unngå uendelige løkker av bots som svarer på seg selv eller hverandre, hvis deres svar inneholder et av søkeordene du lytter etter.
BOT.ON ('Melding', Data = & GT; {
hvis (data.type === 'melding' & amp; & amp;
SUBTYPE! == 'BOT_MESSAGE') {
hvis (data.text.tolowercase ().
inkluderer ('hallo')) {
SendMessage ('Hei, jeg er en bot!');
}
}
});
For å gi et mer personlig svar, kan du utnytte bruker-IDen til meldingen du svarer på. Slack vil automatisk konvertere en ID til brukernavnet når det er vedlagt i tagger '& lt; @ & gt;'. Identifisere hvem du svarer på, kan være nyttig, spesielt hvis flere kanalmedlemmer samhandler med din bot samtidig.
BOT.ON ('Melding', Data = & GT; {
hvis (data.type === 'melding' & amp; & amp;
SUBTYPE! == 'BOT_MESSAGE') {
hvis (data.text.tolowercase ().
inkluderer ('hallo')) {
SendMessage ('Hello & LT; @ $ {data.user}
& gt; Jeg er en bot! ');
}
}
});
Bots kan også redigere sine svar. Bare sine egne, skjønt. Så hvis du håpet på en typo-spotting bot som ville rette opp meldingene dine automatisk når det ser en feil, er det ikke mulig med gjeldende oppsett.
For å oppdatere meldingen definerer vi en ny funksjon, og en global boolean som vi skal bruke i vår demo.
La changereply = false;
Funksjon UpdateMessage (MessageParams) {
bot.updatemessage (messageparams.channel,
messageparams.ts, messageparams.Text,
Botparams);
}
La oss prøve å oppdatere teksten Bot sender oss. I dette tilfellet, på en meldingshendelse, må vi svare på en innkommende botmelding, så vi samsvarer med den tilstanden for oppdateringen, og vi bruker også tidsstemplet til den opprinnelige meldingen som skal oppdateres. Det er så slakk kan identifisere hvilken melding som skal oppdateres, hvis andre får lagt inn i mellom.
hvis (data.type === 'melding' & amp; & amp; data.subtype! ==
'Bot_Message' & amp; data.Text) {
hvis (data.text.Includes ('oppdatering')) {
SendMessage ('Jeg vil oppdatere i 5
sekunder ');
changereply = sant;
}
}
hvis (data.type === 'melding' & amp; & amp; data.subtype ===
'Bot_Message' & amp; changereply) {
changereply = false;
Setttidout (() = & gt; {
UpdateMessage ({Channel: Data.Channel,
ts: data.ts, tekst: 'Jeg har oppdatert'});
}, 5000);
}
Efemere meldinger er, som navnet kan foreslå, midlertidig. De er også bare synlige for en bruker og kan slettes av dem. Disse typer meldinger kan være nyttige som et tips eller påminnelse som ikke trenger å være permanent.
hvis (data.text.tolowercase (). Inkluderer ('hr')) {
ephemeralMessage ({
Kanal: Data.Kannel,
Bruker: Data.user,
Tekst: 'Hvis du trenger å kontakte HR,
deres e-post er [email protected] '
});
}
// funksjonen vi ringer
Funksjon EfemeralMessage (MessageParams) {
Bot.Postphemeral (MessageParams.Channel,
messageparams.user, messageparams.Text,
Botparams);
}
Ulike metoder vil ta litt forskjellige brukerparameter (enten ID eller navn, som er forskjellig fra Display_name og Real_name). Imidlertid er bare bruker-IDen tilgjengelig på meldingshendelser. Vi kan derfor implementere et brukernavn oppslag ved å få alle brukere og matche IDen.
Async Function Getusername (userid) {
Return venter Bot.Getusers ()
.Den (data = & gt; {
la medlem = data.members.find
(bruker = & gt; {
returnere user.id === userid;
});
Return Member.name;
})
.Catch (err = & gt; console.log (err));
}
Med den nye brukeroppslaget kan vi nå sende direkte meldinger til en bruker, når ephemeral meldinger bare ikke vil gjøre. Vær oppmerksom på at direkte meldinger anses å være en ny / annen kanal, med en annen ID enn den opprinnelige kanalen. Du kan også implementere en kanaloppslag på samme måte som brukeren vi har gjort tidligere.
// i meldingshendelsen
hvis (data.text.tolowercase (). Inkluderer ('bot')) {
Senddm ({
Bruker: Data.user,
Tekst: 'Hvordan kan jeg hjelpe?'
});
}
// funksjonen vi ringer
Async Funksjon SendDM (MessageParams) {
La brukeren = venter Getusername
(messageparams.User);
Returner BOT.POSTMESSAGETOUSER (bruker, melding
Params.Text, Botparams, (Err, Data) = & GT; {
Console.log (Err)
});
}
Bot-brukere har også tillatelser til å laste opp filer og bilder til en kanal. Denne funksjonaliteten er ikke dekket av "slackbots" skjønt, så vi må instantiere en ny opplaster, som vist nedenfor. Forbered også en "Assets" -mappe på prosjektrotten, med noen bilder i den.
La oss forberede et anrop til 'SendImage ()', definert i neste trinn.
// i initbot ()
uploader = ny slackupload (prosess.ENV.
Slack_token);
// i meldingshendelsen
hvis (data.text.Includes ('image')) {
hvis (! data.upload) {
/ * I dette tilfellet er det ingen melding
subtype,
så vi sjekker at det ikke utløses av en
forrige opplastingsmelding * /
la bilde = data.Text.Split ('') ;
SendImage ('Dette er bildet du
ønsket ', bilde);
}
}
Vi laster opp bilder ved hjelp av Uploader og FileSystem (FS) -modulen. Forutsatt at en brukers melding er i formatet "Image & Lt; imagename.extension & gt;", og en slik fil eksisterer i "Eienskap" -mappen, vil bildet bli lest og lastet opp. Hvis ikke, sender vi tilbake en vanlig melding (det kan til og med være en ephemeral en).
Funksjon SendImage (Melding, Bilde) {
uploader.uploadfile ({
Fil: fs.createradstream (sti.join
(__dirname, '../../assets/${image}')),
Mimetype: 'Image / *',
filtype: '*',
Tittel: Bilde,
InitialComment: Melding,
Kanaler: Kanal
}, (feil, data) = & gt; {
hvis (err) {
SendMessage ("Beklager, jeg kan ikke finne
$ {image} ');
}
});
}
Du kan legge inn flere kanaler med samme BOT-bruker, så lenge det er medlem av hver kanal hvor du forventer et svar. La oss lage en "posttytoall" -funksjon og oppdatere miljøvariablene for å ha kanalnavn som kommaseparerte verdier.
constanaler = prosess.ENV.SLACK_KANNEL.
dele(',');
constanal = kanaler ;
Funksjon Posttoall (Melding) {
kanaler.foreach (kanal = & gt; {
bot.postto (kanal, melding, botparams);
});
}
Av og til vil du kanskje bruke kanaler for feilsøking, eller svare på hendelser annerledes med samme bot i forskjellige kanaler. Det er opp til deg å trene din kanals navngivningskonvensjon. Vi antar det følgende eksempel som slack_channel = WDM-opplæring, WDM-Tutorial-Debug.
Funksjon Splitmessages (Melding, DebugMessage) {
kanaler.foreach (kanal = & gt; {
consts msg = kanal.Includes ('debug')
? debugMessage: melding;
bot.Postto (kanal, MSG, Botparams);
});
}
Vi har vært hardkodende svar direkte i meldingen. Går fremover, for å gjøre ting mer håndterbare, vil du kanskje lagre utløsere og svar, enten i en database eller JSON-format, og bytte mellom dem, avhengig av betingelsene som er oppfylt.
// Eksempel svarelement
{
Input: 'HR',
InputMatch: 'Inkluder',
Svar: "Hvis du trenger å kontakte HR,
deres e-post er [email protected] ',
ResponDetype: 'ephemeral'
}
Det finnes noen andre nyttige egenskaper som er tilgjengelige i Slack API. Forhåpentligvis vil denne opplæringen ha gitt en oversikt over hva som er mulig for alle dine Bot-behov. Ytterligere ressurser kan bli funnet ved å lese 'Slackbots' dokumentasjon , eller den fulle Slack API Dokumentasjon .
Denne artikkelen ble opprinnelig publisert i utgave 289 av Creative Web Design Magazine Webdesigner . Kjøp problem 289 her eller Abonner på webdesigner her .
Relaterte artikler:
[1. 3] Atypique-Studio: Inneholder teksturer fra Poliigon.com - Teksturer kan ikke omfordeles Da jeg begynte å jobbe ..
[1. 3] Layout for nettet har alltid vært begrenset, det har aldri vært noe egentlig dedikert til å gjøre innholdet enkelt å v..
[1. 3] Belysning er grunnleggende i noen 3D Art. prosjektet du jobber med. På det mest grunnleggende nivået er de..
[1. 3] Denne WebGl-opplæringen demonstrerer hvordan man lager en 3D-miljøsimulering som viser hva som skjer med verden som CO2-n..
[1. 3] Den beste byen er en travel by, men den travle atmosfæren er ikke en enkel ting å fange vellykket. Men med noen enkle ..
[1. 3] En vakker solnedgang er en slik ting å lure på at alle med et kamera føles nesten pliktbundet til å fange det. ..
[1. 3] Kontrollere kontantstrømmen din er nøkkelen til freelance suksess, og det er noen harde og raske regler for å sikre at d..
[1. 3] Å gjøre realistiske virtuelle klær er en av de mest utfordrende oppgavene siden innovasjonen av CG-animasjonen. Klær er..