建立Cusdis Telegram Bot以取得留言通知

目前在GitHub可以找到三種Telegram Bot:

  • https://github.com/djyde/cusdis-telegram-bot
    官方的Cusdis Telegram Bot,下指令沒反應,無法使用。

  • https://github.com/WingLim/cusdis-telegram-bot

    These features are based on saving approve link with token to a redis server.
    We will automatically delete the approve link which is saved in redis to protect your privacy.

    1. Approve comment in bot
    2. Append comment in bot

    根據敘述的功能來執行:

    1. Approve comment in bot:因為Approve連結被刪除無法開啟,在Telegram點Approve按鈕會顯示讀取中,但是沒有反應。
    2. Append comment in bot:對該篇通知直接用Telegram回覆,輸入訊息以批准並回覆留言。

    因為第一點不確定要怎麼做才行,放棄使用。


最後我選擇第三種機器人來加入Webhook。

  1. 先建立Telegram Bot取得Token和Chat ID,方法請參考〈Telegram.Bot.申請及Channel使用方式〉。

  2. 將以下Cusdis Telegram Bot Python程式碼的Token和Chat ID改成剛拿到的數值。

    from napkin import response, request
    import requests
    import json
    
    TELEGRAM_BOT_TOKEN = 'xxxxxx'  //輸入機器人的Token
    TELEGRAM_CHAT_ID = 'xxxxx'  //輸入機器人的Chat ID
    
    
    def format_message(data):
        """data example:
        {
            "type": "new_comment",
            "data": {
                "by_nickname": "xxx",
                "by_email": "xxx",
                "content": "xxx",
                "page_id": "xxx",
                "page_title": "xxx", // page title, maybe NULL
                "project_title": "haha", // project title
                "approve_link": "" // use this link to approve this comment without login
            }
        }
        """
        data_type = data['type'].replace('_', ' ').capitalize()
        message_tmpl = """_{data_type} on *{page_title}* on website *{project_title}*:_
    
    ```
    {content}
    ```
    by: *{by_nickname}*
    """
        return message_tmpl.format(data_type=data_type, **data['data'])
    
    
    def send_to_telegram(data=None):
        data = data or json.loads(request.data)
        url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
        message = format_message(data)
        reply_markup = {
            'inline_keyboard': [[{'text': 'Approve', 'url': data['data'].get('approve_link')}]]
        }
        resp = requests.post(
            url,
            data={
                'chat_id': TELEGRAM_CHAT_ID,
                'text': message,
                'parse_mode': 'MarkdownV2',
                'reply_markup': json.dumps(reply_markup)
            }
        )
        return resp.json(), resp.status_code
    
    resp, status_code = send_to_telegram()
    response.status_code = status_code
    response.body = resp
    response.headers = {
        'Content-Type': 'application/json'
    }
  3. Napkin雲端平台,建立一個新的Function,輸入名稱並選擇Python環境。
    建立新的Function

  4. 將程式碼複製貼上,點一下Deploy按鈕,將上面網址貼到Cusdis管理後台的Webhook欄位。
    部署程式碼

  5. 建立的機器人只能自用,無法給其他人用。收到通知後顯示如下:

    收到Cusdis TG Bot通知
  6. 點一下Approve按鈕,顯示是否要開啟連結(和Email通知的連結相同)以批准或回覆留言。

    從Cusdis TG Bot通知開啟連結

參考文章: