LINE公式アカウント運用のためのサイト|コネクトバース

SHARE|

LINE公式アカウント活用

WebhookでLINE公式アカウントを複数システムと連携させる手順【GAS/PHP対応】

WebhookでLINE公式アカウントを複数システムと連携させる手順【GAS/PHP対応】
  1. はじめに:LINE公式アカウントと複数システム連携のメリット・デメリット
  2. Webhookの基本的な仕組み
    1. (1)Webhookとは何か?シンプルな解説
    2. (2)LINE公式アカウントにおけるWebhookの役割
    3. (3)Webhook URLとアクセストークンの重要性
  3. 複数のWebhook URLを設定する方法:GASを活用した中継サーバー構築
    1. (1)Google Apps Script (GAS)とは?
    2. (2)GASでWebhookを受け取るスクリプトを作成
    3. (3)GASスクリプトをWebアプリケーションとしてデプロイ
    4. (4)LINE DevelopersコンソールでWebhook URLを設定(GASのURL)
    5. (5)受信したWebhookデータを各システムに転送する処理を実装
    6. (6)GASでの実装例(コードサンプル)
  4. 複数のWebhook URLを設定する方法:PHPを活用した中継サーバー構築
    1. (1)PHPでWebhookを受け取るスクリプトを作成
    2. (2)WebサーバーにPHPスクリプトを配置
    3. (3)LINE DevelopersコンソールでWebhook URLを設定(PHPのURL)
    4. (4)受信したWebhookデータを各システムに転送する処理を実装
    5. (5)PHPでの実装例(コードサンプル)
  5. 各システムへのデータ転送方法と注意点
    1. (1)Webhookデータのフォーマット
    2. (2)各システムのAPI仕様に合わせたデータ変換
    3. (3)エラー処理とログの重要性
    4. (4)セキュリティ対策
  6. まとめ:複数システム連携でLINE公式アカウントをさらに活用
  7. よくある質問(FAQ)
    1. (1)GASとPHPどちらがおすすめ?
    2. (2)複数システム連携時の費用は?
    3. (3)Webhookがうまく動作しない場合のトラブルシューティング

はじめに:LINE公式アカウントと複数システム連携のメリット・デメリット

LINE公式アカウントは、顧客とのコミュニケーションを円滑にする強力なツールです。その機能を最大限に活かすには、様々なシステムと連携させることが重要になります。連携によって得られるメリットは大きく、顧客管理システムや分析ツールとの連携で、顧客一人ひとりに最適化されたメッセージ配信が可能になります。また、ECサイトと連携すれば、LINE上で商品購入を完結させることもできます。

しかし、複数のシステムと連携させる際には、いくつかのデメリットも存在します。それぞれのシステムのAPI仕様を理解し、適切にデータ連携を行う必要があるため、開発コストや運用コストが増加する可能性があります。また、セキュリティ対策も重要になります。各システムのセキュリティレベルを把握し、適切な対策を施すことで、情報漏洩などのリスクを最小限に抑える必要があります。

項目

説明

メリット

  • 顧客一人ひとりに最適化されたメッセージ配信が可能

  • LINE上で商品購入などのアクションを完結できる

  • 多様なマーケティング施策が可能

デメリット

  • 開発・運用コストの増加

  • セキュリティリスクへの対応が必要

  • 各システムのAPI仕様の理解が必要

このように、メリットとデメリットを理解した上で、自社に最適なシステム連携を行うことが、LINE公式アカウントの成功につながります。

Webhookの基本的な仕組み

この章では、Webhookの基本的な仕組みについて解説します。Webhookを理解することで、LINE公式アカウントと外部システムを連携させる方法をより深く理解することができます。

(1)Webhookとは何か?シンプルな解説

Webhookとは、Webアプリケーション同士がリアルタイムで情報を受け渡しするための仕組みです。特定のイベントが発生した際に、情報をプッシュ通知で送信します。従来のポーリング方式とは異なり、リアルタイムな情報更新が可能になります。

(2)LINE公式アカウントにおけるWebhookの役割

LINE公式アカウントでは、ユーザーがメッセージを送信したり、友だち追加/ブロックなどのアクションを行った際に、Webhookを使って外部システムにイベント情報を通知します。これにより、外部システムで様々な処理を実行することが可能になります。例えば、ユーザーからのメッセージに対して自動応答をしたり、友だち追加時にデータベースにユーザー情報を登録するといった処理が自動化できます。

(3)Webhook URLとアクセストークンの重要性

LINE公式アカウントでWebhookを利用するためには、Webhook URLとアクセストークンを設定する必要があります。

項目

説明

Webhook URL

イベント情報を受け取るためのURL

アクセストークン

LINE公式アカウントへのアクセスを許可するためのキー

Webhook URLは、LINE Developersコンソールで設定します。アクセストークンは、LINE公式アカウントを作成する際に発行されます。これらの設定が正しく行われていない場合、Webhookは正常に動作しません。

(1)Webhookとは何か?シンプルな解説

