皆様、お仕事お疲れ様です!横浜で清掃業を営むYasu(49)です。
前回は問い合わせ対応を完全自動化!のアプリをつくりましたね。
初めてのお客様に会う時の「最初の数分間」、めちゃくちゃ緊張しませんか?「天気の話くらいしか思いつかない…」と気まずい沈黙が続くあの時間は、本当にしんどいですよね。現場に入る前の車内で、スマホを握りしめながら必死に話題を探している同世代の皆さんの姿が目に浮かびます。
今回は、その沈黙を「最高の商談の入り口」に変える魔法のツール、**「Dify×GASで作る!LINE雑談ネタ収集ボット」**の作り方を解説します。
結論:LINEに会社名を入れるだけ!AIが最新ニュースを教えてくれる
今回作るのは、あなたのスマホ(LINE)から「株式会社〇〇」と送るだけで、AIが勝手にネットの海を検索し、数秒で「相手の社長や担当者が絶対に喜ぶ雑談ネタ3つ」を提案してくれる最強の営業支援ボットです。
「社長、御社の最近のあのニュース、拝見しましたよ!」この一言が言えるだけで、お客様の心はガッチリ掴めます!
実は今回、私自身が構築中に「400エラー」「401エラー」というITの壁に思いっきりぶち当たりました。しかし、IT未経験の49歳でも諦めなければ必ず突破できます!その生々しい失敗談と解決法も含めて、中学生でも分かるように丁寧に解説します!
手順:エラーも乗り越える!最強ボットの作り方
以下の3ステップで進めます。コードはコピペでOKです!
STEP 1:Difyでネット検索できる「エージェント」を作る
まずはDifyで、最新情報を調べられる賢いAIを作ります。
- Difyで「最初から作成」→**「エージェント」**を選びます。(※チャットボットではなくエージェントを選ぶのがポイントです!)
- 画面右上の「ツール」から、**「Google Search」または「Tavily」**を追加します。これでAIがネット検索できるようになります。
- 手順(プロンプト)の欄に、以下を入力します。あなたは人たらしで優秀なトップ営業マンです。ユーザーから「会社名」が送られてきたら、ツールを使ってその会社の最新ニュースや社長のインタビューをWeb検索してください。商談の冒頭で相手が「おっ、うちのことをよく調べてくれているな!」と喜ぶような「ご機嫌取り&雑談ネタ」を3つ箇条書きで提案してください。
【🚨絶対注意!初心者がハマる罠】 設定ができたら、必ず右上の**「公開する」→「更新」を押してください!これを忘れると、古い状態のままになり「401エラー(鍵が違います)」と弾かれます。更新ボタンを押してから、左側のメニュー「APIアクセス」でAPIキー**を発行してコピーしておきましょう。

