Inhoudsopgave:

CovBot - een op WhatsApp gebaseerde chatbot voor COVID 19 Info en meer: 7 stappen
CovBot - een op WhatsApp gebaseerde chatbot voor COVID 19 Info en meer: 7 stappen

Video: CovBot - een op WhatsApp gebaseerde chatbot voor COVID 19 Info en meer: 7 stappen

Video: CovBot - een op WhatsApp gebaseerde chatbot voor COVID 19 Info en meer: 7 stappen
Video: Project Akhir Studi Independen Artificial Intelligence Huawei | Chatbot berbasis WhatsApp 2024, November
Anonim
Image
Image
Maak een Twilio-account aan
Maak een Twilio-account aan

CoVbot is een eenvoudige en intuïtieve op WhatsApp gebaseerde chatbot. Het belangrijkste kenmerk van de bot is:

Het kan u op een eenvoudige en intuïtieve manier de laatste status van COVID-19 in het land van uw keuze geven.

Daarnaast kan de bot leuke activiteiten voorstellen om THUIS te doen, zoals:

  1. Stel een film voor - Een film om te bekijken uit de lijst met Top 10 films, met een kort overzicht van de plot en duur. Aangezien deze lijst niet hardgecodeerd is in software, krijgt u altijd de laatste updates op basis van de huidige trends.
  2. Stel een tv-show voor - Een tv-show om naar te kijken van de meest populaire tv-shows, met een kort overzicht van de plot en beoordelingen. Aangezien deze lijst niet hardgecodeerd is in software, krijgt u altijd de laatste updates op basis van de huidige trends.
  3. Stel een boek voor - Een boek om te lezen uit de Top 10 boekenlijst, met de flaptekst en omslagafbeelding van het boek.
  4. Dagelijkse trainingen - Dit is een video gebaseerd op een 7-daags trainingsschema dat wordt aangeboden door CRANK gym op hun Instagram-account.

Als je deze Instructable leuk vindt, overweeg dan om ervoor te stemmen in de First Item Author Contest. (en ja, dit is mijn eerste instructable, dus als iets niet duidelijk is of meer uitleg nodig heeft, laat het me dan weten in de commentaarsectie en ik kan je helpen:)

Benodigdheden

Dit project is uitsluitend een op software gebaseerd project, dus iedereen die deze instructable volgt met een laptop/desktop-pc/macOS/Linux en internet kan dit project voltooien. Ik zal ook een gedetailleerd gedeelte aan het einde toevoegen om de code / het proces in meer detail uit te leggen voor mensen met enige programmeerervaring. Houd er rekening mee dat dit niet nodig is om het project te voltooien

Moeilijkheidsgraad van het project:

Niet heel makkelijk, maar ook niet heel moeilijk

De hardware die we zullen gebruiken:

  • Een laptop/desktop met Windows/macOS/Linux.
  • Een mobiele telefoon waarop WhatsApp Messenger is geïnstalleerd

De software die we gaan gebruiken:

  1. Python programmeertaal
  2. ngrok - is een tool die wordt gebruikt om ons toegang te geven tot onze server van buiten ons netwerk
  3. Editor naar keuze: (bijv. Notepad++, Sublime Text, Vim etc)

Stap 1: Installeer de benodigde software

Image
Image

In deze stap gaan we het volgende doen:

  1. Installeer Python > 3.6 en test het
  2. Installeer de vereiste python-bibliotheken
  3. Installeer ngrok

Als u beide applicaties hebt geïnstalleerd, kunt u deze stap overslaan

Python installeren:

De hele backend/server-codebase voor dit project is geschreven in Python 3.6. Om onze applicaties uit te voeren, moeten we daarom Python > 3.6 op onze computer hebben geïnstalleerd. Volg de tutorial van CoreySchafer over het installeren van python voor Windows en macOS

U kunt testen of alles correct is geïnstalleerd door het volgende in de cmd/Terminal te typen:

