Upgrade to Pro — share decks privately, control downloads, hide ads and more …

wit.aiで動かす牛たんbot(ECサイトで使える汎用ボット)

 wit.aiで動かす牛たんbot(ECサイトで使える汎用ボット)

下記イベントで使うプレゼン資料です。
http://everevo.com/event/31072

お店があってECサイトを運用している顧客がシンプルに実装できるテンプレボットを目指しました。

wit.aiを使って自然言語解析。解析結果をDBと連携させてユーザへレコメンド。contextを使って返答のバリエーションを豊かにしています。

Hiroka Koizumi

June 08, 2016
Tweet

More Decks by Hiroka Koizumi

Other Decks in Technology

Transcript

  1. ଞͷϘοτΤϯδϯͱൺֱ ϝʔΧʔ "* "1* ྉۚ ೔ຊ ޠର GBDFCPPL . XJUBJ

    ແྉ ରԠ NJDSPTPGU ΓΜͳʢCJOH "[VSF .BDIJOF-FBSOJOHʣ ΓΜͳBQJGPS CVTJOFTT ֹ݄ ରԠ BQJBJ ʁ BQJBJ ແྉ͋ΓΫΤϦ੍ݶ ʁ HPPHMF DMPVENBDIJOF MFBSOJOH Ի੠ɺը૾ɺ຋༁ͷ ΈɻݱࡏϓϨϏϡʔத DMPVE͕༗ྉɺΫϥ ΢υར༻ඞਢ ʁ /55EPDPNP ʁ ࡶஊର࿩ γφϦΦର࿩ʢαϯϓ ϧͷΈʣ ൃ࿩ཧղ ແྉ ରԠ /55EPDPNP ʁ 3FQM"* ʁ ରԠ DIBUCPUJP ʁ 1BOEPSBCPUT"1* ແྉ࿮ͳ͠ ʁ *#. XBUTPO 8BUTPO"1*T FWFOU݄·Ͱ ແྉ ରԠ
  2. public function message_request($post) { $date = date("Ymd"); $post = urlencode($post);

    $url = 'https://api.wit.ai/message?v='.$date.'&q='.$post; $header = array( "Authorization: Bearer " . $this->wit_access_token ); $output = $this->curl_get($url,$header); return $output; } NFTTBHF@SFRVFTU public function curl_get($url,$header){ $curl = curl_init($url); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($curl); return $output; }
  3. public function converse_request($post,$msg_id) { $date = date("Ymd"); $post = urlencode($post);

    $url = 'https://api.wit.ai/converse?v='.$date.'&q='.$post.'&session_id='.$msg_id; $header = array( "Content-Type: application/json", "Accept: application/json", "Authorization: Bearer " . $this->wit_access_token ); $output = $this->curl_post($url,$header); return $output; } DPOWFSTF@SFRVFTU public function curl_post($url,$header,$post=null){ $curl = curl_init($url); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_POST, TRUE); if ( $post ) { curl_setopt($curl, CURLOPT_POSTFIELDS, $post); } curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($curl); return $output; }
  4. public function make_entities($entities) { $i = 0; foreach( $entities as

    $key => $value){ if ( $i != 0 ) { $data .=','; } $value = $entities->{$key}[0]->{value}; $data .=<<<EOM "{$key}":"{$value}" EOM; $i ++; } return $data; } ෳ਺ͷFOUJUJFTʹରԠͨ͠σʔλΛੜ੒
  5. public function converse_follow($entities,$msg_id) { //PHPͰ͸'͸ෆཁ $data ="{".$entities."}"; $date = date("Ymd");

    $url = 'https://api.wit.ai/converse?v='.$date.'&session_id='.$msg_id; $header = array( "Content-Type: application/json", "Accept: application/json", "Authorization: Bearer " . $this->wit_access_token ); $output = $this->curl_post($url,$header,$data); return $output; } DPOWFSTF@GPMMPX
  6. if ( $data ) { //̎ճ໨Ҏ߱ͷ໰߹ͤ͸STOP·Ͱ܁Γฦ͠ while ( $type !=

    'stop') { //ଘࡏ͢Δ৔߹ɺछผΛ൑ผ $json_converse_follow = $this->witAPI->converse_follow($data,$msg_id); $converse_follow = json_decode($json_converse_follow); //࣍ͷߦಈΛ൑ఆʢߦಈ͸̏छྨɺmsg=Ϙοτ͕࿩͢ɺaction=APIͳͲ࣮ߦ݁͠ՌΛ౉͢ɺstop=ऴྃʣ $type = $converse_follow->{type}; $confidence = $converse_follow->{confidence}; if ( $type == 'msg'){ $bot_message = $converse_follow->{msg}; $this->fbAPI->make_post_text($from_user_id,$bot_message); } elseif( $type == 'action' ){ $action = $converse_follow->{action}; $value = $json_converse->entities->{$action}[0]->{value}; $ret = $this->fb->get_payload($action,$value); if ( $ret['PAYLOAD'] ) { //DBʹ֘౰σʔλ͕͋Δ৔߹ $this->fbAPI->make_post_structure($from_user_id,$ret['PAYLOAD'],$ret['ELEMENTS']); }else{ //Ϙοτ͕஌͍ͬͯΔ୯ޠ͚ͩͲ༻్͕ͳ͍৔߹ $bot_message = '͢Έ·ͤΜ...ʮ'.$user_message.'ʯͱ͍͏ݴ༿ͷҙຯ͸ཧղ͍ͯ͠·͕͢ɺ͝ఏҊͰ͖Δ৘ใ͕͋Γ·ͤΜɻ'; $this->fbAPI->make_post_text($from_user_id,$bot_message); } //৽͍͠Entities͕͋Ε͹ૹ৴σʔλʹ௥Ճ if ( $ret['ENTITIES_VALUE']){ $data = $data . ',"'.$ret['ENTITIES'].'":"'.$ret['ENTITIES_VALUE'].'"'; } }elseif ( $type != 'stop' ){ //͍ͣΕʹ΋౰ͯ͸·Βͳ͍ //Ϙοτ͕஌͍ͬͯΔ୯ޠ͚ͩͲ༻్͕ͳ͍৔߹ $bot_message = 'ʮ' . $user_message . 'ʯͰ͢Ͷɻ͓ௐ΂͍ͨ͠·͢ɻগʑ͓଴ͪԼ͍͞ɻ'; $this->fbAPI->make_post_text($from_user_id,$bot_message); $bot_message = '͝ΊΜͳ͍͞...ʮ' . $user_message . 'ʯͱ͍͏ݴ༿ͷҙຯ͸ཧղ͍ͯ͠·͕͢ɺ͝ఏҊͰ͖Δ৘ใ͕͋Γ·ͤΜɻ'; $this->fbAPI->make_post_text($from_user_id,$bot_message); } //ແݶϧʔϓରࡦ if ( empty($converse_follow)){ break; } } }elseif( $user_message ) { //ೖྗ͸͋Δ͕ɺwitʹintent͕ͳ͍৔߹ɺڭ͑ͯ͘Εͯ͋Γ͕ͱ͏ͷ௨஌Λग़͢ɻ $bot_message = 'ʮ' . $user_message . 'ʯͰ͢Ͷɻ͓ௐ΂͍ͨ͠·͢ɻগʑ͓଴ͪԼ͍͞ɻ'; $this->fbAPI->make_post_text($from_user_id,$bot_message); $bot_message = 'ʮ' . $user_message . 'ʯ͸ɺ·ͩཧղ͍ͯ͠ͳ͍ݴ༿Ͱͨ͠ɻ͙͢ʹରԠͰ͖ΔΑ͏ษڧ͍ͨ͠·͢ɻ'; $this->fbAPI->make_post_text($from_user_id,$bot_message); }else{ //ೖྗ͕ෆ໌ͳ৔߹ɺϝχϡʔͷҊ಺ $bot_message = $this->default_message; $this->fbAPI->make_post_text($from_user_id,$bot_message); }