Webhookとは、Webサービス同士を連携させるための仕組みです。特定のイベントが発生した時に、リアルタイムで情報を通知することができます。従来のAPIのように、定期的に情報を取得する必要がないため、効率的なデータ連携が可能です。

Webhook

API

イベント駆動

定期取得

リアルタイム通知

定期的に情報取得

効率的

リアルタイム性に欠ける場合も

LINE公式アカウントを例に説明します。ユーザーがLINE公式アカウントにメッセージを送信すると、このメッセージ送信というイベントをトリガーに、Webhookによって設定されたURLに情報が送信されます。この情報には、送信者のID、メッセージの内容などが含まれます。これにより、外部システムでメッセージの内容に応じた処理を実行できます。

Webhookを使うことで、LINE公式アカウントと外部システムを連携させ、様々なサービスを構築できます。例えば、以下のようなサービスが考えられます。

  • チャットボット

  • カスタマーサポートシステム

  • マーケティングオートメーション

(2)LINE公式アカウントにおけるWebhookの役割

LINE公式アカウントでは、Webhookはユーザーのアクションをトリガーとした様々なイベント情報を、リアルタイムで外部システムに送信するために利用されます。
Webhookは、LINEプラットフォームから指定のURLにイベント情報をPOSTリクエストで送信する仕組みです。
これにより、様々なイベントを契機に、外部システムで処理を実行することが可能になります。

イベント

説明

メッセージ受信

ユーザーがメッセージを送信したとき

友だち追加

ユーザーがLINE公式アカウントを友だちに追加したとき

ブロック

ユーザーがLINE公式アカウントをブロックしたとき

フォロー

ユーザーがLINE公式アカウントをフォローしたとき

その他

上記以外にも様々なイベントが存在します

LINE公式アカウントでWebhookを利用することで、以下のようなことが実現できます。

  • メッセージへの自動応答

  • ユーザーの行動に基づいたプッシュ通知

  • 外部システムとの連携によるデータ分析

  • カスタマーサポートの効率化

Webhookは、LINE公式アカウントをより高度に活用するための重要な機能です。

(3)Webhook URLとアクセストークンの重要性

Webhook URLとアクセストークンは、LINE公式アカウントと外部システムを連携する上で非常に重要な役割を果たします。それぞれの役割と重要性を理解することで、安全かつ効果的な連携を実現できます。

Webhook URLは、LINEプラットフォームからメッセージやイベント情報を受け取るためのエンドポイントです。LINE公式アカウントで何かアクションが発生すると、LINEプラットフォームは指定されたWebhook URLにデータを送信します。このWebhook URLが正しく設定されていないと、外部システムはLINE公式アカウントからの情報を受け取ることができません。

アクセストークンは、LINE公式アカウントへのアクセスを許可するための鍵のようなものです。外部システムは、このアクセストークンを使ってLINEプラットフォームにリクエストを送信し、メッセージの送信やユーザー情報の取得などを行います。アクセストークンは非常に重要な情報であり、漏洩すると悪用される可能性があります。そのため、厳重に管理する必要があります。

項目

説明

重要性

Webhook URL

LINEプラットフォームからのデータを受け取るエンドポイント

正しく設定されていないとデータを受け取れない

アクセストークン

LINE公式アカウントへのアクセスを許可するための鍵

漏洩すると悪用される可能性があるため厳重に管理が必要

これらの設定を適切に行うことで、LINE公式アカウントと外部システムの連携をスムーズに行うことができます。

複数のWebhook URLを設定する方法:GASを活用した中継サーバー構築

LINE公式アカウントのWebhookを複数のシステムに連携させるには、GASで中継サーバーを構築する方法が有効です。まずGoogleドライブで新規GASプロジェクトを作成し、提供されたスクリプトを貼り付けます。このスクリプトはLINEからのWebhookを複数URLに転送する役割を果たします。

項目

説明

discordAppUrl

Discord通知用アプリのURL

lMessageAppUrl

L Message用アプリのURL

doPost(e)

Webhook受信時の処理

sendToApp(url, data)

各アプリへのデータ送信処理

スクリプト内の discordAppUrllMessageAppUrl は、それぞれのシステムのWebhook URLに置き換える必要があります。doPost(e) 関数はLINEからWebhookを受け取り、sendToApp 関数を使って各システムにデータを送信します。GASスクリプトをウェブアプリとしてデプロイし、LINE DevelopersコンソールでWebhook URLをこのGASのURLに設定します。これでLINEからのメッセージがGASを経由して各システムに届くようになります。

(1)Google Apps Script (GAS)とは?

Google Apps Script(GAS)は、Googleが提供するJavaScriptベースのスクリプティングプラットフォームです。Google Workspaceアプリケーション(スプレッドシート、ドキュメント、スライドなど)やその他のGoogleサービスと連携できるのが特徴です。GASを使うことで、面倒な作業を自動化したり、複数のGoogleサービスを連携させたり、ウェブアプリケーションを開発したりできます。今回の記事では、このGASを活用してLINE公式アカウントのWebhookを中継するサーバーを構築する方法を解説します。

項目

説明

言語

JavaScript