python -c 'print(f"Hallo wereld")'

Als alles correct is geïnstalleerd, moet Hello World op het scherm worden afgedrukt. Als u een ongeldige syntaxisfout krijgt, heeft u de verkeerde versie van python geïnstalleerd. Installeer een versie van python >= 3.6

Installeer de vereiste python-bibliotheken met pip:

We zullen de volgende python-bibliotheken gebruiken om onze software te laten werken:

  1. Flask - Dit is het framework voor onze server
  2. Twilio - Deze bibliotheek biedt een manier voor python om te communiceren met WhatsApp
  3. Verzoek - Deze bibliotheek wordt gebruikt om gegevens van API's op te vragen
  4. BeautifulSoup4 - Deze bibliotheek wordt gebruikt om informatie van websites te schrapen
  5. lxml - Deze bibliotheek wordt gebruikt in combinatie met BeautifulSoup om de relevante informatie uit een website te halen

Om deze bibliotheken te installeren, kunt u het volgende doen:

Open CMD/Terminal en typ de volgende opdracht:

pip install flask, twilio, request, beautifulsoup4, lxml

OF

Download het requirements.txt-bestand en open een terminal in de map waar het bestand zich bevindt en typ:

pip install -r requirements.txt

Installeer ngrok

Met ngrok kunt u een server die op uw lokale computer draait, blootstellen aan internet. Vertel ngrok gewoon op welke poort uw server luistert.

Volg de handleiding op de ngrok-website om ngrok te installeren voor het besturingssysteem dat u gebruikt.

Tip: Stap 3 van de handleiding is niet relevant voor dit project en kan dus worden overgeslagen

Stap 2: Maak een Twilio-account aan

In deze stap gaan we het volgende doen:

  1. Aanmelden voor een Twilio-account
  2. Snelle introductie tot nuttige secties op Twilio's Console

Inschrijven:

In dit project zullen we de Twilio Whatsapp API gebruiken om ons python-programma te verbinden met WhatsApp. Om de Twilio API te kunnen gebruiken, moeten we eerst een account aanmaken op de officiële website van Twilio. Voor een proefaccount biedt Twilio een gratis tegoed van $ 15 dat we kunnen gebruiken.

Snelle introductie:

Nadat u een account heeft aangemaakt, zijn de meest interessante secties van de Twilio-console voor dit project:

Dashboard - Vanuit het dashboard kunt u zien hoeveel tegoed u nog over heeft, u kunt uw projectnaam bewerken en de programmeertaal wijzigen

Whatsapp-subsectie in Programmeerbare SMS-sectie - Vanuit de Whatsapp-sectie van de console kun je toegang krijgen tot de join-in-code voor de bot, het aantal WhatsApp dat we in het project zullen gebruiken om met onze bot te praten en ook het opzetten van de webhook. Meer details over al deze zullen worden beschreven in de volgende stappen

Stap 3: Verkrijg een API-sleutel voor COVID 19-gegevens, films en tv-programma's

Ontvang API-sleutel voor COVID 19-gegevens, films en tv-programma's
Ontvang API-sleutel voor COVID 19-gegevens, films en tv-programma's
Ontvang API-sleutel voor COVID 19-gegevens, films en tv-programma's
Ontvang API-sleutel voor COVID 19-gegevens, films en tv-programma's

Een API-sleutel of interfacesleutel voor applicatieprogrammering is een code die wordt doorgegeven door computertoepassingen. Het programma of de toepassing roept vervolgens de API of de programmeerinterface van de toepassing aan om de gebruiker, ontwikkelaar of aanroepend programma naar een website te identificeren.

We gebruiken een API om informatie te krijgen over de nieuwste COVID 19-status, films en tv-programma's. Om toegang te krijgen tot de API heeft u een sleutel nodig die voor elke gebruiker persoonlijk is. In deze stap krijgen we deze sleutels

