こんばんは。最近、頻繁にLINEと戯れている@うしです。
会社でLINEのサービス(LINE Pay やLINE BOTなど) を調査する機会があり、
LINEについて色々知ったので、LINEからAlibaba Cloudの「Function Compute」を
WEB Hookにて起動させるLINEBOTなどの以下機能を
実装してみたので、内容をシェアさせて頂きます。
○ やったこと
- LINE BOTの作成 & Function Computeでの応答
- Function Compute から LINE へPUSH通知(メッセージ送信)
- LINE Clova の(簡易)スキル開発 ・・・こちらは会社のBLOGで記事を書こうと思います。 など
○ 付随してやった作業
- Alibaba Cloud アプリケーションサービスの「Log Service」の有効化とプロジェクト設定
○ 必要なもの
- ブラウザ(私はChromeで操作しました)
○ 参考サイト
LINE BOTの作り方や、一部PHPのコードを参考にさせて頂きました。
【PHP】LINE BOTの作り方 – ysklogAlibaba Cloud アイコン集
Alibaba Cloud アイコン集 - Qiita
○ 構成図
ざっくりですが、構成は以下の様になります。
○ 作業内容
LINE BOTの作成 & Function Computeでの応答 について
Function Computeでの応答 について
Function Compute の構成は、①サービス > ②関数 > ③トリガーと3段階あり
作成する順番も①から③順に作成します。 (削除する場合はこの逆)
コンソールからサービス・関数を作成する方法はこちらの記事をご参照下さい。今回作成するサービス・関数の設定を以下の様にします。
※ 上記の1~3の作業全てHTTPトリガーで、インライン編集での作業です。
- 作成手順
Function Computeでサービス作成
関数の作成(関数テンプレート選択)
関数の作成(トリガーの設定)
関数の作成(関数の設定)
関数の作成(設定の確認)
デバッグについて
また、URLへPOSTする以前に、送信するJSONデータを入力し、デバッグを実施することも可能です。
以下は、LINEのアプリからBOTに対してテキストメッセージを送信した場合に、
Web Hook にてPOSTされるJSONにサンプルになります。POSTされるJSONサンプル
{ 'events': [{ 'timestamp': 1475888904212, 'replyToken': '765734es2331b3f3646ea5e96v125', 'message': { 'type': 'text', 'id': '4989775490995', 'text': '角野卓三?' }, 'type': 'message', 'source': { 'userId': 'U41db4b49b4fc85bc0a4aacc40e261ac4', 'type': 'user' } }] }
- デバッグでのはまりどころ
<?php use RingCentral\Psr7\Response; function handler($request, $context): Response { $body = $request->getBody()->getContents(); $body = urldecode ( $body ); $json = json_decode( $body , true ); if( !is_null( $json )) { $events = $json["events"][0]; $message_type = $events["message"]["type"]; if($message_type != "text") exit; $replyToken = $events["replyToken"]; $message_text = $events["message"]["text"]; $type = $events["type"]; $userId = $events["source"]["userId"]; $return_message_text = "「" . $message_text . "」じゃねーよwww"; $response_format_text = [ "type" => $message_type, "text" => $return_message_text ]; $post_data = [ "replyToken" => $replyToken, "messages" => [$response_format_text] ]; $ch = curl_init("https://api.line.me/v2/bot/message/reply"); $accessToken = "Your Access Token"; 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 ' . $accessToken )); $result = curl_exec($ch); curl_close($ch); } return new Response( 200, array( "Content-Type" => "application/json", ), "hello world" ); }
○ 実際の動作
実際に動作させてみると・・・
角野卓三?と入力すると「角野卓三?」じゃねーよwwwの様にBOTが駆動し返信します。
○ まとめ
- ここまで読んで頂きありがとうございます。
- Function Computeは、色々なイベントをトリガーに、手軽に駆動させられる
イベント駆動型のツールなのでリアルタイムでの処理なんかに向いているね☆と思いました。 - また、推奨されない設定ですが、「Function Compute」から「Function Compute」を駆動してみたり、
Alibaba Cloud 内のサービスとの連携が色々できそうなので、Alibaba のサービスが増える度に用途が広がりそうです。 - 次回は、LINE Clova のスキル開発と「Function Compute」についてブログを書きたいと思います。
でわ