実行環境

Googleのサーバー

特徴

Googleサービスと連携可能、無料

用途

作業自動化、Webアプリ開発など

GASは、ブラウザ上でコードを記述・実行できるため、特別な開発環境を構築する必要がなく手軽に利用できます。また、豊富なAPIが提供されており、様々なGoogleサービスや外部サービスと連携することが可能です。

(2)GASでWebhookを受け取るスクリプトを作成

LINE公式アカウントからのWebhookをGASで受け取るには、doPost(e)という特別な関数を使用します。この関数は、Webhookで送信されたデータを受け取り、処理するための入り口となります。

doPost(e)関数の引数eには、LINEから送信されたデータが格納されています。このデータはJSON形式で送られてくるため、JSON.parse(e.postData.contents)を用いてパースすることで、GASで扱いやすいオブジェクトに変換します。

Webhookで受信したデータは、通常、メッセージの内容や送信者の情報などを含んでいます。これらの情報は、パースしたオブジェクトから取得できます。

受信したデータを他のシステムに転送したり、データベースに保存したりといった処理は、doPost(e)関数内に記述します。

以下に、doPost(e)関数の基本的な実装例を示します。

function doPost(e) {
  // 受信データのJSONをパース
  var lineData = JSON.parse(e.postData.contents);

  // 受信データの例
  Logger.log(lineData);

//  LINE公式アカウントのWebhookメッセージイベント
if (lineData.events[0].type == "message") {
    if (lineData.events[0].message.type == "text") {
        sendMessage(lineData.events[0].replyToken, lineData.events[0].message.text);
    }
}
  // その他の処理をここに記述

  // 成功レスポンスを返す
  return ContentService.createTextOutput(JSON.stringify({ "status": "success" }))
      .setMimeType(ContentService.MimeType.JSON);
}

function sendMessage(replyToken, receivedMessage) {
    let url = "https://api.line.me/v2/bot/message/reply";
    let headers = {
        "Content-Type": "application/json",
        "Authorization": "Bearer " + ACCESS_TOKEN
    };

    // 送信メッセージ
    let message = receivedMessage;

    let postData = {
        "replyToken": replyToken,
        "messages": [
            {
                "type": "text",
                "text": message,
            }
        ]
    };

    let options = {
        "method": "post",
        "headers": headers,
        "payload": JSON.stringify(postData)
    };

    UrlFetchApp.fetch(url, options);
}

(3)GASスクリプトをWebアプリケーションとしてデプロイ

GASスクリプトをWebアプリケーションとしてデプロイすることで、外部からアクセスできるようになります。これによりLINEからのWebhookをGASで受信できるようになります。
デプロイの手順は以下の通りです。

  1. GASエディタで、右上の「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。

  2. 「ウェブアプリ」を選択し、実行ユーザーを「自分」、アクセスできるユーザーを「全員(匿名ユーザーを含む)」に設定します。

    項目

    設定値

    実行ユーザー

    自分

    アクセスできるユーザー

    全員(匿名ユーザーを含む)

  3. 「デプロイ」をクリックします。表示されたウェブアプリのURLをコピーします。このURLがLINEのWebhook URLとして設定するURLになります。

  4. 後でWebhook URLとして使うため、表示されたウェブアプリのURLをコピーして控えておきます。

これでGASスクリプトがWebアプリケーションとしてデプロイされ、LINEからのWebhookを受信する準備が整いました。アクセスできるユーザーを「全員」に設定することで、LINEプラットフォームからのアクセスを許可します。

(4)LINE DevelopersコンソールでWebhook URLを設定(GASのURL)

GASで作成したWebアプリケーションのURLを、LINE DevelopersコンソールでWebhook URLとして設定することで、LINE公式アカウントへのメッセージなどをGASで受信できるようになります。設定手順は以下の通りです。

  1. LINE Developersコンソールにログインします。

  2. メッセージングAPIチャネルの基本設定画面を開きます。

  3. 「Webhook設定」セクションで、「Webhook URL」の入力欄に、GASでデプロイしたWebアプリケーションのURLを貼り付けます。

  4. 「Webhookを使用する」を有効にします。

  5. 「接続確認」ボタンをクリックし、GASで作成したスクリプトが正しくWebhookイベントを受信できるかを確認します。

項目

説明

Webhook URL

GASのWebアプリケーションURL

Webhookを使用する

有効にする

接続確認

必須

Webhook URL は正確にコピー&ペーストし、余計なスペースなどがないように注意してください。設定が完了すれば、LINE公式アカウントへのメッセージがGASに送信され、様々な処理を行うことができるようになります。

(5)受信したWebhookデータを各システムに転送する処理を実装

中継サーバーは、Webhookイベントを受け取ってから、連携先のシステムにデータを送信する役割を担います。具体的な転送処理の実装は、各システムのAPI仕様に大きく依存します。

まず、LINEから受信したWebhookデータはJSON形式です。このデータには、イベントの種類(メッセージ受信、友だち追加など)、送信者情報、メッセージ内容などが含まれています。