API-sleutel voor COVID 19-gegevens ophalen:

  • Log in of meld u aan voor uw RapidAPI-account.
  • Ga daarna naar de COVID-19 API van Gramzivi
  • Scrol omlaag naar het gedeelte 'Headerparameters' van de API-console.
  • Uw API-sleutel moet zichtbaar zijn in het veld "X-RapidAPI-Key".

Krijg API-sleutel voor films en tv-showgegevens:

  • Log in of meld je aan voor je TMDB-account
  • Ga daarna naar je instellingen - API
  • Scroll naar beneden naar de sectie "API Key (v3 auth)"
  • Uw API-sleutel moet eronder zichtbaar zijn

Maak een "config.py"-bestand

We zullen nu een config.py-bestand maken om onze API-sleutels op te slaan. We maken hiervoor een apart bestand aan, omdat API-sleutels vertrouwelijke informatie zijn en als u uw project deelt, moet u uw API-sleutel niet delen.

  • Een nieuwe projectdirectory maken
  • Maak in de nieuw gemaakte map een nieuw bestand met de naam "config.py"
  • Bewerk dit bestand met een editor naar keuze (Sublime, Notepad++) en kopieer en vervang de volgende tekst met relevante informatie verkregen in de vorige stap:

session_key = "geheim" #Dit is niet veilig.. maar alleen om te testen is het ok

rapid_api_key = "" api_key = ""

Bewaar het bestand

Stap 4: Verbind Python en Twilio via Ngrok

In deze stap gaan we het volgende doen:

  1. Download de broncode
  2. Voer het programma uit en stuur het lokale IP-adres door naar een openbaar adres via ngrok zodat we er een verzoek aan kunnen doen
  3. Configureer ons Twilio-account om het verzoek door te sturen naar onze server

Download de broncode voor de bot:

Download alle bijgevoegde bestanden in deze setup naar de projectdirectory die in de laatste stap is gemaakt.

Voer het programma uit:

Ga naar de directory van de broncode in de CMD/terminal en voer het volgende commando uit:

python server_main.py

Zorg ervoor dat je de "config.py" hebt die we in de laatste stap hebben gemaakt, anders krijg je een foutmelding

De uitvoer zou ongeveer als volgt moeten zijn:

* Serving Flask-app "server_main" (lui laden)

* Omgeving: productie WAARSCHUWING: Dit is een ontwikkelserver. Gebruik het niet in een productie-implementatie. Gebruik in plaats daarvan een productie-WSGI-server. * Debug-modus: aan * Draait op https://127.0.0.1:5000/ (Druk op CTRL+C om te stoppen) * Opnieuw opstarten met stat * Debugger is actief! * Debugger-pincode: 740-257-236

Dit betekent dat uw server correct draait op uw lokale netwerk op poort 5000. Om deze server toegankelijk te maken van buiten uw lokale netwerk gebruiken we ngrok

Stuur lokaal IP door naar een openbaar adres via ngrok

Ga naar de map waar je ngrok hebt gedownload via CMD/terminal en voer de volgende opdracht uit:

ngrok http 5000

De uitvoer zou ongeveer als volgt moeten zijn:

ngrok door @inconshreveable (Ctrl+C om te stoppen)

Sessiestatus online Sessie verloopt 7 uur, 59 minuten Versie 2.3.35 Regio Verenigde Staten (vs) Webinterface https://127.0.0.1:4040 Doorsturen _https://d44c955749bf.ngrok.io_ -> _https://localhost:5000_ Doorsturen _https://d44c955749bf.ngrok.io_ -> _https://localhost:5000_ Verbindingen ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00

Kopieer de HTTP-link uit het gedeelte "Forwading" (alleen tot ngrok.io). (Ik heb de _ in dit voorbeeld toegevoegd om te voorkomen dat de instructie het als een link onderschept)

