Back to tech

AzureのWebAppをLineBotサーバーにする

2 min read
Table of Contents

マイクロソフトが提供しているAzureというPaasがあります

学生なら無料でWebAppを利用することができます

せっかくなのでLineBot作りたいなーと思いAzureにLineBotの設定をしたのですが、色々手こずったので残しておきます

前提として”AzureのWebApp”と”Lineデベロッパー”の取得済み”で進めていきます

AzureとLineの連携

AzureとLineを連携するためにAzureのURLと送信IPアドレスを取得します

Azureのダッシュボードを開きます

プロパテイタブにあるURLを取得します

URLの末尾に”:443/“をつけてテキストエディタ等に保存しておいてください

EX:

before:http://hogehoge.azurewebsites.net

after:http://hogehoge.azurewebsites.net:443/

同じくプロパティタブにある送信用アドレスを取得します

”,“のところで改行してどこかに保存しておいてください

EX:

before:11.111.11.111,22.22.222.22,33.33.33.33,44.44.44.444,55.55.55.55

after:

11.111.11.111 22.22.222.22 33.33.33.33 44.44.44.444 55.55.55.55

上記で取得したURLと送信用IPアドレスをLineBotへ入力します

LineDeveloperを開きMessaging APIを選択してください

Basic informationタブに移動し、Editを選択肢編集をします

Webhook URLにURを入力し保存してください

Server IP Whitelistタブに移動し送信IPを追加してください

numericは24で良いと思います

LineBotの設定をする

デフォルトではメッセージの自動送信をしてありがた迷惑な機能が備わっています

それをOFFにする等々をしていきます

LINE@MANAGERを開きます

余談ですがここでアイコンの設定等々できるので色々といじってみてください

重要なのはMessaging API設定です

Messaging APIをタブを開きます

  • Webhook送信:利用する(必須)
  • Botのグループトーク参加:利用しない(お好みで)
  • 自動応答メッセージ:利用しない(必須)
  • 友だち追加時あいさつ:利用しない(お好みで)

として最後に保存をしてください

LineBotプログラム

やっとプログラム作成に移ります

その前にLineBotのアクセストークンを取得してきます

LineDeveloperを開きMessaging APIを選択してください

Basic informationタブに移動しトークンを取得します

プログラム内にトークンを書いても動作はしますが、セキュリティ上かなり危険です

Azureに変数として登録しておきます

Azureに戻り、アプリケーション設定を開きます

アプリ設定にて先程取得したトークンのコピペ及び適当なは変数名(ここではLINE_BOT_TOKEN)を記述してください

スロット設定にチェックをいれておきます

保存を忘れずに

LineBotのプログラムを下記に記述します

解説は別の記事にまとめると思います(多分)

とりあえず下記のプログラムをコピペしてmain.phpと保存してください

送信されたテキストをオウム返し、テキスト以外のものがきたらエラーメッセージ的なものを送信するプログラムです

<?php
$line_accessToken = getenv('LINE_BOT_TOKEN');

$json_string = file_get_contents('php://input');
$jsonObj = json_decode($json_string);

$replyToken = $jsonObj->{"events"}[0]->{"replyToken"};
$messageId = $jsonObj->{"events"}[0]->{"message"}->{"id"};
$message_type = $jsonObj->{"events"}[0]->{"message"}->{"type"};
$message_recv = $json_object->{"events"}[0]->{"message"}->{"text"};

$message = "";
if($message_type == "text"){
    $message = $message_recv;
}else{
    $message = "申し訳ありません。テキストのみをいれてください";
}
send_message($replyToken, $line_accessToken, $message);
?>

<?php
//メッセージの送信
function send_message($replyToken, $line_accessToken, $message){
    $response_format_text = [
        "type" => "text",
        "text" => $message
    ];


    $post_data = [
        "replyToken" => $replyToken,
        "messages" => [$response_format_text]
    ];

    $ch = curl_init("http://api.line.me/v2/bot/message/reply");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json; charser=UTF-8',
        'Authorization: Bearer ' .$line_accessToken
    ));
    $result = curl_exec($ch);
    curl_close($ch);
}
?>

プログラムをAzureへデプロイ

作ったプログラムをAzureを送信します

デプロイオプションタブでGitやGitHub、DropBox等々でデプロイできます

しかし、更新にめっちゃ時間がかかるためFTPでアップロードすることをおすすめします

概要タブから上部にある発光プロファイルの取得を選択します

ファイルをダウンロードし中身にFTPに接続するためのあれこれが書いてあります

  • publishUrl 接続先
  • userName ユーザー名
  • userPWD パスワード

接続したら、site/wwwroot ディレクトリに移動し、割くほど作成たプログラムをアップロードしてください

最後にもう一手間

あともう一手間加えます

このままだとmain.phpを呼び出してくれません

Azureのアプリケーション設定タブにある既定ドキュメントにmain.phpを入力してください(ここかなり引っかかりました)

AzureとWatsonを利用して画像認識Botを作ってみたのでぜひためしてみてください

友だち追加