連携先のシステムが求めるデータ形式や送信方法(POST、GETなど)は様々です。そのため、中継サーバーでは、受信したWebhookデータを各システムに合わせて変換する必要があります。

例えば、あるシステムはユーザーIDのみをPOSTで送信する必要がある一方、別のシステムはメッセージ全文をGETで送信する必要があるかもしれません。

以下に、データ変換と転送処理の例を簡略化して示します。

システム

データ形式

送信方法

システムA

ユーザーID

POST

システムB

メッセージ全文

GET

このように、各システムに合わせてデータの加工と送信を行うことで、LINE公式アカウントをハブとした複数システムとの連携を実現できます。

(6)GASでの実装例(コードサンプル)

ここでは、LINE公式アカウントからWebhookで受信したメッセージを、複数のシステムに転送するGASのコードサンプルを紹介します。このサンプルコードでは、受信メッセージを特定のキーワードで振り分け、それぞれのシステムに適した形式で送信する処理を実装しています。

function doPost(e) {
  // Webhookデータを取得
  var data = JSON.parse(e.postData.contents);
  var message = data.events[0].message.text;

  // システムAに送信するキーワード
  var keywordsA = ["キーワード1", "キーワード2"];

  // システムBに送信するキーワード
  var keywordsB = ["キーワード3", "キーワード4"];

  // システムAへの送信処理
  if (keywordsA.some(keyword => message.includes(keyword))) {
    // システムAのAPIエンドポイント
    var url = "システムAのAPIエンドポイント";
    // システムA用のデータ形式に変換
    var payload = { "message": message };
    // 送信
    UrlFetchApp.fetch(url, { "method": "post", "payload": JSON.stringify(payload) });
  }

  // システムBへの送信処理
  if (keywordsB.some(keyword => message.includes(keyword))) {
    // システムBのAPIエンドポイント
    var url = "システムBのAPIエンドポイント";
    // システムB用のデータ形式に変換
    var payload = { "text": message };
    // 送信
    UrlFetchApp.fetch(url, { "method": "post", "payload": JSON.stringify(payload) });
  }

 return ContentService.createTextOutput(JSON.stringify({ "status": "OK" })).setMimeType(ContentService.MimeType.JSON);
}

このコードは、受信メッセージに含まれるキーワードに基づいて、システムAまたはシステムBにメッセージを転送します。keywordsAkeywordsB には、各システムに送信するキーワードを配列で定義します。UrlFetchApp.fetch を使用して、各システムのAPIエンドポイントにデータを送信します。payload には、各システムのAPI仕様に合わせたデータ形式でメッセージを設定します。

複数のWebhook URLを設定する方法:PHPを活用した中継サーバー構築

PHPを用いてLINE公式アカウントからのWebhookを中継し、複数のシステムに分配する方法を解説します。

まず、Webhookを受け取るPHPスクリプトを作成します。このスクリプトでは、LINEプラットフォームから送信されるPOSTリクエストを受け取り、内容を解析します。

次に、このスクリプトをWebサーバーに配置します。これにより、LINEプラットフォームからのWebhookがPHPスクリプトによって処理されるようになります。

そして、LINE DevelopersコンソールでWebhook URLを、配置したPHPスクリプトのURLに設定します。

最後に、PHPスクリプト内で、受信したWebhookデータを各システムに転送する処理を実装します。各システムへのデータ転送は、それぞれのAPI仕様に従って行います。

手順

説明

1. PHPスクリプト作成

LINEからのPOSTリクエストを受け取り、解析する

2. Webサーバーに配置

PHPスクリプトを公開する

3. Webhook URL設定

LINE DevelopersコンソールでPHPスクリプトのURLを設定

4. データ転送処理実装

各システムのAPI仕様に従ってデータを送信

PHPスクリプトは、各システムのAPIエンドポイントにHTTPリクエストを送信することでデータ転送を実現します。エラー処理やログ記録も実装し、安定した運用を目指します。具体的なコード例は後述します。

(1)PHPでWebhookを受け取るスクリプトを作成

Webhookを受け取るPHPスクリプトを作成するには、以下の手順に従います。

  1. リクエストヘッダーのx-line-signatureを取得します。

  2. リクエストボディを取得します。これは、LINEプラットフォームから送信されたJSONデータです。

  3. チャネルシークレットを使って、リクエストボディのダイジェストを計算します。HMAC-SHA256アルゴリズムを使用します。

  4. 計算したダイジェストをBase64エンコードします。

  5. エンコードしたダイジェストと、リクエストヘッダーのx-line-signatureを比較します。一致すれば、リクエストはLINEプラットフォームから送信されたものです。

以下は、PHPで署名を検証する例です。

$channelSecret = 'YOUR_CHANNEL_SECRET';
$httpRequestBody = file_get_contents('php://input');
$hash = hash_hmac('sha256', $httpRequestBody, $channelSecret, true);
$signature = base64_encode($hash);
if ($_SERVER['HTTP_X_LINE_SIGNATURE'] == $signature) {
    // 署名が一致する場合の処理
    // 受信したWebhookデータの処理
    $events = json_decode($httpRequestBody, true);
    // 各イベントタイプに応じた処理
}

