SlideShare a Scribd company logo
Tworzenie chatbotów
z BotMan
Adam Matysiak
CTO / Team Leader
adam@highsolutions.pl
Czym są chatboty?
Definicja:
“Konwersacyjny interfejs
użytkownika służący do interakcji
z programem komputerowym”
Do czego możemy je wykorzystać?
- Automatyczne/interaktywne deploymenty
- Działania DevOps
- Wsparcie sprzedaży (E-commerce)
- Wsparcie działu obsługi klienta
- Brand marketing
- Promocja bloga/treści
- Usługi typu self-service
- Fun
- … ?
Przykłady zastosowań
https://highsolutions.pl/blog/wpis/7-zastosowan-chatbota-
o-ktorych-musisz-wiedziec-prowadzac-biznes
Czy to już czas?
“Chatbot Market Size Is About To
Reach $1.25 Billion By 2025”
GrandViewResearch, sierpień 2017
Skuteczność
Źródło danych: https://neilpatel.com/blog/open-rates-facebook-messenger
BotMan
composer create-project --prefer-dist botman/studio your-awesome-bot
Wymagania: PHP >= 7.0
● https://botman.io/ - Dokumentacja / Demo
● https://buildachatbot.io/ - Kurs video
● https://playground.botman.io/ - On-line IDE
● https://christoph-rumpel.com/build-chatbots-with-php - E-book
Dostępne usługi
- Amazon Alexa
- Cisco Spark
- Facebook Messenger
- HipChat
- Kik
- Microsoft Bot Framework
- Nexmo
- Slack
- Telegram
- Twilio
- WeChat
Podstawy działania
1. Słuchanie 🙉
2. Przetwarzanie 🌀
3. Odpowiadanie 📢
OK, to jak działa chatbot?
Usłysz i odpowiedz...
plik botman.php w katalogu routes
$botman->hears('Kto dziś wygra mecz?', function ($bot) {
$bot->reply('LECH!');
});
// Process incoming message
$botman->listen();
Przesłanie do kontrolera
$botman->hears('Kto dziś wygra mecz?', 'SomeNamespaceLechController@respondAboutWinningToday');
class LechController {
public function respondAboutWinningToday($bot) {
$bot->reply('Oczywiście, że KKS!');
}
}
Parametry i wyrażenia regularne
$botman->hears('lubię {team}', function ($bot, $team) {
$bot->reply('Twoja ulubiona drużyna to: '. $team);
});
$botman->hears('.*(KKS|Lech|Poznań|Kolejorz).*', function ($bot) {
$bot->reply('Zdobyte mistrzostwa Polski: 1983, 1984, 1990, 1992, 1993, 2010, 2015');
});
$botman->hears('Chcę kupić ([0-9]+) bilet(y|ów)', function ($bot, $number) {
$bot->reply($number .' - tyle biletów zamawiam dla Ciebie. Proszę czekać...');
});
Można też przyjmować załączniki
$bot->receivesImages(function($bot, $images) {
foreach ($images as $image) {
$url = $image->getUrl(); // The direct url
$title = $image->getTitle(); // The title, if available
$payload = $image->getPayload(); // The original payload
}
});
Odpowiadanie
$botman->hears('Kto dziś wygra ważny mecz?', function (BotMan $bot) {
$bot->reply("LECH!");
$bot->reply("Kto?");
$bot->typesAndWaits(2); // 2 sekundy pokazuje, że pisze...
$bot->reply("LECH!");
});
Odpowiadanie obrazkiem
use BotManBotManMessagesAttachmentsImage;
use BotManBotManMessagesOutgoingOutgoingMessage;
$botman->hears('Pokaż herb', function (BotMan $bot) {
// Create attachment
$attachment = new Image('https://www.lechpoznan.pl/view/basic/images/favicon/facebook_200x200.png');
// Build message object
$message = OutgoingMessage::create('Herb Lecha Poznań')
->withAttachment($attachment);
// Reply message object
$bot->reply($message);
});
Konwersacje
$botman->hears('Chcę założyć kartę kibica', function($bot) {
$bot->startConversation(new AccountRegisterConversation);
});
Konwersacje
class AccountRegisterConversation extends Conversation
{
protected $name;
protected $email;
public function run()
{
$this->askName();
}
public function askName()
{
$this->ask('OK, jak się nazywasz?', function(Answer $answer) {
$this->name = $answer->getText();
$this->say('Dziękuję za odpowiedź: '. $this->name);
$this->askEmail();
});
}
public function askEmail()
{
$this->ask('Podaj proszę adres e-mail by dokończyć rejestrację', function(Answer $answer) {
$this->email = $answer->getText();
// ... sending e-mail
$this->say('Dziękuję. Mail z potwierdzeniem został wysłany na: '. $this->email);
});
}
}
Pytania
public function askWhoWillWinNextMatch()
{
$this->ask('Kto w niedzielę wygra mecz?', function (Answer $response) {
$this->say('Świetnie, Twoja odpowiedź to - ' . $response->getText());
});
}
Pytania z opcjami wyboru
public function askForNextMatchWinner()
{
$question = Question::create('Kto wygra mecz w niedzielę?')
->fallback('Nie udało się odpowiedzieć...')
->callbackId('who_will_win_next_match')
->addButtons([
Button::create('Lech')->value('lech'),
Button::create('Jagiellonia')->value('jaga'),
]);
$this->ask($question, function (Answer $answer) {
// Detect if button was clicked:
if ($answer->isInteractiveMessageReply()) {
$selectedValue = $answer->getValue(); // will be either 'lech' or 'jaga'
$selectedText = $answer->getText(); // will be either 'Lech' or 'Jagiellonia'
}
});
}
Pytania ze wzorcami
public function askWhoWillWinNextMatch()
{
$this->ask('Kto w niedzielę wygra mecz? Lech czy Jagiellonia?', [
[
'pattern' => 'kks|lech|poznań|kolejorz',
'callback' => function () {
$this->say('Świetnie, że nadal w nas wierzysz!');
}
],
[
'pattern' => 'jagiellonia|białystok|jaga',
'callback' => function () {
$this->say(':(. Nadzieja umiera ostatnia!');
}
]
]);
}
Dane użytkownika
/**
* Retrieve User information.
* @param IncomingMessage $matchingMessage
* @return UserInterface
*/
public function getUser(IncomingMessage $matchingMessage)
{
return new User($matchingMessage->getSender());
}
// Access user
$user = $bot->getUser();
Cache
$storage = $botman->userStorage();
$storage = $botman->channelStorage();
$storage = $botman->driverStorage();
$bot->userStorage()->save([
'name' => $name
]);
$bot->userStorage()->all();
$userInformation = $bot->userStorage()->find($id);
$name = $userInformation->get('name');
$bot->userStorage()->delete();
NLP
Hej, w niedzielę idę na mecz Lech - Jagiellonia o 18:00.
{
"intent": "create_meeting",
"entities": {
"name" : "Mecz Lech - Jagiellonia",
"invitees" : [],
"time": "2017-02-11 18:00:00"
}
}
Middleware
Testowanie
/** @test */
public function test_simple_reply()
{
$this->bot
->receives('Kto dziś wygra mecz?')
->assertReply('LECH!');
}
/** @test */
public function test_image_reply()
{
$this->bot
-
>receivesImage(['https://www.lechpoznan.pl/view/basic/images/favicon/facebook_200x200.png'])
->assertReply('To jest logo Lecha Poznań');
}
Testowanie
/** @test */
public function test_conversation()
{
$this->bot
->receives('Kto dziś wygra ważny mecz?')
->assertReplies([
'LECH!',
'Kto?',
])->receives('LECH')
->assertReply('Alleluja, alleluja...');
}
Web driver
Web widget
NLP model
Messenger / Button Template
$bot->reply(ButtonTemplate::create('Jakie wpisy chcesz zobaczyć?')
->addButton(ElementButton::create('Biznes')->type('postback')->payload('biznes'))
->addButton(ElementButton::create('IT')->url('https://highsolutions.pl/blog/kategoria/it'))
->addButton(ElementButton::create('PM i UX')->type('postback')-
>payload('pm-ux'))
);
Messenger / Generic Template
$bot->reply(GenericTemplate::create()
->addElements([
Element::create('BotMan Documentation')
->subtitle('All about BotMan')
->image('http://botman.io/img/botman-body.png')
->addButton(ElementButton::create('visit')
->url('http://botman.io')
)
->addButton(ElementButton::create('tell me more')
->payload('tellmemore')
->type('postback')
),
Element::create('BotMan Laravel Starter')
->subtitle('This is the best way to start...')
->image('http://botman.io/img/botman-body.png')
->addButton(ElementButton::create('visit')
->url('https://github.com/botman/botman')
),
])
);
Messenger / List Template
$bot->reply(ListTemplate::create()
->useCompactView()
->addGlobalButton(ElementButton::create('view more')->url('http://buildachatbot.io'))
->addElement(
Element::create('BotMan Documentation')
->subtitle('All about BotMan')
->image('http://botman.io/img/botman-body.png')
->addButton(ElementButton::create('tell me more')
->payload('tellmemore')->type('postback'))
)
->addElement(
Element::create('BotMan Laravel Starter')
->subtitle('This is the best way to start...')
->image('http://botman.io/img/botman-body.png')
->addButton(ElementButton::create('visit')
->url('http://botman.io')
)
)
);
Messenger / Media Template
$bot->reply(MediaTemplate::create()
->element(MediaAttachmentElement::create('image')
->addButton(ElementButton::create('Tell me more')
->type('postback')
->payload('Tell me more'))
->addButton(ElementButton::create('Documentation')
->url('https://botman.io/'))));
Messenger Demo Viewer
BotMan Playground
https://buildachatbot.io/playground/your-
first-playground
Nagroda specjalna
Dostęp do BotMan Playground
Pytania?
adam@highsolutions.pl
@AdamMatysiak
chatbot.highsolutions.pl