Configureer Twilio om het nieuwe adres te gebruiken om serververzoeken door te sturen naar:

Nu we onze server met succes hebben doorgestuurd om openbaar toegankelijk te zijn, moeten we Twilio zo configureren dat wanneer een verzoek wordt gedaan met behulp van de Twilio Whatsapp API, we het verzoek doorsturen naar onze server. Hiervoor moeten we het volgende doen:

  1. Ga naar de Whatsapp-sectie op Twilio's Console
  2. Navigeer naar de subsectie "Sanbox"
  3. Plak in het tekstvak "WANNEER EEN BERICHT KOMT" de HTTP-link van ngrok gekopieerd met de /sms-extensie (KOPIEER DE _ NIET aan het begin en einde):

_https://d44c955749bf.ngrok.io/sms_

Nu is alles voor de chatbot ingesteld. In de volgende stap kunnen we testen of alles correct werkt

Stap 5: Test onze applicatie

Test onze applicatie
Test onze applicatie
Test onze applicatie
Test onze applicatie
Test onze applicatie
Test onze applicatie

In deze stap gaan we het volgende doen:

  1. Word lid van onze bot met behulp van de toegangscode
  2. Probeer onze applicatie

Word lid van onze bot met behulp van de toegangscode

In dit project zullen we het Whatsapp Sandbox-nummer van Twilio gebruiken voor onze Whatsapp-bot. Voor elke persoon zal dit aantal anders zijn. U kunt uw nummer als volgt vinden:

  • Log in op uw Twilio-account
  • Ga naar Twilio Console -> Whatsapp-sectie -> Sandbox
  • U ziet uw Twilio Sandbox-nummer met de volgende tekst:

Nodig je vrienden uit voor je Sandbox. Vraag of ze een WhatsApp-bericht willen sturen naar:

Vanwege een beveiligingsbeleid van Whatsapp moet iedereen die via Whatsapp met een geautomatiseerde bot wil praten, zich expliciet aanmelden met een code. U kunt uw code achterhalen door in hetzelfde gedeelte te kijken als uw Twilio-sandboxnummer met de tekst:

Nadat u uw Twilio Sandbox Whatsapp-nummer en opt-in-code hebt verkregen, gaat u naar uw mobiele telefoon om de bot te gebruiken en doet u het volgende:

  1. Sla het "Twilio Sandbox Whatsapp-nummer" op bij uw contactpersoon met uw naamkeuze (bijv. CovBot)
  2. Open Whatsapp en stuur het volgende bericht naar die contactpersoon:

meedoen

U zou een bericht als dit moeten zien:

Twilio Sandbox: Je bent helemaal klaar ….

Dit betekent dat je verbinding hebt gemaakt met je bot en klaar bent om het te vragen qs

Probeer onze applicatie:

Om de verschillende functies van uw bot te testen nadat u verbinding heeft gemaakt, stuurt u het volgende bericht naar de bot:

Hoi

U zou de volgende tekst moeten zien:

Welkom bij CoVbot!

Een simpele chatbot die op een simpele, snelle & gemakkelijke manier de laatste updates van COVID-19 kan geven. Omdat we allemaal in quarantaine zitten, kan de bot worden gebruikt om enkele leuke activiteiten voor te stellen om het meeste uit onze tijd thuis te halen, terwijl we ernaar streven onszelf, vrienden en familie te beschermen. We hopen dat je ervan geniet en het nuttig vindt! Stuur 4 om te beginnen!

Nu kun je de optie volgen om de verschillende functies van de bot uit te proberen.

DAT IS HET! Je Whatsapp Chatbot is klaar!!!! Gefeliciteerd

Stap 6: Hoe werkt het en toekomstige verbetering:

Hoe werkt het en toekomstige verbetering
Hoe werkt het en toekomstige verbetering
Hoe werkt het en toekomstige verbetering
Hoe werkt het en toekomstige verbetering
Hoe werkt het en toekomstige verbetering
Hoe werkt het en toekomstige verbetering
Hoe werkt het en toekomstige verbetering
Hoe werkt het en toekomstige verbetering

