KDDIが提供しているTwilioを活用してサービス開発を行う、Smart Communication Award 2014に参加してきた。
https://contact.secure.ne.jp/webapp/form/12402_ajs_152/index.do
ハッカソン参加はこれで2回目である。前回参加したハッカソンの『Rehack』では受賞する事も出来たので今回も何か取れればいいなと希望抱いての参加であった。欲を言えば協賛企業のローソンが提供しているからあげクン1ヶ月分が欲しいなと思っていた。
Smart Communication Award 2014は、電話接続APIのTwilioを用いて各種サービスを作成して競うコンテストである。また、特徴として事業性を重視しており優秀なサービスを開発した人は事業化支援もしてくるという太っ腹なハッカソンでもある。
参加にあたり、まずは事業企画書を提出し1次審査を通過する必要があった。事業企画書なんて書いた事無いので、取り合えずネットで調べまくってやっつけで作成してみた。作成した内容は↓な感じである。
サービス内容は高齢者が抱える悩みを技術が回答する事で解決するという内容である。Twilioを活用する事により普段繋がる事の無い人を繋ぐ事が出来るのではと考えてこのサービスを開発するに思い立った。また、集団で会話する事が出来るTwiloのカンファレンス機能も気になっていたので是非活用してみたいと思っていた。
締め切り間際に応募して4月の初めに一次審査合格の通知が届いた。後で知ったのだが、今回一次審査は40作品程応募があったらしく半分程度が足切りされたらしい。一次審査は誰でも通るだろうと思っていたからちょっとした驚きであった。
参加チームは20チームで自分は個人での参加であった。個人参加者は5人しかおらず、少し寂しかったがお互い一人同士という事もあり、すぐ仲良くなる事が出来た。なお、自分以外は全てフリーランスの人であったので、多分事業化支援を狙ってるんだろうなと思った。結構本気で仕上げてるみたいで、からあげクンを本気で狙っている自分とはやっぱり違うなと感じた。一人異物が混じっているみたいで申し訳なく思いながら黙々と開発を行う事にした。
Twilioはローンチした当初に名前だけ聞いた事があり、実際に使用するのはこれが初めてであった。有料APIである為興味はあったのだが、どうしても敷居が高い感じがしていた。今回は開発用にと2000円分のTwilioポイントを頂けたので、思う存分活用する事が出来た。たぶんこのハッカソンに参加しなければ、Twilioに触る事なかったんだろうなと思うと本当にありがたい事である。
開発にあたり、言語はpython、フレームワークはdjangoにて構築を行った。作成した処理の流れは↓な感じである。
①デジタルデバイト解消サービスに電話する。
②登録を行っている技術者集団にショートメールにて質問対応が可能か連絡する。
③回答者が3人揃ったら質問サービスが開始する。
④ワイワイ・ガヤガヤして終了
といった感じである。
で、この処理がTwilioを活用すると以下のプログラミングにて実現が可能となる。
#_*_ coding:utf-8 _*_ 2 #from django.shortcuts import render 3 from django.http import HttpResponse 4 from twilio_app.models import User,Answerer,Choice 5 from twilio.rest import TwilioRestClient 6 import twilio.twiml 7 import random 8 import re 9 10 # Create your views here. 11 def index(request): 12 my_number="twilioの番号" 13 account_sid = "アカウント" 14 auth_token = "トークン" 15 client = TwilioRestClient(account_sid,auth_token) 16 17 request.session["from"]=request.GET.get("From",None) 18 request.session["my"]=my_number 19 resp = twilio.twiml.Response() 20 21 with resp.gather(number=1,action="http://アドレス/twilio/handle",method="GET") as g: 22 g.say(u"こんにちは。あんしょうばんごうをにゅうりょくしてください。",language="ja-jp") 23 return HttpResponse(str(resp)) 24 25 def handle(request): 26 re1=re.compile(r"\+81") 27 re2=re.compile(r"^0") 28 from_number=request.session.get("from",None) 29 digit_press=request.GET.get("Digits",None) 30 31 sms_from_number="smsを送る為の番号" 32 33 account_sid = "アカウント" 34 auth_token = "トークン" 35 client = TwilioRestClient(account_sid,auth_token) 36 37 resp = twilio.twiml.Response() 38 try: 39 if digit_press == u"9999": 40 ansewerer=Answerer.objects.get(number=re1.sub("0",request.GET.get("From",None))) 41 resp.say(u"こんにちは" + ansewerer.name + u"さん。質問の対応をおねがいします。",language="ja-jp") 42 resp.dial().conference(request.session["my"]) 43 else: 44 user=User.objects.get(number=re1.sub("0",from_number),birthday=digit_press) 45 resp.say(u"こんにちは" + user.name + u"さん。かいとうしゃがそろうまでしばらくおまちください。",language="ja-jp") 46 ansewerers=Answerer.objects.all() 47 for ansewerer in ansewerers: 48 message=client.messages.create(to=re2.sub("+81",ansewerer.number),from_=sms_from_number,body=u"質問サービスです。回答可能ならば" + request.session["my"] + u"へ電話してくださ 49 50 resp.dial().conference(request.session["my"]) 51 except: 52 resp.say(u"あんしょうばんごうにあやまりがあります。もういちどにゅうりょくしてください。") 53 resp.redirect("http://アドレス/twilio/index") 54 return HttpResponse(str(resp))
プログラム行数が100行満たないのにこれらの処理が作成出来るのはTwilioAPIのお陰であるとしか言えない。本当に便利な物を提供してくれたなと関心した。最近あんまり電話を掛ける事が減っている気がするが、このAPIは活用次第によっては色々と使えるのでは無いかと思っている。もっと色々と用途を探っていきたいと思う。
プログラミングの行数が少なかった事もあり一日で開発を終える事が出来た。なので、二日目は提供されるお菓子と弁当を食べるだけとなってしまった。ハッカソンに参加すると食事が提供されるので飲食費はほぼ掛からないと言ってもいい。毎日ハッカソンがあれば食費が掛からなくていいのになーと二日目の昼食のカレーを食べながら考えていた。
で、二日目の15時からプレゼン発表となった。自分は11番めでちょうど中間ぐらいの発表順であった。あまり大勢の人の前で発表する事が無いので、ビビりながらの発表となったが無事に終える事が出来た。正直サーバが不安定でデモが動くのか心配だったがここぞというところではちゃんと動いてくれた。日頃の行いに感謝である。
1時間ぐらいで全ての発表が終わり審査となった。結局今回は受賞とはならなかったが非常に勉強になったので十分元を取った気がする。色々な人の作品を見たが本当に凄いサービスでいっぱいだった。特に大賞を受賞したサービスはデバイスから作成しており非常に完成度が高いなと思った。また、一人での参加者で一緒の部屋で開発を行っている人が受賞することが出来たのも嬉しかった。
土日を使っての開発だったので、正直休みたい気持ちもあったが今回は参加して本当に良かったと思う。同時に自分の技術力の無さも改めて実感する事が出来たので、これを一つの教訓としてまた技術の習得に精進していきたい。