porozmawiaj ze swoją aplikacją, pycon pl 2015

Post on 14-Apr-2017

272 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

POROZMAWIAJZE SWOJĄ APLIKACJĄ

Kamil Kujawiński, Marcin Najtkowski

PyCo

n PL

201

5, 1

6-18

.10.

2015

WPROWADZENIECo to jest twilio?O konkurencyjnych rozwiązaniach, przeciętnym Kowalskim,klientach i dlaczego twilio jest fajne.

CO TO JEST TWILIO?

“Enabling phones, VoIP, and messaging to be embedded into web, desktop, and mobile software.”

ALTERNATYWY 4ALBO 2

Plivo Tropo Twilio

Serwery dedykowane Voxeo AWS

On premises tak tak nie

Zasięg 55 krajów 28 krajów 44 kraje

Obsługiwane języki 16 25 26

przeciętny KOWALSKI

numer telefonu 1 $minuta połączenia 0,065 $

sms 0,034 $

Czy

może?

przeciętny KOWALSKI

Z obliczeń wynika,że owszem.

Czy

może?

NAJWIĘKSI KLIENCI

Coca-Cola

UBER

i inni

DLACZEGO twiliojest FAJNE

dostępne

przystępne

przyjazne

numerekczyli nowy numer telefonu w kilku krokach

APLIKACJA W

MINUT (+30 na drobiazgi)

CO BĘDZIEMY ROBIĆ?

zarejestrujeuczestników

zada mnóstwogłupich pytań

wyłonizwycięzców

aplikacja do przeprowadzenia prostego konkursu, która

słowo

kluc

z ;)

implementacjaw pięciu krokach

REJESTRACJAUCZESTNIKAodbieranie wiadomości sms

<?xml version="1.0" encoding="UTF-8"?><Response> <Message> <Body> Zarejestrowano Twój numer telefonu w konkursie pod nazwą JANUSZ. </Body> </Message></Response>

def register(request): data = request.POST try: phone_number = data['From'] name = data['Body'] except KeyError: return HttpResponseBadRequest()

Participant(phone_number, name).save()

msg = "Zarejestrowano Twój numer telefonu " +\ "w konkursie pod nazwą %s." % name resp = twilio.twiml.Response() resp.message(msg) return HttpResponse(resp)

<?xml version="1.0" encoding="UTF-8"?><Response> <Message> <Body> Zarejestrowano Twój numer telefonu w konkursie pod nazwą JANUSZ. </Body> </Message></Response>

+48 123 456 789

wyślij

na numer

w treści podaj swoje imię

INICJOWANIEPOŁĄCZENIAtelefon do uczestnika

client = TwilioRestClient( settings.TWILIO_ACCOUNT_SID, settings.TWILIO_AUTH_TOKEN)

url = 'https://xyz.ngrok.io/welcome/%s' \ % participant.idstatus_url = 'https://xyz.ngrok.io/call_ended'

client.calls.create( url=url, status_callback=status_url, to=participant.phone_number, from_=settings.TWILIO_CALLING_NUMBER)

PROWADZENIEROZMOWYobsługa dzwoniącego

<?xml version="1.0" encoding="UTF-8"?><Response> <Pause length="2"/> <Say language="pl-PL" voice="alice"> Witaj JANUSZ. Czas na pytania! </Say> <Redirect>/question/42/</Redirect></Response>

def welcome(request, participant_id): participant = Participant.objects.get( id=participant_id)

resp = twiml.Response() resp.pause(length=2) resp.say( 'Witaj %s. Czas na pytania!' % participant.name, voice='alice', language='pl-PL') resp.redirect( '/question/%s/' % participant.id)

return HttpResponse(resp)

<?xml version="1.0" encoding="UTF-8"?><Response> <Pause length="2"/> <Say language="pl-PL" voice="alice"> Witaj JANUSZ. Czas na pytania! </Say> <Redirect>/question/42/</Redirect></Response>

