自從 2020 年疫情大爆發以來,如果要票選疫情期間的關鍵字,「居家上班(Work From Home - WFH)
」絕對是榜上有名,而各家即時通訊廠商為了 WFH 這件事情,無不卯足全力調整自家軟體功能,希望在這個特殊的時期能夠跟得上使用者的需求,其中在台灣擁有大量用戶的 LINE 就將其群組通話功能獨立出來做成「LINE 會議室
」,使用者只要經由會議室連結
就能直接進行群組通話,不需要是同一個群組內的成員,但是這個會議室連結無法分享在 LINE 社群,這篇文章就來說明要怎麼讓 LINE 會議室連結分享在 LINE 社群?
縮網址(已失效)
如果我們直接將會議室的連結貼到社群裡面,就會收到一個訊息「無法將會議室的邀請連結分享至社群
」。
在約莫一個月前,縮網址大法還能逃過檢查,但是現在已經不行了,貼上縮網址後的會議室連結就會發現,訊息會被刪掉,即使把會議室連結貼到記事本去,也會被刪掉。
自架轉址服務
既然路不通了,我們就開路吧!合理推論,檢查機制應該是在「預覽超連結內容
」的過程當中執行的,因此邏輯上我們只要騙過預覽機制就行了,我先寫了一支 Web Api 部署在 Azure App Service 上,來看看預覽機制發了什麼 Request 內容過來?
HomeController.cs
public class HomeController : Controller
{
public IActionResult Index(string id)
{
var userAgent = this.Request.Headers[HeaderNames.UserAgent];
this.ViewBag.Title = "Line 會議室";
this.ViewBag.Description = userAgent;
return this.View();
}
}
Index.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewBag.Title - LineMeetingRoom</title>
<meta name="description" content="@ViewBag.Description">
</head>
<body>
</body>
</html>
我先從 User-Agent
這個指標性的 Request Header 開始觀察,我將 User-Agent 的資訊放在 <meta name="description" content=""> 裡面,看看它跟一般瀏覽器的 User-Agent 有沒有差別?
從上圖得知,LINE 的預覽機制是把自己偽裝成 facebookexternalhit
,然後在後面補上 line-poker
以示區別,所以我們可以嘗試針對這一個 User-Agent 回應 HTML 內容給它,其他的一律回應 302 轉址到會議室連結,看看這樣騙不騙得過預覽機制?
public class HomeController : Controller
{
public IActionResult Index(string id)
{
var userAgent = this.Request.Headers[HeaderNames.UserAgent];
var redirect = $"https://line.me/R/meeting/{id}";
if (Regex.IsMatch(userAgent, "(?:facebook|line-poker)", RegexOptions.IgnoreCase))
{
this.ViewBag.Title = "Line 會議室";
this.ViewBag.Description = redirect;
return this.View();
}
if (string.IsNullOrEmpty(id)) return this.StatusCode(200);
return this.Redirect(redirect);
}
}
我們的運氣不錯,騙過預覽機制了,預覽機制收到的是我們回應給它的 HTML 內容,而使用者點擊連結則是跳出加入 LINE 會議室的提示。
我是不曉得為什麼 LINE 要限制會議室連結分享到社群?可能有我想不到的考量,不過 LINE 這麼做只能防止一般的使用者,程式設計師想弄還是有辦法的,如果有了解內情的朋友,方便的話,歡迎留言分享給我們知道。