上記のコードは、リクエストの検証に成功した場合、Webhookデータ($httpRequestBody)をJSONデコードし、$events変数に格納します。
この$events変数を利用して、LINE公式アカウントから送信されたメッセージやイベントに応じた処理を実装できます。

(2)WebサーバーにPHPスクリプトを配置

作成したPHPスクリプトをWebサーバーに配置する方法を解説します。Webサーバーには、レンタルサーバーやクラウドサーバーなど様々な種類がありますが、ここでは一般的なレンタルサーバーを想定して説明します。

手順

説明

1. レンタルサーバーを契約する

まだレンタルサーバーを契約していない場合は、契約が必要です。多くのレンタルサーバーがPHPに対応しています。

2. FTPクライアントソフトを用意する

FTPクライアントソフトを使用して、ローカル環境のファイルをサーバーにアップロードします。FileZillaなどの無料ソフトが利用可能です。

3. サーバーに接続する

レンタルサーバーの契約情報に基づき、FTPクライアントソフトでサーバーに接続します。

4. PHPスクリプトをアップロードする

作成したPHPスクリプトを、Webサーバーのドキュメントルート(公開ディレクトリ)にアップロードします。ドキュメントルートの場所は、レンタルサーバーによって異なりますが、多くの場合public_htmlなどという名前です。

5. ファイルのパーミッションを設定する

必要に応じて、アップロードしたPHPスクリプトのファイルパーミッションを設定します。多くの場合、644で問題ありません。

6.動作確認

ブラウザでアクセスし、正しく動作するか確認します。WebサーバーのURLに、アップロードしたPHPファイル名を指定してアクセスします。例えば、https://example.com/webhook.phpのようにアクセスします。

以上の手順で、PHPスクリプトをWebサーバーに配置できます。

(3)LINE DevelopersコンソールでWebhook URLを設定(PHPのURL)

LINE公式アカウントとPHPで作成したWebサーバーを連携させるには、LINE DevelopersコンソールでWebhook URLを設定する必要があります。Webhook URLは、LINEプラットフォームからメッセージなどのイベント情報が送信されるエンドポイントです。

設定手順は以下のとおりです。

  1. LINE Developersコンソールにログインします。

  2. 目的のLINE公式アカウントを選択します。

  3. Messaging API設定画面を開きます。

  4. 「Webhook設定」セクションを見つけます。

  5. 「Webhook URL」フィールドに、PHPスクリプトが配置されているWebサーバーのURLを入力します。このURLは、LINEからのイベント通知を受信するためにPHPで作成したエンドポイントです。

  6. 「接続確認」ボタンをクリックし、正しく接続できるか確認します。緑色のチェックマークが表示されれば設定完了です。

項目

説明

Webhook URL

PHPスクリプトのURL

接続確認

接続確認ボタンをクリックして緑色のチェックマークを確認

設定が完了すると、LINEユーザーがメッセージを送信した際などに、指定したWebhook URLへイベント情報がJSON形式で送信されます。PHPスクリプト側では、このJSONデータを受け取り、必要な処理を実行します。

Webサーバーは、インターネット上で公開されている必要があります。ローカル環境で開発している場合は、ngrokなどのツールを使用して一時的に公開することができます。また、ファイアウォールなどで通信がブロックされていないことを確認してください。

(4)受信したWebhookデータを各システムに転送する処理を実装

中継サーバーは、LINEプラットフォームからWebhookイベントを受信後、連携する各システムにデータを送信する役割を担います。このデータ転送処理の実装は、各システムのAPI仕様に大きく依存します。

まず、Webhookデータのフォーマットを理解することが重要です。LINEプラットフォームから送られてくるデータはJSON形式であり、イベントタイプやユーザーID、メッセージ内容などが含まれています。

次に、各システムのAPI仕様に基づき、受信したWebhookデータを変換する必要があります。例えば、あるシステムでは特定の形式のJSONデータしか受け付けない場合、それに合わせてデータを変換する処理を実装します。以下はデータ変換の例です。

変換前

変換後

"message": "Hello"

"text": "Hello"

"userId": "U1234567890abcdef1234567890abcd"

"user_id": 12345

各システムへのデータ送信は、HTTPリクエストを通じて行います。各システムのAPIエンドポイントに対して、変換したデータをPOSTリクエストで送信することで、データ連携を実現します。

転送処理の実装においては、エラー処理とログ出力も重要な要素です。データ転送が失敗した場合の原因を特定し、迅速な対応を行うために、詳細なログを出力するようにしましょう。また、万が一の事態に備え、リトライ機構を設けることも有効です。

(5)PHPでの実装例(コードサンプル)

この節では、LINE Messaging APIとPHPを用いて、Webhookで受信したメッセージに返信するBOTのサンプルコードを解説します。

ユーザーからメッセージを受信すると、Webhookによって指定のPHPスクリプトが実行されます。
サンプルコードでは、まずLINE BOT SDKを使用して必要な設定を行います。
具体的には、チャネルシークレットとチャネルアクセストークンを設定し、Messaging APIクライアントを初期化します。