More Related Content

Similar to Laravel Poznań Meetup #2 - Tworzenie chatbotów z BotMan

Podstawy php
Podstawy phpPodstawy php
Podstawy php
TomaszWoniakowski1
 
HTML5 - now or later
HTML5 - now or laterHTML5 - now or later
HTML5 - now or later
Kasia Drzyzga
 
WebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, TomorrowWebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, Tomorrow
Marcin Dembowski
 
Podstawy php
Podstawy phpPodstawy php
Podstawy php
TomaszWoniakowski1
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiasto
secman_pl
 
Optymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NETOptymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NET
Bartlomiej Zass
 
Zarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danychZarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danych
MarcinStachniuk
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
Sages
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
intive
 
Red Green Hotfix – złudne poczucie bezpieczeństwa w testach
Red Green Hotfix – złudne poczucie bezpieczeństwa w testachRed Green Hotfix – złudne poczucie bezpieczeństwa w testach
Red Green Hotfix – złudne poczucie bezpieczeństwa w testach
The Software House
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)
Bartlomiej Zass
 
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...Tomasz Kopacz
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
Dawid Rusnak
 
Jarorcon Sp
Jarorcon SpJarorcon Sp
Jarorcon Sp
jarorcon
 
Testowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnychTestowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnych
SecuRing
 

