TwilioHackathon - Autopilot, Node.js, PostgreSQL

Moje cesta Twilio Hackathon na DEV 2020

Tento příspěvek popisuje můj příspěvek do soutěže.

Začátky

Ihned poté, co jsem si přečetl příspěvek oznamující hackathon, jsem se rozhodl, že se zúčastním. Nikdy předtím jsem se žádného hackathonu nezúčastnil, a protože na dokončení je celý měsíc, byla to skvělá příležitost.

Pohrával jsem si s pár nápady, ale bohužel jsem nepřišel na žádný průlom. Takže 13. dubna jsem vzal nápad, který mě v tu konkrétní chvíli napadl, a protože jsem měl více volného času než obvykle, začal jsem pracovat na svém příspěvku.

Co jsem postavil

Vytvořil jsem chatovacího robota pomocí Twilio Autopilota, aktuálně integrovaného s WhatsApp sandbox.

Tok uživatele

Jak je zde popsáno, myšlenka je docela jednoduchá.
Po určité formalitě na začátku vám chatovací robot nabízí dvě možnosti.
Buď se přiznat, nebo reagovat na přiznání někoho jiného.

  • Pokud se rozhodnete odeslat přiznání, budete vyzváni k zadání nějakého textu. Poté budete požádáni, abyste počkali, dokud na to někdo nezareaguje.
  • Pokud se rozhodnete reagovat na přiznání, bude vám načteno přiznání ze serveru a jakmile na něj odpovíte, osoba, která je odeslala, bude s vaší odpovědí upozorněna.

Tady je, jak to vypadá v akci:

  1. První osoba se přizná.
  2. Druhá osoba na to reaguje.
  3. První osoba obdrží reakci.

Vnitřní logika

Text přiznání je uložen s jedinečným id , společně s vámi UserIdentifier , což je v případě WhatsApp vaše telefonní číslo s předponou whatsapp: . Je zde také sloupec, který sleduje, kolikrát bylo na toto přiznání zareagováno.

Když se někdo rozhodne reagovat na přiznání, vybere se řádek s nejmenším počtem reakcí a zobrazí se uživateli. Uživatel zadá nějakou reakci. Pak kvůli UserIdentifier to je uloženo podél přiznání, jsem schopen odeslat zprávu přes klienta zpráv Twilio uživateli, který ji odeslal. Nakonec se počítadlo zvýší.

Zásobník

Zpočátku jsem chtěl zůstat pouze u Twilia. Twilio poskytuje funkce, které by se daly použít pro nějakou logiku, ale potřeboval jsem databázi. Myslel jsem, že bych mohl použít DigitalOcean a nastavit nějaký droplet s node.js a postrges, ale poté, co mi bylo řečeno, že můj účet byl zablokován ihned po registraci, rozhodl jsem se přesunout jinam.

Zkoušel jsem funkce Google Firebase a databázi v reálném čase, ale málo rozumím tomu, jak databáze v reálném čase funguje, a můj přístup SQL neseděl dobře. Po více než hodinovém pokusu získat záznam z databáze jsem se ještě jednou, naposledy, přesunul.

Vytvořil jsem aplikaci Heroku s Express pro zpracování požadavků a PostgreSQL pro ukládání dat. Od této chvíle šlo všechno mnohem rychleji.
Bohužel došlo k zádrhelu při zpracování těla požadavku POST, který jsem dostával z Twilio, ale nastavení parseru těla to vyřešilo.

app.use(bodyParser.urlencoded({
    extended: false
}));

Celkem mám tři koncové body, které dohromady

Integrace

Twilio nabízí více kanálů pro Autopilota.

  • Programovatelné zasílání zpráv vyžaduje mobilní číslo. Poskytovaný mezinárodní se v mé zemi nechová dobře. Zprávy jsou odesílány na toto číslo, ale odpověď je přijímána z univerzálního Info V současné době jsem uprostřed procesu vydání regulačního balíčku, který je nutný pro nákup českého čísla.
  • Nastavení Facebook Messenger mi zobrazuje 500 interní chyba serveru . Pravděpodobně je něco špatně na straně Twilio.
  • WhatsApp bude muset formálně schválit můj účet. Ale naštěstí Twilio nabízí sandbox, což je momentálně způsob, jakým testuji svého chatovacího robota.

Jak jsem používal Autopilota

Autopilot používá úkoly . Úlohy lze trénovat zadáním vzorků které je spouštějí. Například můj make_a_confession úkol může být spuštěn, když uživatel řekne 'Chci se přiznat' .
Jsou naprogramovány, co mají dělat, když jsou spuštěny. Následující JSON říká Autopilotu, aby požádal uživatele o vstup a poté provedl požadavek POST na zadaném uri.

{
    "actions": [
        {
            "collect": {
                "name": "collect_confession",
                "questions": [
                    {
                        "question": "What is your confession?",
                        "name": "confession"
                    }
                ],
                "on_complete": {
                    "redirect": {
                        "method": "POST",
                        "uri": "https://twilio-hackathon.herokuapp.com/confession"
                    }
                }
            }
        }
    ]
}

Výsledky

Celý projekt byl velmi zábavný. Platforma Twilio se používala intuitivně, ale občas jsem se přistihl, že se v jejich dokumentaci pohybuji v kruzích. Myslím, že je to něco, co by se mělo zlepšit.

Odkaz na kód

Celý backendový kód je dostupný na GitHubu.

petr7555 / TwilioHackathon

Aplikace pro zasílání zpráv využívající Twilio API vytvořená pro Twilio Hackathon na DEV 2020

Aplikace pro chatovací robot TwilioHackathon 2020

chatovací robot, který spojuje lidi, kteří odesílají přiznání, s lidmi, kteří na ně odpovídají.

Viz příspěvek na DEV.

Nasazení do Heroku

Ujistěte se, že máte nainstalovaný Node.js a Heroku CLI.

Potřebujete základního autopilota Twilio, který používá koncové body v index.js .

Po integraci Autopilota s WhatsApp nastavte SENDER proměnná.

Musíte zadat proměnné prostředí:

TWILIO_ACCOUNT_SID=************************
TWILIO_AUTH_TOKEN=*************************
SENDER=whatsapp:+123456789
$ git clone https://github.com/petr7555/TwilioHackathon.git # or clone your own fork
$ cd TwilioHackathon
$ npm install
$ heroku login
$ heroku create
$ git push heroku master
$ heroku open
Zobrazit na GitHubu