次に、Webhookで受信したデータからイベント情報を取得します。
イベントの種類に応じて適切な処理を行い、返信メッセージを作成します。

ユーザーからテキストメッセージを受信した場合は、その内容に応じて返信メッセージを生成します。
例えば、「こんにちは」と受信した場合は、「こんにちは!〇〇です。」と返信します。
その他のメッセージを受信した場合は、「メッセージありがとうございます。」と返信します。

// ... 前略 ...

foreach ($parsedEvents->getEvents() as $event) {
    // ... 中略(ユーザー情報の取得等) ...

    if ($event instanceof \LINE\Webhook\Model\TextMessageContent) {
        $receivedMessage = $event->getText();
        if ($receivedMessage === 'こんにちは') {
            $replyText = 'こんにちは!〇〇です。';
        } else {
            $replyText = 'メッセージありがとうございます。';
        }
        $replyMessage = new TextMessage(['text' => $replyText]);
        $messagingApi->replyMessage(new ReplyMessageRequest(['replyToken' => $event->getReplyToken(), 'messages' => [$replyMessage]]));
    }
}

// ... 後略 ...

各システムへのデータ転送方法と注意点

Webhookを活用してLINE公式アカウントと複数の外部システムを連携させる際に、データの転送方法と注意点を理解することは非常に重要です。それぞれのシステムのAPI仕様に合わせたデータ形式への変換、エラー発生時の適切な処理、そしてセキュリティ対策を万全にすることで、安定した連携を実現できます。

LINE公式アカウントからWebhookで送信されるデータはJSON形式です。このデータには、ユーザーID、メッセージ内容、イベントタイプなどの情報が含まれています。連携先のシステムが異なるデータ形式を要求する場合、データ変換が必要になります。例えば、システムによってはXML形式を要求する場合もあり、その場合はJSONをXMLに変換する処理を実装しなければなりません。

また、各システムのAPI仕様に合わせて必要なデータのみを抽出して送信する必要があります。例えば、ユーザーのメッセージ内容のみをデータベースに保存したい場合、JSONデータからメッセージ部分のみを抽出して送信するように設定します。

項目

説明

データフォーマット

WebhookデータはJSON形式

データ変換

各システムのAPI仕様に合わせて変換が必要

データ抽出

各システムに必要なデータのみを送信

エラー処理

エラー発生時の処理を実装

セキュリティ対策

アクセストークンの適切な管理

エラー処理も重要な要素です。Webhookの送信に失敗した場合、エラー内容をログに記録し、再送などの適切な処理を行う必要があります。エラー処理を適切に行うことで、データの欠落やシステムの停止を防ぐことができます。

さらに、セキュリティ対策も忘れてはなりません。Webhook URLやアクセストークンは外部に漏洩しないよう厳重に管理する必要があります。不正アクセスを防ぐために、IPアドレス制限やアクセストークンの定期的な更新などの対策を講じることが重要です。

(1)Webhookデータのフォーマット

Webhookで送信されるデータはJSON形式です。Webhookには様々なイベントが含まれます。
例えば、メッセージ受信、友だち追加、ブロックなど、ユーザーのアクションによって送信されるデータの種類が異なります。

メッセージ受信イベントを例にすると、以下のようなデータ構造となっています。

項目

説明

destination

メッセージの送信先

events

イベントの情報が配列で格納されている

events[0].type

イベントの種類(message)

events[0].message.type

メッセージの種類(text, sticker, imageなど)

events[0].message.id

メッセージID

events[0].message.text

メッセージのテキスト内容

events[0].source.type

メッセージ送信元のタイプ(user, group, room)

events[0].source.userId

メッセージ送信元のユーザーID

events[0].timestamp

イベント発生時刻

events[0].replyToken

返信用のトークン

mode

Webhookの動作モード

これらのデータは、各システムに合わせた形式に変換する必要があります。
例えば、データベースに保存する場合、必要な項目だけを抽出して保存したり、日付形式を変換したりする必要があるでしょう。
また、システムによっては特定のフォーマットを要求される場合もあります。
データ構造を理解することで、適切なデータ処理を行い、LINE公式アカウントと連携したシステムを構築することができます。

(2)各システムのAPI仕様に合わせたデータ変換

LINE公式アカウントからWebhookで受信したデータは、そのままでは他のシステムで利用できないケースが多いです。各システムのAPI仕様に合わせてデータを変換する必要があります。

LINEのWebhookデータはJSON形式で送られてきます。
例えば、ユーザーからテキストメッセージが送られてきた場合、以下のようなデータ構造になります。

キー

type

message

message.type

text

message.text

送信されたメッセージ内容

このデータを、例えばCRMシステムに送信する場合、CRMシステムのAPIが要求する形式に変換する必要があります。
多くのCRMシステムでは、顧客IDやイベントの種類、発生日時などの情報が必要です。
Webhookデータから必要な情報を取り出し、以下のように変換します。

キー

customer_id

LINEのuserId

event_type

message