Similar to Laravel Poznań Meetup #2 - Tworzenie chatbotów z BotMan (16)

Podstawy php
Podstawy phpPodstawy php
Podstawy php
 
HTML5 - now or later
HTML5 - now or laterHTML5 - now or later
HTML5 - now or later
 
WebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, TomorrowWebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, Tomorrow
 
Podstawy php
Podstawy phpPodstawy php
Podstawy php
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiasto
 
Optymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NETOptymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NET
 
Zarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danychZarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danych
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
 
Red Green Hotfix – złudne poczucie bezpieczeństwa w testach
Red Green Hotfix – złudne poczucie bezpieczeństwa w testachRed Green Hotfix – złudne poczucie bezpieczeństwa w testach
Red Green Hotfix – złudne poczucie bezpieczeństwa w testach
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)
 
Bartek Dziamski - Kawaskrypty dom marchewki
Bartek Dziamski - Kawaskrypty dom marchewkiBartek Dziamski - Kawaskrypty dom marchewki
Bartek Dziamski - Kawaskrypty dom marchewki
 
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Jarorcon Sp
Jarorcon SpJarorcon Sp
Jarorcon Sp
 
Testowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnychTestowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnych
 

More from HighSolutions Sp. z o.o.

Laravel Poland Meetup #22 - "Kilka slajdów o castowaniu atrybutów w Eloquent"
Laravel Poland Meetup #22 - "Kilka slajdów o castowaniu atrybutów w Eloquent"Laravel Poland Meetup #22 - "Kilka slajdów o castowaniu atrybutów w Eloquent"
Laravel Poland Meetup #22 - "Kilka slajdów o castowaniu atrybutów w Eloquent"
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #16 - "Action-based Laravel"
Laravel Poznań Meetup #16 - "Action-based Laravel" Laravel Poznań Meetup #16 - "Action-based Laravel"
Laravel Poznań Meetup #16 - "Action-based Laravel"
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...
 Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ... Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...
Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
HighSolutions Sp. z o.o.
 