ZADAWANIEPYTAŃ

<?xml version="1.0" encoding="UTF-8"?><Response> <Gather action="/answer/42/" method="POST" numDigits="2" timeout="30"> <Say language="pl-PL" loop="5" voice="alice"> Ile bramek strzelił Robert w 9 minut? 1) 5. 2) 7. 3) 13. </Say> </Gather> <Say language="pl-PL" voice="alice"> Za wolno... </Say> <Redirect>/fail/42/</Redirect></Response>

VOICE = {'voice': 'alice', 'language': 'pl-PL'}

def question(request, participant_id): participant = Participant.objects.get(id=participant_id) resp = twiml.Response() q = participant.next_question() txt = q.prepare_question_and_answers()

answer_url = '/answer/%s/%s/' % ( participant.id, q.id) ask = resp.gather( numDigits=1, action=answer_url, method='POST', timeout=30, ) ask.say(txt, loop=5, **VOICE )

resp.say('Za wolno...', **VOICE ) resp.redirect('/fail/%s/' % participant.id ) return HttpResponse(resp)

<?xml version="1.0" encoding="UTF-8"?><Response> <Gather action="/answer/42/" method="POST" numDigits="2" timeout="30"> <Say language="pl-PL" loop="5" voice="alice"> Ile bramek strzelił Robert w 9 minut? 1) 5. 2) 7. 3) 13. </Say> </Gather> <Say language="pl-PL" voice="alice"> Za wolno... </Say> <Redirect>/fail/42/</Redirect></Response>

jeszcze trochę cierpliwości...

ZBIERANIEODPOWIEDZI

def answer(request, participant_id, question_id): participant = Participant.objects.get( id=participant_id) question = Question.objects.get( id=question_id)

choice = request.POST.get('Digits') if choice: choice = int(choice) answer = question.answers()[choice - 1] participant.save_answer(answer)

resp = twiml.Response() resp.redirect( '/question/%s/' % participant.id) return HttpResponse(resp)

Czego nie pokazaliśmy, a na co jeszcze

WARTO ZWRÓCIĆ UWAGĘ

Dane o rozmowachMożliwy wgląd w informacje o połączeniu (trwającym lub zakończonym).

Zestawianie połączeńOpcja przekierowania połączenia na inny numer.

NagrywanieArchiwizowanie przeprowadzonych rozmów.

Własne komunikatyMożliwość nagrania własnego głosu i odtworzenia go podczas połączeń - alternatywa dla syntezatora.

KolejkiOpcja kolejkowania dzwoniących.

Twilio ClientTelefon w przeglądarce.

BEZPIECZEŃSTWO

BEZPIECZEŃSTWO

HTTPS

weryfikacja requestów z Twilio

przechowywanie auth token

weryfikacja użytkownika po numerze telefonu

copyrightsW prezentacji wykorzystano:

API docs - http://twilio.comZdjęcia:

dziecko https://www.flickr.com/photos/makelessnoise/195088755/CocaCola https://www.flickr.com/photos/28481088@N00/2889066721/Uber https://www.flickr.com/photos/aaronpk/15655460313/kawa https://www.flickr.com/photos/kplanz/6855919503/ droga https://www.flickr.com/photos/chartno3/8164881237/Kowalski, Pingwiny z Madagaskaru - bez wiedzy i zgody DreamWorks Pictures

Szablon prezentacji: http://www.slidescarnival.com

KONTAKTSkargi, zażalenia, wnioskiFeedback dotyczący prezentacji i omawianych zagadnień mile widziany. :)

Kamil KUJAWIŃSKIkamil@kujawinski.net

Marcin NAJTKOWSKImarcin.najtkowski@gmail.com

http://talktoyourapp.herokuapp.com

https://github.com/kkujawinski/talktoyourapp

Dziękujemy za uwagę.Szerokiej drogi!

top related