event_timestamp

Webhook受信日時

message_content

送信されたメッセージ内容

データ変換には、プログラミング言語の標準機能や外部ライブラリを使用できます。
また、システムによっては、特定のデータ形式を要求する場合があります。
各システムのAPIドキュメントをよく確認し、適切なデータ変換処理を実装しましょう。

(3)エラー処理とログの重要性

Webhookを利用したシステム連携では、予期せぬエラー発生に備え、適切なエラー処理とログ記録が不可欠です。これにより、迅速な問題解決と安定したシステム運用を実現できます。

エラー処理は、システム連携の過程で発生する可能性のある様々なエラーを想定し、適切な対処方法を定義する必要があります。例えば、外部システムとの通信エラーやデータ形式の不一致などが考えられます。

具体的なエラー処理としては、以下のような方法が挙げられます。

  • エラー発生時に再試行する

  • エラー内容を管理者に通知する

  • エラー発生時に代替処理を実行する

また、ログ記録は、システムの動作状況やエラー発生時の情報を記録する仕組みです。ログを記録することで、問題発生時の原因特定やシステムの改善に役立ちます。

ログの種類

説明

アクセスログ

システムへのアクセス状況を記録

エラーログ

エラー発生時の情報を記録

アプリケーションログ

アプリケーションの動作状況を記録

ログには、発生日時、エラー内容、処理内容などを記録する必要があります。

エラー処理とログ記録を適切に行うことで、システムの安定稼働に繋がり、ユーザーへの影響を最小限に抑えることができます。

(4)セキュリティ対策

Webhookを利用する上で、セキュリティ対策は非常に重要です。なぜなら外部からのアクセスを常に受け付ける状態になるからです。悪意ある第三者からの攻撃を防ぎ、安全にシステムを運用するために、以下の対策をしっかりと行いましょう。

項目

説明

IPアドレス制限

LINEからのWebhookのみを受け付けるように、LINEのIPアドレス範囲を指定します。これにより、不正なアクセスを遮断できます。

署名検証

送信されてきたWebhookが本当にLINEから送られたものかどうかを確認するために、署名検証を行います。LINEからのWebhookにはX-Line-Signatureヘッダーが含まれており、これを検証することでなりすましを防ぎます。

アクセストークンの適切な管理

アクセストークンはLINE公式アカウントを操作するための重要な鍵です。漏洩すると不正利用される可能性があるため、厳重に管理する必要があります。ソースコードに直接埋め込まず、環境変数などに保存し、アクセス権限を適切に設定しましょう。

HTTPS通信

Webhook URLはHTTPSで設定しましょう。HTTP通信は暗号化されていないため、盗聴や改ざんの危険性があります。HTTPS通信を利用することで、安全にデータを送受信できます。

定期的なセキュリティアップデート

利用しているシステムやライブラリは常に最新の状態に保ち、セキュリティの脆弱性を解消しましょう。

これらの対策を講じることで、Webhookを安全に運用し、LINE公式アカウントとの連携をより強固なものにできます。

まとめ:複数システム連携でLINE公式アカウントをさらに活用

LINE公式アカウントと複数システムを連携させることで、ビジネスの効率化や顧客体験の向上が実現できます。Webhookを活用した連携は、リアルタイムなデータ処理を可能にし、迅速な対応を促します。

例えば、顧客からの問い合わせをLINEで受け付け、CRMシステムに自動的に記録する、といったことが可能になります。また、ECサイトと連携すれば、注文情報や配送状況をLINEで通知することもできます。

連携システム例

活用例

CRM

顧客情報の一元管理、問い合わせ対応の効率化

ECサイト

注文管理、配送状況の通知

マーケティングオートメーション

セグメント配信、One to Oneメッセージ

チャットボット

24時間365日の自動応答

GASやPHPを用いた中継サーバーを構築することで、複数のシステムと柔軟に連携できます。それぞれのシステムのAPI仕様に合わせたデータ変換やエラー処理を適切に行うことで、安定した連携が実現します。

初期設定には多少の手間がかかりますが、一度連携が完了すれば、自動化による業務効率の向上や、顧客満足度の向上といった大きなメリットが得られます。ぜひ、本記事を参考に複数システム連携に挑戦し、LINE公式アカウントを最大限に活用してください。

よくある質問(FAQ)

ここでは、LINE公式アカウントに複数のWebhook URLを設定する際のよくある質問にお答えします。

Q1. GASとPHPどちらがおすすめですか?

A. 状況によって異なります。GASは手軽に始められる一方、PHPはより柔軟なカスタマイズが可能です。以下にそれぞれのメリット・デメリットをまとめました。

言語

メリット

デメリット

GAS

環境構築が不要。JavaScriptの知識があれば開発しやすい

無料枠の制限がある。大規模なシステムには不向き

PHP

カスタマイズ性が高い。豊富なライブラリを活用できる

サーバーの用意・管理が必要

Q2. 複数システム連携時の費用は?