Dni Kariery - "Turkusowe organizacje. Nowoczesny styl zarządzania"
Dni Kariery - "Turkusowe organizacje. Nowoczesny styl zarządzania"Dni Kariery - "Turkusowe organizacje. Nowoczesny styl zarządzania"
Dni Kariery - "Turkusowe organizacje. Nowoczesny styl zarządzania"
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #8 - "Laravel czy lumen, oto jest pytanie"
Laravel Poznań Meetup #8 - "Laravel czy lumen, oto jest pytanie"Laravel Poznań Meetup #8 - "Laravel czy lumen, oto jest pytanie"
Laravel Poznań Meetup #8 - "Laravel czy lumen, oto jest pytanie"
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #8 - "Laravel Telescope - niezastąpione narzędzie do de...
Laravel Poznań Meetup #8 - "Laravel Telescope - niezastąpione narzędzie do de...Laravel Poznań Meetup #8 - "Laravel Telescope - niezastąpione narzędzie do de...
Laravel Poznań Meetup #8 - "Laravel Telescope - niezastąpione narzędzie do de...
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #7 - "PWA - Progressive Web App"
Laravel Poznań Meetup #7 - "PWA - Progressive Web App"Laravel Poznań Meetup #7 - "PWA - Progressive Web App"
Laravel Poznań Meetup #7 - "PWA - Progressive Web App"
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #7 - "Laravel nova - czy to się w ogóle opłaca"
Laravel Poznań Meetup #7 - "Laravel nova - czy to się w ogóle opłaca"Laravel Poznań Meetup #7 - "Laravel nova - czy to się w ogóle opłaca"
Laravel Poznań Meetup #7 - "Laravel nova - czy to się w ogóle opłaca"
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #6 - "Nowości w Laravel 5.7"
Laravel Poznań Meetup #6 - "Nowości w Laravel 5.7"Laravel Poznań Meetup #6 - "Nowości w Laravel 5.7"
Laravel Poznań Meetup #6 - "Nowości w Laravel 5.7"
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
HighSolutions Sp. z o.o.
 
How business and IT should cooperate with each other to verify business model...
How business and IT should cooperate with each other to verify business model...How business and IT should cooperate with each other to verify business model...
How business and IT should cooperate with each other to verify business model...
HighSolutions Sp. z o.o.
 
