オモシロ

沼津マリーがPHPでLINE bot 作ってみた!沼津マリーの「どうして大人になった時にエンジニアになろうと思ったんだろう?」番外編

『インドでキャバクラ始めました(笑)』などでお馴染みの沼津マリーさんの連載『どうして大人になったときにエンジニアになろうと思ったんだろう?』番外編が公開!

今回、沼津さんにはいま話題になっているLINE botに挑戦してもらいました!きっかけは、元モーニング娘。道重さゆみへの愛!PHP言語 VS 沼津マリー。職業の壁を超えて、エンジニア 沼津マリーは誕生するのか!?そして、プログラミングの先に見えたものはあったのでしょうか。どうぞご覧ください!

友だち追加

沼津マリーでも作れた!?LINE bot の世界で一番簡単な作り方

みなさん、沼津マリーさんのマンガは楽しんでいただけましたか?

プログラマ界隈ではLINEのMessaging APIが正式発表されるや大変な話題となりましたが、ドキュメントが非常に充実しているので、初心者でも簡単なbotならすぐに作れちゃうんです。

そこで、LINEのMessaging APIの利用方法からごく簡単なプログラミングまであらためて解説したいと思います!

LINE のMessaging API を申し込んでみよう!

  1. LINE BUSINESS CENTER にアクセスして、Messaging APIをクリックしましょう。


    画像引用元:LINE BUSINESS CENTER LINE Corporation

  2. [Developer Trialを始める]をクリックしましょう。


    画像引用元:LINE BUSINESS CENTER

  3. メールアドレスとパスワードでログインします。ここのメアドとパスワードはスマホで確認したほうが早いですね。


    画像引用元:LINE BUSINESS CENTERLINE Corporation

  4. 入力したメールアドレス宛に登録確認メールが来るので、そちらのURLにアクセスして、必要事項を入力したら・・・

  5. アカウント作成が完了です! はじめてでも10分とかからない作業です。たったこれだけで、実はもうbotを使って友だちメッセージのやりとりをする準備はほとんど整いました!


    画像引用元:LINE BUSINESS CENTER LINE Corporation

LINE@MANAGERでメッセージを作成してみよう!

  1. LINE@MANAGERにアクセスして[APIを利用する]をクリックしましょう


    画像引用元:LINE BUSINESS CENTER LINE Corporation

  2. LINE@MANAGERの左側メニューから[アカウント設定]-[Bot設定]を選びます。とりあえずはこんなふうに設定して[保存]します。


    画像引用元:LINE BUSINESS CENTER LINE Corporation

  3. LINE@MANAGERの左側メニューから[アカウント設定]-[基本設定]を選びます。ここでプロフィール写真を変更したり、友だちになるためのQRコードが取得できます。(まだ友だちにはならないでください!)

  4. LINE@MANAGERの左側メニューから[メッセージ]-[友だち追加時あいさつ]を選びます。ここで友だちになってくれたひとに最初に送るメッセージを作成しましょう。

  5. LINE@MANAGERの左側メニューから[メッセージ]-[自動応答メッセージ]を選びます。ここでは話しかけられたときに、自動で応答するメッセージを追加できます。


    画像引用元:LINE BUSINESS CENTER LINE Corporation

  6. LINE@MANAGERの左側メニューから[メッセージ]-[キーワード応答メッセージ]を選びます。ここでは特定のキーワードで話しかけられたときに、応答するメッセージを追加できます。たとえば「天気」と言われたらYahoo!の天気予報のURLを返したり、「道重さゆみの画像」と言われたら、Googleで「道重さゆみ」の画像検索をしたURLを返したりもできます。もちろん、単純な1対1の言葉のやり取りもできますよ!

いよいよプログラミング!!

さて、LINE@MANAGERでちょこちょこっと設定を追加するだけでも、ずいぶん楽しいbotが作れることがわかったと思います。次はいよいよ簡単なプログラミングをしてみましょう!

キーワード応答メッセージが融通が利かない・・・

さきほど[キーワード応答メッセージ]を設定すると、特定のキーワードに反応して回答を返すことができることを示しました。

でもこれ!「完全一致」じゃないとダメなんです!

どういうことかというと「天気」というキーワードで今日の天気予報を教えてくれるように設定していたとしますよね?
でも、「天気予報を教えて!」ってメッセージが来たら「天気」というキーワードが含まれているにも関わらず、「天気」と完全一致ではないので設定したメッセージを送ってくれないのです。

そこでプログラミングの出番