A. 連携するシステムやGAS/PHPを利用する場合のサーバー費用などによって異なります。GASはGoogleアカウントがあれば無料で利用開始できますが、利用状況によってはGoogle Workspaceの有料プランへの加入が必要になるケースがあります。PHPの場合は、サーバーのレンタル費用やドメイン費用などが発生します。各システムのAPI利用料も考慮する必要があります。

Q3. Webhookがうまく動作しない場合のトラブルシューティング

A. Webhookが正常に動作しない場合は、以下の点を確認してください。

  • LINE Developersコンソールで設定したWebhook URLが正しいか。

  • アクセストークンが有効期限内か。

  • 各システムのAPIのステータスを確認する。

  • GASの場合は、スクリプトの実行ログを確認し、エラーが発生していないかを確認する。PHPの場合は、エラーログを確認する。

  • 送受信されるデータの内容をログに出力して確認する。

上記を確認しても解決しない場合は、LINE Developersのドキュメントを参照するか、各システムのサポート窓口に問い合わせてください。

(1)GASとPHPどちらがおすすめ?

GASとPHP、どちらもLINE公式アカウントと複数システムを連携させるためのWebhook中継サーバーを構築できますが、それぞれの特徴を理解し、開発者のスキルや運用環境に合わせて選択することが重要です。

手軽に始めたい、サーバー管理をしたくないという方にはGASがおすすめです。Googleアカウントがあれば無料で利用でき、サーバーの構築や管理が不要というメリットがあります。コーディングの経験が浅くても比較的容易に実装できる点も魅力です。

一方、PHPは本格的なシステム開発に適しています。豊富なライブラリやフレームワークを活用することで、複雑な処理や大規模なシステムへの対応が可能です。ただし、サーバーの構築・管理が必要となるため、ある程度の技術力が必要です。

項目

GAS

PHP

開発環境

GoogleアカウントがあればOK

Webサーバーが必要

コスト

無料

サーバー費用が必要

難易度

中~難

拡張性

処理速度

セキュリティ

Googleのセキュリティに依存

自身でセキュリティ対策が必要

上記を参考に、ご自身の状況に合った方を選択してください。小規模でシンプルな連携であればGAS、大規模で複雑な連携をする場合や、処理速度やセキュリティを重視する場合はPHPを選択すると良いでしょう。

(2)複数システム連携時の費用は?

LINE公式アカウントと複数のシステムを連携させる際にかかる費用は、大きく分けて以下の要素から成ります。

  • LINE公式アカウント利用料: プランによって異なりますが、無料プランも利用可能です。ただし、無料プランではメッセージ送信数に制限があります。

  • 中継サーバー利用料: GASを利用する場合はGoogleアカウントがあれば無料で利用できます。PHPの場合は、サーバーのレンタル費用やドメイン費用が発生します。無料のレンタルサーバーもありますが、機能や安定性に制限がある場合があります。

  • 各システム利用料: 連携するシステムによって費用は様々です。例えば、MAツールやCRMツールなどは月額費用がかかる場合が多いです。無料プランを提供しているサービスもあります。

  • 開発費用: Webhookを利用するためのスクリプト作成やシステム連携設定などを外注する場合、開発費用が発生します。自社で開発する場合は、開発にかかる人件費が費用となります。

項目

GASの場合

PHPの場合

LINE公式アカウント利用料

共通

共通

中継サーバー利用料

無料

サーバー費用、ドメイン費用

各システム利用料

共通

共通

開発費用

自社開発 or 外注

自社開発 or 外注

このように、費用は連携するシステムや開発方法によって大きく変動します。それぞれのシステムの料金体系を確認し、予算に合わせて最適なプランを選択することが重要です。無料プランをうまく活用することで、費用を抑えることも可能です。

(3)Webhookがうまく動作しない場合のトラブルシューティング

Webhookが正常に機能しない場合は、落ち着いて原因を特定し、一つずつ確認していくことが重要です。
よくある問題と対応策を以下にまとめました。

問題

対応策

LINE DevelopersコンソールでWebhook URLが正しく設定されていない

LINE DevelopersコンソールでWebhook URLが正しく設定されているか、HTTPSでアクセス可能かを確認します。

Webhookの接続確認が失敗する

署名検証が正しく行われているかを確認します。LINEからのWebhookイベントには署名が含まれており、これを使って正当性を検証する必要があります。

受信サーバー側でエラーが発生している

受信サーバーのエラーログを確認します。GASの場合は実行ログ、PHPの場合はWebサーバーのエラーログを確認し、エラーの原因を特定します。

送信データの形式が正しくない

LINEから送信されるデータの形式が、受信サーバー側で想定している形式と一致しているかを確認します。

ネットワークの問題

ファイアウォールやプロキシ設定がWebhookの通信をブロックしていないかを確認します。一時的なネットワーク障害の可能性もあるため、時間を置いて再試行してみましょう。

これらの対応策を試しても解決しない場合は、LINE Developersのドキュメントを参照するか、コミュニティフォーラムで質問してみるのも良いでしょう。問題を特定しやすくするために、エラーメッセージや発生状況を具体的に記録しておくことが重要です。

タイトルとURLをコピーしました