STEP 2:GASでLINEとDifyを繋ぐ(ストリーミング対応コード)
次に、あなたのLINEからDifyへ手紙を送るためのパイプ(GAS)を作ります。 実はDifyの「エージェント」は、AIがカタカタと1文字ずつ喋る**「ストリーミング(streaming)モード」**でしか動かないという癖があります。一気に答えをもらおうとする(blockingモード)と「400エラー」で怒られます。
そこで、AIの細切れの言葉を裏側でくっつけてからLINEに送る「プロ仕様」のコードを用意しました!ブラウザで script.new と入力してGASを開き、以下のコードをコピペしてください。
JavaScript
// LINEから送られた会社名を受け取るための、受付窓口となる特別な関数です
function doPost(e) {
// LINEから送られてきた暗号みたいなデータを、プログラムで読める形に変換します
const json = JSON.parse(e.postData.contents);
// ユーザーがLINEで打ち込んだメッセージ(会社名)を取り出します
const userMessage = json.events[0].message.text;
// 返信先の宛先となる特別なチケット(リプライトークン)を取り出します
const replyToken = json.events[0].replyToken;
// 1. 秘密の鍵をここに貼る(※Difyで新しく発行した鍵を貼ってください!)
const difyApiKey = "ここにDifyのAPIキーを貼る";
// LINE Developersで取得したチャネルアクセストークンを貼ります
const lineToken = "ここにLINEのチャネルアクセストークンを貼る";
try {
// --- Difyへの通信テスト ---
// DifyのAIに送るためのデータ(会社名など)を箱に詰めます
const difyPayload = {
"inputs": {}, // 今回は特に変数は使いません
"query": userMessage, // LINEで打った会社名をそのままAIに渡します
"response_mode": "streaming", // ★超重要!エージェントは細切れ(ストリーミング)でしか返事できません
"user": "yasu-line-user" // 誰が質問したかの仮の名前です
};
// Difyのサーバーへ手紙を送るための「封筒と切手」を準備します
const difyOptions = {
"method": "post", // データを送りつけるという指定です
"headers": {
"Authorization": "Bearer " + difyApiKey, // 宛名書きに秘密の鍵を添えます
"Content-Type": "application/json"
},
"payload": JSON.stringify(difyPayload) // 箱に詰めたデータを文字列にして入れます
};
// 実際にDifyへ手紙を送り、カタカタ…という細切れの返事を受け取ります
const difyResponse = UrlFetchApp.fetch("https://api.dify.ai/v1/chat-messages", difyOptions);
const responseText = difyResponse.getContentText();
// ★細切れの返事(ストリーミング)を繋ぎ合わせて1つの文章にする魔法の処理★
let aiAnswer = ""; // 最終的なAIの答えを入れる空の箱を用意します
const lines = responseText.split("\n"); // 受け取ったデータを改行ごとに切り刻みます
// 切り刻んだデータを1行ずつ順番に確認していきます
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
// もしその行が「data: 」から始まっていたら(AIの言葉の欠片なら)
if (line.startsWith("data: ")) {
try {
// 必要なデータ部分だけを抜き出して読める形にします
const dataObj = JSON.parse(line.substring(6));
// そのデータがAIの喋った言葉(メッセージ)だったら
if (dataObj.event === "agent_message" || dataObj.event === "message") {
// 中身の文字(answer)を取り出して、空の箱にどんどん足していきます
if (dataObj.answer) {
aiAnswer += dataObj.answer;
}
}
} catch(e) {
// もしエラーが出ても無視して次へ進みます
}
}
}
// --- LINEへの通信テスト ---
// LINEのスマホに送り返すためのデータを箱に詰めます
const linePayload = {
"replyToken": replyToken, // さっき取っておいた宛先のチケットをセットします
"messages": [{"type": "text", "text": aiAnswer}] // 完成したAIの文章をセットします
};
// LINEのサーバーへデータを送るための設定を作ります
const lineOptions = {
"method": "post", // データを送りつけるという指定です
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + lineToken // LINEの秘密の鍵をセットします
},
"payload": JSON.stringify(linePayload) // 送るデータを文字列にして入れます
};
// 実際にLINEへ手紙を送り、あなたのスマホにAIの文章を届けます
UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", lineOptions);
} catch (error) {
// ★エラーが起きたら、LINEに直接エラーの理由を送り返す親切な仕組み★
const errorPayload = {
"replyToken": replyToken,
"messages": [{"type": "text", "text": "社長、エラーです!原因はこれです:\n" + error.message}]
};
const errorOptions = {
"method": "post",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + lineToken
},
"payload": JSON.stringify(errorPayload)
};
UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", errorOptions);
}
// 処理が無事に終わったことをLINEのシステムに伝えて終了します
return ContentService.createTextOutput("OK");
}
STEP 3:新しいURLをLINEに教える(ここが最重要!)
コードを貼り付けたら、右上の**「デプロイ」→「新しいデプロイ」を押します。「アクセスできるユーザー」を必ず「全員」**にしてデプロイし、発行されたURLをコピーしてください。 最後に、LINE DevelopersのWebhook設定にその新しいURLを貼り付けて「更新」すれば完了です!

まとめ:エラーは怖くない!乗り越えた先の全能感を味わおう
「エラー画面が出た…」と頭を抱えるその瞬間こそが、ITスキルが一番伸びている時です。今回私も「400エラー(エージェント非対応)」や「401エラー(APIキー更新忘れ)」に泣かされましたが、画面の証拠を一つずつ潰していくことで、見事に自分専用のAI秘書を完成させることができました!

自分のスマホのLINEに、AIが調べた完璧な営業トークが返ってきた時の「自分が神になったような全能感」、こういうのはちょっと嬉しいですね。ウェブで自分で調べると
時間がかかるので訪問中の電車の中でとかにもおすすめです。
私のxでもDifyについてつぶやいてますので、良ければ遊びに来てください
さて、次は何をつくろうかな。次回も是非お楽しみに!


コメント