プログラミングを極めていけば、いくらでも高度な応答メッセージを作れるのですが、今回は「部分一致」でもbotが反応してくれるようにしたいと思います。上の例でいえば、「天気」だけではなく、「天気!」でも「お天気教えて〜」でも、とにかくメッセージの中に「天気」というキーワードが入っていれば反応するようにプログラムするということです。このパターンを増やしていくだけで十分にインタラクティブ()なbotが作れますね。

プログラミングの下準備

プログラミングをはじめるためにまず必要な準備をします

  1. LINE@MANAGERの左側メニューの最下部にあるリンク[LINE Business Center]をクリックします。

  2. グローバルメニューの[ツール]-[LINE Developers]をクリックします。


    画像引用元:LINE BUSINESS CENTER LINE Corporation

  3. LINE developersの左側メニューから[Basic information]をクリックします。


    画像引用元:LINE BUSINESS CENTER LINE Corporation

  4. Channel Secretの[SHOW]ボタンを押して、この値をメモしておきましょう!


    画像引用元:LINE BUSINESS CENTER LINE Corporation

  5. Channel Access Token を発行して、同様にこの値をメモしておきます。


    画像引用元:LINE BUSINESS CENTER LINE Corporation

  6. Webhook URL でこれから作成するプログラムのURLを設定します(SSLが使える必要があります)
    https://example.jp/line_bot_sample/callback.php
    ※ここでは、line_bot_sampleというディレクトリの中に設置したcallback.phpというファイルにプログラムを書いていく前提で話を進めます。


    画像引用元:LINE BUSINESS CENTER LINE Corporation

  7. あと少しでプログラミングがはじめられます! 下記のURLにアクセスしてLINE謹製のSDK(開発を便利にするツール)をダウンロードしましょう。
    https://github.com/line/line-bot-sdk-php


    画像引用元:GitHub

  8. 解凍すると[line-bot-sdk-php-master]というフォルダの中にいろいろファイルが入っていますが、とりあえずは[line-bot-sdk-tiny]というフォルダの中身「echo_bot.php」と「LINEBotTiny.php」を上記の手順5で設定したサーバーに保管します。その際、echo_bot.phpはcallback.phpとリネームしておきましょう。

  9. これで準備は完了です。あとは実際にプログラミングをしていきましょう!