Jak Biznes i IT powinny współpracować ze sobą by zweryfikować model biznesowy...
Jak Biznes i IT powinny współpracować ze sobą by zweryfikować model biznesowy...Jak Biznes i IT powinny współpracować ze sobą by zweryfikować model biznesowy...
Jak Biznes i IT powinny współpracować ze sobą by zweryfikować model biznesowy...
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #2 - Creating chatbots with BotMan
Laravel Poznań Meetup #2 - Creating chatbots with BotManLaravel Poznań Meetup #2 - Creating chatbots with BotMan
Laravel Poznań Meetup #2 - Creating chatbots with BotMan
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #2 - Koniec CSS? Jest Tailwind!
Laravel Poznań Meetup #2 - Koniec CSS? Jest Tailwind!Laravel Poznań Meetup #2 - Koniec CSS? Jest Tailwind!
Laravel Poznań Meetup #2 - Koniec CSS? Jest Tailwind!
HighSolutions Sp. z o.o.
 
Laravel Poznań Meetup #2 - Wykorzystanie FormRequest w Laravelu
Laravel Poznań Meetup #2 - Wykorzystanie FormRequest w LaraveluLaravel Poznań Meetup #2 - Wykorzystanie FormRequest w Laravelu
Laravel Poznań Meetup #2 - Wykorzystanie FormRequest w Laravelu
HighSolutions Sp. z o.o.
 
Jak błędów unikać prowadząc własną firmę i jak ją rozwijać
Jak błędów unikać prowadząc własną firmę i jak ją rozwijaćJak błędów unikać prowadząc własną firmę i jak ją rozwijać
Jak błędów unikać prowadząc własną firmę i jak ją rozwijać
HighSolutions Sp. z o.o.
 

More from HighSolutions Sp. z o.o. (19)

Laravel Poland Meetup #22 - "Kilka slajdów o castowaniu atrybutów w Eloquent"
Laravel Poland Meetup #22 - "Kilka slajdów o castowaniu atrybutów w Eloquent"Laravel Poland Meetup #22 - "Kilka slajdów o castowaniu atrybutów w Eloquent"
Laravel Poland Meetup #22 - "Kilka slajdów o castowaniu atrybutów w Eloquent"
 
Laravel Poznań Meetup #16 - "Action-based Laravel"
Laravel Poznań Meetup #16 - "Action-based Laravel" Laravel Poznań Meetup #16 - "Action-based Laravel"
Laravel Poznań Meetup #16 - "Action-based Laravel"
 
Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...
 Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ... Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...
Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...
 
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
 
Dni Kariery - "Turkusowe organizacje. Nowoczesny styl zarządzania"
Dni Kariery - "Turkusowe organizacje. Nowoczesny styl zarządzania"Dni Kariery - "Turkusowe organizacje. Nowoczesny styl zarządzania"
Dni Kariery - "Turkusowe organizacje. Nowoczesny styl zarządzania"
 
Laravel Poznań Meetup #8 - "Laravel czy lumen, oto jest pytanie"
Laravel Poznań Meetup #8 - "Laravel czy lumen, oto jest pytanie"Laravel Poznań Meetup #8 - "Laravel czy lumen, oto jest pytanie"
Laravel Poznań Meetup #8 - "Laravel czy lumen, oto jest pytanie"
 
Laravel Poznań Meetup #8 - "Laravel Telescope - niezastąpione narzędzie do de...
Laravel Poznań Meetup #8 - "Laravel Telescope - niezastąpione narzędzie do de...Laravel Poznań Meetup #8 - "Laravel Telescope - niezastąpione narzędzie do de...
Laravel Poznań Meetup #8 - "Laravel Telescope - niezastąpione narzędzie do de...
 
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...
 
Laravel Poznań Meetup #7 - "PWA - Progressive Web App"
Laravel Poznań Meetup #7 - "PWA - Progressive Web App"Laravel Poznań Meetup #7 - "PWA - Progressive Web App"
Laravel Poznań Meetup #7 - "PWA - Progressive Web App"
 
Laravel Poznań Meetup #7 - "Laravel nova - czy to się w ogóle opłaca"
Laravel Poznań Meetup #7 - "Laravel nova - czy to się w ogóle opłaca"Laravel Poznań Meetup #7 - "Laravel nova - czy to się w ogóle opłaca"
Laravel Poznań Meetup #7 - "Laravel nova - czy to się w ogóle opłaca"
 
