2022-06-30

【PHP】LINE 回覆文字訊息

參考資料 ----
List of available LINE emojis

文字訊息也可包含 emoji(顏文字), 只不過限於 LINE 官方的 emoji
 
<?php
// 因為網站是寄放在虛擬主機商那, 所以要指定時區
date_default_timezone_set('Asia/Taipei');
$channelAccessToken = '{從 LINE 官方帳號後台取得的 token}';
 
// 客戶端傳來的訊息
$bodyMsg = file_get_contents('php://input');

// 寫 log, 檔案在目前目錄下的 log 目錄內
// 檔名為 log_西元年月日.log, 一天一個檔
$sLogfile = './log/log_'.date('Ymd').'.log';
$fp = fopen($sLogfile, "a+");
fwrite($fp , print_r(date('Y-m-d H:i:s').', Recive: '.$bodyMsg."\n", true));
fclose($fp);

$obj = json_decode($bodyMsg, true);

foreach ($obj['events'] as &$event) 
{
   $userId = $event['source']['userId'];
   
    // 取得 使用者傳來的訊息
    $msgUser = $event['message']['text'];

    // 回覆含 emoji 的文字訊息
    // $ 的位置就是 emoji 的位置, 作用類似格式化輸出
    // 在本例, 2 個 $ 的位置分別為 0, 8
    $msgReply = '$含 emoji$ 的文字訊息';
    
    $payload = [ 'replyToken' => $event['replyToken'],
                'messages' => [  // 一次最多可回覆 5 則訊息, 若超過 5 則, 程式就掛了, 不會有任何回應
                                ['type' => 'text',
                                'text' => $msgReply,
                                'emojis' => [   [
                                                    "index"=> 0,    // emoji 在文字串的位置, 一定要和 $msgReply 中的 $ 的位置一致, 不然整個訊息都不會回覆
                                                    "productId" => "5ac1bfd5040ab15980c9b435",
                                                    "emojiId" => "001"
                                                ],
                                                [
                                                    "index" => 8,
                                                    "productId" => "5ac1bfd5040ab15980c9b435",
                                                    "emojiId" => "005"
                                                ]
                                        ]
                                ],
                                [   'type' => 'text',
                                    'text' => '文字訊息 2'
                                ],
                                [   'type' => 'text',
                                    'text' => '文字訊息 3'
                                ],
                                [   'type' => 'text',
                                    'text' => '文字訊息 4'
                                ],
                                [   'type' => 'text',
                                    'text' => '文字訊息 5'
                                ]
                            ]
            ];
            
    // Send reply API
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/bot/message/reply');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [  'Content-Type: application/json',
                                            'Authorization: Bearer ' . $channelAccessToken
                                        ]);
    $result = curl_exec($ch);
    curl_close($ch);
}
 
?>






沒有留言:

張貼留言