プログラミングをはじめましょう

  1. callback.php を開いて21行目のを前の手順6.で取得したChannel Access Tokenをコピペします。前後のシングルクォーテーション「'」は削除していでくださいね。

  2. 同様に22行目のに前の手順4.でメモをしたChannel Secretをコピペします。こちらもシングルクォーテーションは削除しないでください。

  3. これだけで、何を言っても「オウムがえし」してくれるLINE bot になりました。

  4. 続けて先ほどの「完全一致」と「部分一致」用の呪文(?)を実装したいと思います。
    まずcallback.phpのなかにある$message['text']。ここに友だちからのメッセージの内容が入っています。
    なので、この$message['text']の内容がずばり「天気」(完全一致)なのではなく、「天気」という言葉を含む(部分一致)ときに、 天気予報のURLを返事として返してあげるようにしたいと思います。

                
                foreach ($client->parseEvents() as $event) {
                    switch ($event['type']) {
                        case 'message':
                            $message = $event['message'];
                            switch ($message['type']) {
                                case 'text':
                                    if(strpos($message['text'],'天気') !== false ){
                                        $rep = "http://weather.yahoo.co.jp/weather/";
                                    }
                                    $client->replyMessage(array(
                                        'replyToken' => $event['replyToken'],
                                        'messages' => array(
                                            array(
                                                'type' => 'text',
                                                'text' => $rep
                                            )
                                        )
                                    ));
                                    break;
                                default:
                                    error_log("Unsupporeted message type: " . $message['type']);
                                    break;
                            }
                            break;
                        default:
                            error_log("Unsupporeted event type: " . $event['type']);
                            break;
                    }
                };
    
                
                

    ポイントは、6行目「case 'message':」の下のifから始まる3行です。
    「もし〜だったら、これをやって」というのをif 文といい書式は下記のとおりです。

    
                if(条件が正しい){
                    正しいときにやること
                }
                

    また、下記のようにif文を連ねたり「どれにもあてはまらない場合はこれをやって」という指示をすることもできます。

    
                if( 条件①が正しい ){
    
                    ①が正しいときにやること
    
                } else if( 条件②が正しい ){
    
                    ②が正しいときにやること
    
                } else if( 条件③が正しい ){
    
                    ③が正しいときにやること
    
                } else {
    
                    ①も②も③も正しくないときにやること
    
                }
                

    どうですか? なんとなく感じはつかめたでしょうか。

    つぎに条件①や②の書き方を2つ教えます!

    まず1つめは部分一致

    
            strpos($message['text'],'おやすみ') !== false
            

    これが意味するところは「送られてきたメッセージ($message['text'])に「疲れた」という単語が含まれている場合(に正しい)」です。

    もう一つは、設定画面からもできた完全一致

    
            $message['text']=='あ'
            

    こちらが意味するところは「送られてきたメッセージ($message['text'])が『あ』1文字だけの場合(に正しい)です。
    これらを踏まえて、沼津さんが実際に書いたソースコードがこちらです!(25行目から抜粋)

    
            foreach ($client->parseEvents() as $event) {
                switch ($event['type']) {
                    case 'message':
                        $message = $event['message'];
                        switch ($message['type']) {
                            case 'text':
                                if(strpos($message['text'],'画像') !== false ){
                                    $rep = "画像がほしいのですね";
    
                                } else if(strpos($message['text'],'天気') !== false ){
                                    $rep = "http://weather.yahoo.co.jp/weather/";
    
                                } else if(strpos($message['text'],'疲れた') !== false ){
                                    $rep = "今日も一日がんばって(^^";
    
                                } else if(strpos($message['text'],'寒い') !== false ){
                                    $rep = "耐えろ!";
    
                                } else if($message['text']=='あ'){
                                    $rep = "お前文字入力めんどくさがってるだろ";
    
                                } else if(strpos($message['text'],'おやすみ') !== false ){
                                    $rep = "いい夢みろよ^^";
    
                                } else {
                                    $rep = $message['text']."って言われても困ります";
                                }
                                $client->replyMessage(array(
                                    'replyToken' => $event['replyToken'],
                                    'messages' => array(
                                        array(
                                            'type' => 'text',
                                            'text' => $rep
                                        )
                                    )
                                ));
                                break;
                            default:
                                error_log("Unsupporeted message type: " . $message['type']);
                                break;
                        }
                        break;
                    default:
                        error_log("Unsupporeted event type: " . $event['type']);
                        break;
                }
            

    どうですか? プログラムが何をやっているか、ぐっと身近に感じられるようになったのではないでしょうか。

まとめ

どうでしたか? 『沼津マリーがPHPでLINE bot 作ってみた!沼津マリーの「どうして大人になった時にエンジニアになろうと思ったんだろう?」番外編』は楽しんでいただけましたか?

プログラム自体はほんとうに初歩的なもので、「いやープログラマ余裕だな」発言を最初に沼津さんがしたときは、ちょっとした殺意も芽生えましたが、この後はどんどん自分で試行錯誤しながら、それなりに立派なLINE botが完成したと思います。

プログラムができるようになるコツって結局は「自分が強く作りたいと思えるものがあるか」に尽きると思います。その点で、沼津さんには「道重さゆみ再生」を自分なりにお祝いしたいという思いがあったで、どんどん「こういう機能をつけたい」「こういうことできないの?」と積極的に学んでくれました。

まだまだ「エンジニア兼マンガ家」と名乗れるレベルではないのですが、プログラミングの楽しさは十分に伝わったようで幸いです。

なお、このアカウントは限定50名までしか友だちになれない[Developer Trial]アカウントなのですが、興味を持っていただいた方はぜひ!友だち申請してみてください。また、プログラミングだけでなく、このLINE botのために道重さゆみの似顔絵やイラストを何十枚も描き下ろしています!
なお、実装してある機能は次のとおりです。
※プログラミングではなくLINE@MANAGERから設定している機能も含みます

・毎日決まった時間に「道重さゆみ再生」までのカウントダウン画像をプッシュ配信
・いくつかのキーワード(完全一致)への自動応答
・いくつかのキーワード(部分一致)への自動応答
 →そのうち「今日の運勢」(部分一致)というメッセージにランダムおみくじを表示
 →そのうち「画像」(部分一致)というメッセージにプッシュ配信するカウントダウン画像を表示

友だち追加
沼津マリー

著者:沼津マリー
都内在住の漫画家。ハロープロジェクトが好き。
『実家からニートの弟を引きとりました。』(最新刊)
『インドでキャバクラ始めました(笑)』(全2巻・既刊)

(制作:編集プロダクション studio woofoo by GMO)

 

この記事が気に入ったらいいね!しよう

いいね!するとi:Engineerの最新情報をお届けします

プライバシーマーク 優良派遣事業者認定マーク