Laravel Poznań Meetup #6 - "Nowości w Laravel 5.7"
Laravel Poznań Meetup #6 - "Nowości w Laravel 5.7"Laravel Poznań Meetup #6 - "Nowości w Laravel 5.7"
Laravel Poznań Meetup #6 - "Nowości w Laravel 5.7"
 
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
 
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
 
How business and IT should cooperate with each other to verify business model...
How business and IT should cooperate with each other to verify business model...How business and IT should cooperate with each other to verify business model...
How business and IT should cooperate with each other to verify business model...
 
Jak Biznes i IT powinny współpracować ze sobą by zweryfikować model biznesowy...
Jak Biznes i IT powinny współpracować ze sobą by zweryfikować model biznesowy...Jak Biznes i IT powinny współpracować ze sobą by zweryfikować model biznesowy...
Jak Biznes i IT powinny współpracować ze sobą by zweryfikować model biznesowy...
 
Laravel Poznań Meetup #2 - Creating chatbots with BotMan
Laravel Poznań Meetup #2 - Creating chatbots with BotManLaravel Poznań Meetup #2 - Creating chatbots with BotMan
Laravel Poznań Meetup #2 - Creating chatbots with BotMan
 
Laravel Poznań Meetup #2 - Koniec CSS? Jest Tailwind!
Laravel Poznań Meetup #2 - Koniec CSS? Jest Tailwind!Laravel Poznań Meetup #2 - Koniec CSS? Jest Tailwind!
Laravel Poznań Meetup #2 - Koniec CSS? Jest Tailwind!
 
Laravel Poznań Meetup #2 - Wykorzystanie FormRequest w Laravelu
Laravel Poznań Meetup #2 - Wykorzystanie FormRequest w LaraveluLaravel Poznań Meetup #2 - Wykorzystanie FormRequest w Laravelu
Laravel Poznań Meetup #2 - Wykorzystanie FormRequest w Laravelu
 
Jak błędów unikać prowadząc własną firmę i jak ją rozwijać
Jak błędów unikać prowadząc własną firmę i jak ją rozwijaćJak błędów unikać prowadząc własną firmę i jak ją rozwijać
Jak błędów unikać prowadząc własną firmę i jak ją rozwijać
 