Dit gedeelte is bedoeld voor mensen die enige ervaring hebben met programmeren in Python. Als je dat niet doet, kun je dit gedeelte overslaan

Code Uitleg

Hoofdlus:

Wanneer een Whatsapp-bericht wordt verzonden naar het nummer van uw Twilio, doet de Twilio API een POST-verzoek naar uw server die u hebt opgegeven. De server is geïmplementeerd met behulp van het Flask-framework en dus kunnen we het Flask Request-object gebruiken om de gegevens op te halen die tijdens het POST-verzoek zijn ontvangen. Op basis van de gegevens (nummers in dit geval) beslissen we welke optie de gebruiker heeft gekozen en geven we de juiste informatie

COVID-gegevens en films en tv-programma's:

De gegevens over COVID 19, films en tv-programma's worden opgehaald uit een API. Ik gebruik de verzoekpython-bibliotheek om de gegevens op te halen en deze vervolgens om te zetten in een JSON-indeling. Dan ontleden ik gewoon de relevante informatie. Voor de films en tv-show heb ik ook de willekeurige python-bibliotheek gebruikt om een willekeurige tv-show en film te kiezen

Boekdetails

Het boeksuggestie-algoritme dat in het project wordt gebruikt, is slechts een webschraper. Ik kon geen API vinden die je een willekeurig boek met details geeft, dus ik schrap gewoon een website met BeautifulSoup4 en met behulp van de lxml-parser extraheer ik de relevante informatie van het boek

Details submenu:

Het implementeren van de submenu's was een beetje lastiger dan de rest, omdat WhatsApp-berichten zijn als sms'en, wat een staatloos protocol is. Om dit op te lossen heb ik twee technieken gebruikt:

  1. Globale variabelen gebruiken om de status van het bericht te onthouden - Dit is alleen geïmplementeerd voor de COVID 19-suboptie. Wanneer een gebruiker de optie "Status van COVID 19 in mijn land" selecteert, wordt een globale variabele met de naam incomplete_message ingesteld op True om aan te geven dat er nog steeds een ander bericht nodig is op basis van de vorige optie. Dan is er een controle in het begin die controleert of een bericht als onvolledig is gemarkeerd. Zo ja, dan wordt ervan uitgegaan dat het bericht de landnaam is voor de COVID-gegevens en geeft de informatie door aan de juiste functie en stelt het globale variabele onvolledige bericht in op False
  2. Cookies en Flask-sessies van Twilio gebruiken - Cookies en Flask-sessies worden gebruikt in het submenu "Suggereer een quarantaineactiviteit" om statefulness te implementeren, net zoals elke webtoepassing op internet het tegenwoordig gebruikt, maar in plaats van dingen zoals uw gebruikersnaam te onthouden of houd rekening met de conversie tussen twee getallen. Als je meer informatie over dit deel wilt, raad ik je aan deze geweldige gids over Twilio Cookies te lezen, geschreven door het Twilio Team

Toekomstige verbeteringen:

  1. Maak gebruik van Object Orientedness van Python en Design Patterns om de code-architectuur en DRYness te verbeteren
  2. Globale variabelen verwijderen
  3. Foutafhandeling kan worden verbeterd
  4. Werk het ngrok-adres automatisch bij met behulp van corn en Twilio CLI
  5. Codedocumentatie

Stap 7: Laatste opmerkingen

Ik hoop dat jullie dit project allemaal leuk vinden. Dit is mijn eerste instructable, dus als iets niet duidelijk is of meer uitleg nodig heeft, laat het me dan weten in de commentaarsectie, en ik kan je helpen. Ook als je dit project hebt gemaakt met een andere techniek of lijst met functies, deel het dan allemaal

Aanbevolen: