2024-11-26
line bot 申請建立一個群組 line bot 可以接收一些訊息,line bot 回答一些訊息 例如回答簡單的加法運算,利用php laravel 的 webhook 做收與答
ChatGPT:
要使用 PHP Laravel 開發一個簡單的 Line Bot,能夠接收訊息並回答(例如執行簡單的加法運算),可以按照以下步驟進行設置:
註冊 LINE Developer 帳號 到 LINE Developers 註冊或登入帳號。
建立 Channel
https://yourdomain.com/webhook
。composer create-project laravel/laravel line-bot
composer require linecorp/line-bot-sdk
.env
文件中新增 LINE 的 Channel Secret 和 Access Token:LINE_CHANNEL_SECRET=your_channel_secret
LINE_ACCESS_TOKEN=your_access_token
php artisan make:controller LineBotController
LineBotController
中新增以下程式碼:<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use LINE\LINEBot;
use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot\MessageBuilder\TextMessageBuilder;
class LineBotController extends Controller
{
private $bot;
public function __construct()
{
$httpClient = new CurlHTTPClient(env('LINE_ACCESS_TOKEN'));
$this->bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_CHANNEL_SECRET')]);
}
public function webhook(Request $request)
{
$events = $request->events;
foreach ($events as $event) {
// 確認是文字訊息事件
if ($event['type'] === 'message' && $event['message']['type'] === 'text') {
$replyToken = $event['replyToken'];
$userMessage = $event['message']['text'];
// 處理加法運算
if (preg_match('/^(\d+)\+(\d+)$/', $userMessage, $matches)) {
$result = (int)$matches[1] + (int)$matches[2];
$replyMessage = "計算結果是:$result";
} else {
$replyMessage = "請輸入加法運算,例如:3+5";
}
$this->replyMessage($replyToken, $replyMessage);
}
}
}
private function replyMessage($replyToken, $message)
{
$textMessageBuilder = new TextMessageBuilder($message);
$this->bot->replyMessage($replyToken, $textMessageBuilder);
}
}
routes/web.php
中新增路由:use App\Http\Controllers\LineBotController;
Route::post('/webhook', [LineBotController::class, 'webhook']);
部署到支援 HTTPS 的伺服器 LINE Webhook URL 必須是 HTTPS,將 Laravel 專案部署到支援 HTTPS 的伺服器。
設定 Webhook URL 在 LINE Developers 設定 Webhook URL,例如:
https://yourdomain.com/webhook
3+5
,Bot 應回傳 計算結果是:8
。這樣,你的 LINE Bot 就完成了!🎉 如果有其他需求,例如處理更多訊息類型,可以進一步擴展邏輯。
You:
請詳述 Line Bot 如何加入群組中, 如何回答問題 是用line 帳號來加入嗎?
ChatGPT:
讓 LINE Bot 加入群組並回答問題需要遵循 LINE Messaging API 的一些規範和流程。以下是詳細步驟:
Allow bot to join group chats : 開啟此選項,允許 Bot 加入群組。
Auto-reply messages : 關閉此選項(若你已設置 Webhook)。
在 LINE App 中,新增 Bot 為好友(透過 QR Code 或 ID 搜尋)。
將 Bot 加入到一個群組。
當 LINE Bot 加入群組後,LINE Messaging API 提供了群組內訊息的特殊事件處理方式。
當群組內有訊息時,LINE 會透過 Webhook 傳送事件。每個事件包含以下重要內容:
source : 表示事件的來源,可以是 user
、group
或 room
。
type : 表示事件類型,例如 message
、join
(Bot 被加入群組)等。
Webhook 事件範例(群組訊息):
{
"events": [
{
"type": "message",
"replyToken": "abcdefgh12345",
"source": {
"type": "group",
"groupId": "C1234567890abcdef"
},
"message": {
"id": "9876543210",
"type": "text",
"text": "3+5"
},
"timestamp": 1636892700
}
]
}
在 Laravel 的控制器中,你需要辨識訊息來源是否來自群組。以下為處理邏輯的範例程式碼:
public function webhook(Request $request)
{
$events = $request->events;
foreach ($events as $event) {
$sourceType = $event['source']['type'];
// 如果是群組訊息
if ($sourceType === 'group') {
$groupId = $event['source']['groupId'];
$replyToken = $event['replyToken'];
$userMessage = $event['message']['text'];
// 處理簡單加法邏輯
if (preg_match('/^(\d+)\+(\d+)$/', $userMessage, $matches)) {
$result = (int)$matches[1] + (int)$matches[2];
$replyMessage = "群組內的計算結果是:$result";
} else {
$replyMessage = "請輸入加法運算,例如:3+5";
}
$this->replyMessage($replyToken, $replyMessage);
}
}
}
當 Bot 被邀請加入群組時,LINE 會觸發 join
事件。你可以回應群組內的第一條歡迎訊息:
if ($event['type'] === 'join' && $sourceType === 'group') {
$replyToken = $event['replyToken'];
$replyMessage = "大家好!我是你的 LINE Bot,可以進行簡單的加法運算!";
$this->replyMessage($replyToken, $replyMessage);
}
Bot 無法主動加入群組 LINE 的政策限制,Bot 只能被用戶或群組邀請進入群組,無法自行加入。
權限管理
source
欄位,可以判斷訊息來源是個人聊天 (user
)、群組 (group
)、還是多群 (room
)。3+5
的訊息,確認 Bot 是否回應。這樣,LINE Bot 就可以在群組內正常工作了! 😊 如果還有疑問,可以進一步補充需求。
You:
要使用 PHP Laravel 開發一個 Line Bot,能夠接收訊息並 串接 chatbot API 回答問題回到 line 中
ChatGPT:
以下是使用 PHP Laravel 開發一個 LINE Bot,並串接第三方 Chatbot API(例如 OpenAI 的 ChatGPT API)的完整流程:
LINE 使用者發送訊息 LINE 使用者向 Bot 發送訊息,LINE 平台透過 Webhook 將訊息傳送到你的伺服器。
伺服器處理並轉發到 Chatbot API 你的 Laravel 應用程式接收訊息,將訊息內容發送到第三方 Chatbot API(如 ChatGPT)。
Chatbot API 回傳結果 第三方 API 回傳回答,Laravel 接收後再透過 LINE Messaging API 回傳給使用者。
若尚未建立專案,請先安裝 Laravel:
composer create-project laravel/laravel line-chatbot
安裝 LINE 官方 SDK:
composer require linecorp/line-bot-sdk
.env
文件中新增:LINE_CHANNEL_SECRET=your_line_channel_secret
LINE_ACCESS_TOKEN=your_line_access_token
CHATBOT_API_KEY=your_chatbot_api_key
CHATBOT_API_URL=https://api.example.com/chat
使用 Artisan 指令建立控制器:
php artisan make:controller LineBotController
在 LineBotController
中,編寫以下邏輯:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use LINE\LINEBot;
use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot\MessageBuilder\TextMessageBuilder;
use GuzzleHttp\Client;
class LineBotController extends Controller
{
private $bot;
public function __construct()
{
$httpClient = new CurlHTTPClient(env('LINE_ACCESS_TOKEN'));
$this->bot = new LINEBot($httpClient, ['channelSecret' => env('LINE_CHANNEL_SECRET')]);
}
public function webhook(Request $request)
{
$events = $request->events;
foreach ($events as $event) {
if ($event['type'] === 'message' && $event['message']['type'] === 'text') {
$replyToken = $event['replyToken'];
$userMessage = $event['message']['text'];
// 發送訊息到 Chatbot API
$replyMessage = $this->fetchChatbotReply($userMessage);
// 回應使用者訊息
$this->replyMessage($replyToken, $replyMessage);
}
}
}
private function fetchChatbotReply($message)
{
try {
$client = new Client();
$response = $client->post(env('CHATBOT_API_URL'), [
'headers' => [
'Authorization' => 'Bearer ' . env('CHATBOT_API_KEY'),
'Content-Type' => 'application/json',
],
'json' => [
'prompt' => $message,
'max_tokens' => 100,
],
]);
$data = json_decode($response->getBody(), true);
return $data['choices'][0]['text'] ?? '抱歉,我無法理解你的問題。';
} catch (\Exception $e) {
return '系統忙碌中,請稍後再試!';
}
}
private function replyMessage($replyToken, $message)
{
$textMessageBuilder = new TextMessageBuilder($message);
$this->bot->replyMessage($replyToken, $textMessageBuilder);
}
}
在 routes/web.php
中新增路由:
use App\Http\Controllers\LineBotController;
Route::post('/webhook', [LineBotController::class, 'webhook']);
部署到支援 HTTPS 的伺服器
LINE Webhook URL 必須是 HTTPS,例如 https://yourdomain.com/webhook
。
設定 LINE Webhook 在 LINE Developers 平台的 Messaging API 中設定 Webhook URL。
測試
fetchChatbotReply
的邏輯。完成上述設置後,你的 LINE Bot 就可以串接 Chatbot API,實現智慧回應的功能!🎉