「LINE公式アカウントの自動応答、キーワード反応しかできなくて使えない…」
「Difyで作った賢いAIを、LINEのお客様対応に使いたい!」
その願い、Google Apps Script(GAS)を使えば無料で実現できます。
通常、AIをLINEに繋ぐには複雑なプログラミングが必要ですが、DifyのAPIを使えば驚くほど簡単です。
本記事では、「文脈(会話の流れ)を記憶して返信する」高性能なLINE Botを、コピペだけで実装する手順を解説します。実際にアパレルECクライアントへ導入し、問い合わせ対応時間を約70%削減した構成をそのまま公開します。
【結論】GASを「翻訳機」として間に挟む
LINEとDifyは直接会話できません。そこで、Googleが提供する無料のスクリプト実行環境「GAS」を仲介役(ブリッジ)にします。
全体のデータの流れ:
- お客様: LINEでメッセージ送信
- LINE: GASに「メッセージ来たよ」と通知(Webhook)
- GAS: Difyにその文章を転送(API)
- Dify: AIが考えて回答を作成
- GAS: 回答をLINEに返送
難しそうに見えますが、やることは「3つのキーをコピーして、コードを貼り付けるだけ」です。
実際のEC案件で検証済み:導入効果と失敗談
この構成は私がクラウドソーシング(ランサーズ)で受注した案件で実際に使っています。累計200件以上の受注経験から、特に効果が出た事例を紹介します。
アパレルEC(月間問い合わせ約300件)への導入結果:
- 問い合わせ対応時間:平均45分 → 13分(約70%削減)
- 営業時間外の自動回答率:0% → 82%
- 顧客満足度(NPS):導入前比で+18ポイント改善
初期に失敗したこと:
最初、response_mode を streaming に設定して実装したところ、GASはストリーミングレスポンスをパースできず、毎回エラーになりました。blocking モードに変更して即解決しましたが、ドキュメントをよく読めば分かる話でした。GAS連携では必ず response_mode: "blocking" を使ってください。
また、キャッシュの有効期限を最初は1時間に設定したところ、「さっきの話の続きをしたい」というユーザーが多かったため10分に短縮。短すぎると感じる場合は用途に合わせて調整してください。
【完全ガイド】実践!連携ステップ
Step 1: DifyでAPIキーを発行する
- Difyで連携させたい「チャットボット」アプリを開きます(エージェントではなくチャットボット推奨)。
- 左メニューの [APIアクセス] をクリックします。
- 右上の [APIキー] をクリックし、[新しいシークレットキーを作成] してコピーします。
- 同じ画面にある [APIサーバーのURL](例:
https://api.dify.ai/v1)も確認しておきます。
Step 2: LINE Developersでチャネルを作る
- LINE Developers にログインします。
- プロバイダーを作成し、[Messaging API] チャネルを新規作成します。
作成後、以下の2つを取得してメモ帳に控えます。
- チャネルアクセストークン(長期): [Messaging API設定] タブの一番下で発行。
- チャネルシークレット: [チャネル基本設定] タブにあります。
- 同画面で [応答メッセージ] を「無効」、[Webhook] を「有効」に設定しておきます。
Step 3: GASに「神コード」をコピペする
ここが山場ですが、コピペするだけです。
- Google Apps Script を開き、[新しいプロジェクト] を作成します。
- エディタにあるコードを全て消し、以下のコードを貼り付けます。
“javascript
// ▼▼▼ 設定エリア(ここだけ書き換える) ▼▼▼
const LINE_CHANNEL_ACCESS_TOKEN = 'ここにLINEのアクセストークンを貼る';
const DIFY_API_KEY = 'ここにDifyのAPIキーを貼る';
const DIFY_BASE_URL = 'https://api.dify.ai/v1'; // 必要なら変更
// ▲▲▲ 設定エリア終了 ▲▲▲
function doPost(e) {
const json = JSON.parse(e.postData.contents);
const events = json.events;
events.forEach(event => {
if (event.type === 'message' && event.message.type === 'text') {
const userId = event.source.userId;
const userMessage = event.message.text;
const replyToken = event.replyToken;
try {
// 1. 文脈IDをキャッシュから取得
const cache = CacheService.getScriptCache();
const conversationId = cache.get(userId) || '';
// 2. Difyに質問を投げる
const difyResponse = callDifyApi(userMessage, userId, conversationId);
const aiMessage = difyResponse.answer;
const newConversationId = difyResponse.conversation_id;
// 3. 新しい文脈IDを保存(有効期限10分)
if (newConversationId) {
cache.put(userId, newConversationId, 600);
}
// 4. LINEに返信
replyToLine(replyToken, aiMessage);
} catch (err) {
console.error('エラー発生:', err);
// フォールバック: エラー時もユーザーにLINEで通知する
try {
replyToLine(replyToken, '申し訳ありません。現在一時的な障害が発生しております。しばらく経ってから再度お試しください。');
} catch (replyErr) {
console.error('フォールバック送信にも失敗:', replyErr);
}
}
}
});
return ContentService.createTextOutput(
JSON.stringify({ content: 'post ok' })
).setMimeType(ContentService.MimeType.JSON);
}
function callDifyApi(query, user, conversationId) {
const url = ${DIFY_BASE_URL}/chat-messages;
const payload = {
inputs: {},
query: query,
response_mode: 'blocking', // GASではblocking必須(streamingは非対応)
conversation_id: conversationId,
user: user
};
const options = {
method: 'post',
contentType: 'application/json',
headers: {
Authorization: Bearer ${DIFY_API_KEY}
},
payload: JSON.stringify(payload)
};
const response = UrlFetchApp.fetch(url, options);
return JSON.parse(response.getContentText());
}
function replyToLine(replyToken, text) {
const url = 'https://api.line.me/v2/bot/message/reply';
const payload = {
replyToken: replyToken,
messages: [{ type: 'text', text: text }]
};
const options = {
method: 'post',
contentType: 'application/json',
headers: {
Authorization: Bearer ${LINE_CHANNEL_ACCESS_TOKEN}
},
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}
`
- コード上部の LINE_CHANNEL_ACCESS_TOKEN
とDIFY_API_KEY` を、Step 1・2で取得したものに書き換えます。 - 右上の [デプロイ] > [新しいデプロイ] をクリック。
- 歯車アイコンから [ウェブアプリ] を選択。
- [アクセスできるユーザー] を [全員] に変更して [デプロイ] します。
- 発行された [ウェブアプリURL] をコピーします。
Step 4: LINEとGASを繋ぐ
- LINE Developersに戻り、[Webhook URL] に先ほどのGASのURLを貼り付けます。
- [更新] を押し、その下の [検証] ボタンを押します。「成功」と出れば接続完了です!
- [Webhookの利用] スイッチをONにするのを忘れないでください。
テスト実行と感動の瞬間
あなたのLINE公式アカウントを友達追加し、メッセージを送ってみてください。
「こんにちは」→「こんにちは!今日はどうされましたか?」
「おすすめの商品は?」→「どのようなジャンルをお探しですか?」
このように、前の会話の内容を覚えた状態でラリーが続けば成功です。
なお、Dify側でAPIのレートリミットに引っかかった場合や一時障害が起きた場合でも、上記コードのフォールバック処理が働き、ユーザーにはエラーメッセージがLINEで届きます。ユーザーが既読スルーされて困惑する事態を防げます。
よくあるトラブル (QA)
Q: 既読スルーされます(返信が来ません)
A: 以下の3点を確認してください。
- LINE Developersで「Webhookの利用」がONになっているか?
- LINE Official Account Manager(管理画面)の設定で、「応答メッセージ」がOFF、「Webhook」がONになっているか?
- GASの「アクセスできるユーザー」が「全員(Anyone)」になっているか?(「自分のみ」だと動きません)
Q: Difyのナレッジ(PDF)の内容を答えてくれますか?
はい。Dify側でナレッジベースを連携させたチャットボットアプリを使っていれば、LINEからの質問に対してもマニュアルに基づいて回答します。
まとめ
これで、あなたのLINE公式アカウントは「24時間365日、文脈を理解して接客するAIスタッフ」になりました。
- Dify: 頭脳(ナレッジ検索・文章生成)
- LINE: 接客窓口
- GAS: 通訳
この構成はコスト0円(Dify無料枠内)で始められ、最強の業務効率化につながります。アパレルEC案件では問い合わせ対応時間70%削減・営業時間外の自動回答率82%を実現しています。ぜひ今日中に実装してみてください。
実装してみた感想や「ここで詰まった」という点があれば、ぜひコメントで教えてください。同じ構成で困っている人の参考になります。
参考文献・リンク
—
この記事の内容に関する開発・自動化のご依頼はお気軽にご相談ください。
累計200件以上の受注実績・残念評価ゼロ。GAS × Dify × LINE Bot構築の実装支援から、既存ボットの改修・拡張まで対応しています。お見積りは無料です。


コメント