Laravel Poznań Meetup #2 - Tworzenie chatbotów z BotMan

  • 2. Adam Matysiak CTO / Team Leader adam@highsolutions.pl
  • 3. Czym są chatboty? Definicja: “Konwersacyjny interfejs użytkownika służący do interakcji z programem komputerowym”
  • 4. Do czego możemy je wykorzystać? - Automatyczne/interaktywne deploymenty - Działania DevOps - Wsparcie sprzedaży (E-commerce) - Wsparcie działu obsługi klienta - Brand marketing - Promocja bloga/treści - Usługi typu self-service - Fun - … ?
  • 6. Czy to już czas? “Chatbot Market Size Is About To Reach $1.25 Billion By 2025” GrandViewResearch, sierpień 2017
  • 8.
  • 9. BotMan composer create-project --prefer-dist botman/studio your-awesome-bot Wymagania: PHP >= 7.0 ● https://botman.io/ - Dokumentacja / Demo ● https://buildachatbot.io/ - Kurs video ● https://playground.botman.io/ - On-line IDE ● https://christoph-rumpel.com/build-chatbots-with-php - E-book
  • 10. Dostępne usługi - Amazon Alexa - Cisco Spark - Facebook Messenger - HipChat - Kik - Microsoft Bot Framework - Nexmo - Slack - Telegram - Twilio - WeChat
  • 11. Podstawy działania 1. Słuchanie 🙉 2. Przetwarzanie 🌀 3. Odpowiadanie 📢
  • 12. OK, to jak działa chatbot?
  • 13. Usłysz i odpowiedz... plik botman.php w katalogu routes $botman->hears('Kto dziś wygra mecz?', function ($bot) { $bot->reply('LECH!'); }); // Process incoming message $botman->listen();
  • 14. Przesłanie do kontrolera $botman->hears('Kto dziś wygra mecz?', 'SomeNamespaceLechController@respondAboutWinningToday'); class LechController { public function respondAboutWinningToday($bot) { $bot->reply('Oczywiście, że KKS!'); } }
  • 15. Parametry i wyrażenia regularne $botman->hears('lubię {team}', function ($bot, $team) { $bot->reply('Twoja ulubiona drużyna to: '. $team); }); $botman->hears('.*(KKS|Lech|Poznań|Kolejorz).*', function ($bot) { $bot->reply('Zdobyte mistrzostwa Polski: 1983, 1984, 1990, 1992, 1993, 2010, 2015'); }); $botman->hears('Chcę kupić ([0-9]+) bilet(y|ów)', function ($bot, $number) { $bot->reply($number .' - tyle biletów zamawiam dla Ciebie. Proszę czekać...'); });
  • 16. Można też przyjmować załączniki $bot->receivesImages(function($bot, $images) { foreach ($images as $image) { $url = $image->getUrl(); // The direct url $title = $image->getTitle(); // The title, if available $payload = $image->getPayload(); // The original payload } });
  • 17. Odpowiadanie $botman->hears('Kto dziś wygra ważny mecz?', function (BotMan $bot) { $bot->reply("LECH!"); $bot->reply("Kto?"); $bot->typesAndWaits(2); // 2 sekundy pokazuje, że pisze... $bot->reply("LECH!"); });
  • 18. Odpowiadanie obrazkiem use BotManBotManMessagesAttachmentsImage; use BotManBotManMessagesOutgoingOutgoingMessage; $botman->hears('Pokaż herb', function (BotMan $bot) { // Create attachment $attachment = new Image('https://www.lechpoznan.pl/view/basic/images/favicon/facebook_200x200.png'); // Build message object $message = OutgoingMessage::create('Herb Lecha Poznań') ->withAttachment($attachment); // Reply message object $bot->reply($message); });
  • 19. Konwersacje $botman->hears('Chcę założyć kartę kibica', function($bot) { $bot->startConversation(new AccountRegisterConversation); });
  • 20. Konwersacje class AccountRegisterConversation extends Conversation { protected $name; protected $email; public function run() { $this->askName(); } public function askName() { $this->ask('OK, jak się nazywasz?', function(Answer $answer) { $this->name = $answer->getText(); $this->say('Dziękuję za odpowiedź: '. $this->name); $this->askEmail(); }); } public function askEmail() { $this->ask('Podaj proszę adres e-mail by dokończyć rejestrację', function(Answer $answer) { $this->email = $answer->getText(); // ... sending e-mail $this->say('Dziękuję. Mail z potwierdzeniem został wysłany na: '. $this->email); }); } }
  • 21. Pytania public function askWhoWillWinNextMatch() { $this->ask('Kto w niedzielę wygra mecz?', function (Answer $response) { $this->say('Świetnie, Twoja odpowiedź to - ' . $response->getText()); }); }
  • 22. Pytania z opcjami wyboru public function askForNextMatchWinner() { $question = Question::create('Kto wygra mecz w niedzielę?') ->fallback('Nie udało się odpowiedzieć...') ->callbackId('who_will_win_next_match') ->addButtons([ Button::create('Lech')->value('lech'), Button::create('Jagiellonia')->value('jaga'), ]); $this->ask($question, function (Answer $answer) { // Detect if button was clicked: if ($answer->isInteractiveMessageReply()) { $selectedValue = $answer->getValue(); // will be either 'lech' or 'jaga' $selectedText = $answer->getText(); // will be either 'Lech' or 'Jagiellonia' } }); }
  • 23. Pytania ze wzorcami public function askWhoWillWinNextMatch() { $this->ask('Kto w niedzielę wygra mecz? Lech czy Jagiellonia?', [ [ 'pattern' => 'kks|lech|poznań|kolejorz', 'callback' => function () { $this->say('Świetnie, że nadal w nas wierzysz!'); } ], [ 'pattern' => 'jagiellonia|białystok|jaga', 'callback' => function () { $this->say(':(. Nadzieja umiera ostatnia!'); } ] ]); }
  • 24. Dane użytkownika /** * Retrieve User information. * @param IncomingMessage $matchingMessage * @return UserInterface */ public function getUser(IncomingMessage $matchingMessage) { return new User($matchingMessage->getSender()); } // Access user $user = $bot->getUser();
  • 25. Cache $storage = $botman->userStorage(); $storage = $botman->channelStorage(); $storage = $botman->driverStorage(); $bot->userStorage()->save([ 'name' => $name ]); $bot->userStorage()->all(); $userInformation = $bot->userStorage()->find($id); $name = $userInformation->get('name'); $bot->userStorage()->delete();
  • 26. NLP Hej, w niedzielę idę na mecz Lech - Jagiellonia o 18:00. { "intent": "create_meeting", "entities": { "name" : "Mecz Lech - Jagiellonia", "invitees" : [], "time": "2017-02-11 18:00:00" } }
  • 28. Testowanie /** @test */ public function test_simple_reply() { $this->bot ->receives('Kto dziś wygra mecz?') ->assertReply('LECH!'); } /** @test */ public function test_image_reply() { $this->bot - >receivesImage(['https://www.lechpoznan.pl/view/basic/images/favicon/facebook_200x200.png']) ->assertReply('To jest logo Lecha Poznań'); }
  • 29. Testowanie /** @test */ public function test_conversation() { $this->bot ->receives('Kto dziś wygra ważny mecz?') ->assertReplies([ 'LECH!', 'Kto?', ])->receives('LECH') ->assertReply('Alleluja, alleluja...'); }
  • 33.
  • 34. Messenger / Button Template $bot->reply(ButtonTemplate::create('Jakie wpisy chcesz zobaczyć?') ->addButton(ElementButton::create('Biznes')->type('postback')->payload('biznes')) ->addButton(ElementButton::create('IT')->url('https://highsolutions.pl/blog/kategoria/it')) ->addButton(ElementButton::create('PM i UX')->type('postback')- >payload('pm-ux')) );
  • 35. Messenger / Generic Template $bot->reply(GenericTemplate::create() ->addElements([ Element::create('BotMan Documentation') ->subtitle('All about BotMan') ->image('http://botman.io/img/botman-body.png') ->addButton(ElementButton::create('visit') ->url('http://botman.io') ) ->addButton(ElementButton::create('tell me more') ->payload('tellmemore') ->type('postback') ), Element::create('BotMan Laravel Starter') ->subtitle('This is the best way to start...') ->image('http://botman.io/img/botman-body.png') ->addButton(ElementButton::create('visit') ->url('https://github.com/botman/botman') ), ]) );
  • 36. Messenger / List Template $bot->reply(ListTemplate::create() ->useCompactView() ->addGlobalButton(ElementButton::create('view more')->url('http://buildachatbot.io')) ->addElement( Element::create('BotMan Documentation') ->subtitle('All about BotMan') ->image('http://botman.io/img/botman-body.png') ->addButton(ElementButton::create('tell me more') ->payload('tellmemore')->type('postback')) ) ->addElement( Element::create('BotMan Laravel Starter') ->subtitle('This is the best way to start...') ->image('http://botman.io/img/botman-body.png') ->addButton(ElementButton::create('visit') ->url('http://botman.io') ) ) );
  • 37. Messenger / Media Template $bot->reply(MediaTemplate::create() ->element(MediaAttachmentElement::create('image') ->addButton(ElementButton::create('Tell me more') ->type('postback') ->payload('Tell me more')) ->addButton(ElementButton::create('Documentation') ->url('https://botman.io/'))));
  • 40. Nagroda specjalna Dostęp do BotMan Playground