Post

Github Action|免费部署 ZReviewTender App 商城评价监控机器人,三步骤快速上手

针对 iOS 与 Android App 开发者,解决评价监控繁琐问题,利用 Github Action 免费部署 ZReviewTender 评价机器人,30 分钟完成设定,稳定抓取并即时转发评价到 Slack,提升回应效率与用户满意度。

Github Action|免费部署 ZReviewTender App 商城评价监控机器人,三步骤快速上手

Click here to view the English version of this article.

點擊這裡查看本文章正體中文版本。

基于 SEO 考量,本文标题与描述经 AI 调整,原始版本请参考内文。


[Quick Start! ] Github Action x ZReviewTender 免费快速部署你的 App 商城评价监控机器人

简单三步骤为您建立免费稳定安全的 App 评价机器人,即时关注使用者的最新评价。

[ZReviewTender](https://github.com/ZhgChgLi/ZReviewTender){:target="_blank"}

ZReviewTender

ZReviewTender

ZReviewTender — 是我在 2022/08 制作开源的 App 商城评价机器人,功能是会自动捞取 iOS App Store, Android Google Play 商城上的 App 使用者评价并转发到指定的 Slack Channel。

另外可以指定评价捞取规则、串接 Google 翻译、Asana、Google Sheet,也支援自订义客制化操作。

Github Action

Github Action 是由 Github 提供的 CI/CD 自动化集成工具,我们可以使用自己的机器做为伺服器 (Github Runner)亦或是直接使用 Github 提供的机器执行 CI/CD、自动化脚本。

费用及限制

GitHub Free 提供基本 500 MB Storage (for CI/CD Artifact)、2,000 Minutes 一个月执行分钟数。

这边要注意的是因为机器成本问题:

  • 如果使用 Github 的 Windows 机器,消耗的分钟数等于实际分钟数 x 2

  • 如果使用 Github 的 macOS 机器,消耗的分钟数等于实际分钟数 x 10

详细计价计算请参考 官方价格计算器

ZReviewTender _Minutes per month 消耗:约 120 分钟*

只需要跑在基础计价的 Linux 上,每次执行约消耗 ≤ 1 分钟,预设每 6 小时执行一次,一天花费 4 分钟,一个月约消耗 120 分钟,免费额度就很足够了。

ZReviewTender _Storage 消耗:0*

无使用 Artifact 储存资料,因此没有 Storage 的开销。

Slack

公司使用的内部通讯软体,会建立一个 Slack App 并透过这个 Slack App 身份转发 App 商城评价通知到指定的频道。

ZReviewTender x Github Action x Slack

我们使用 Github Action 来执行 ZReviewTender 脚本转发结果到 Slack,Github Repo(Action) 只是当载体使用,因此就算您的主专案不使用 Github 托管,依然可以简单照以下步骤完成 ZReviewTender 部署。🎉🎉🎉

我已经成功部署在 5 个不同公司的不同 Apps 并稳定、免费执行了至少 2 年以上。

优点:

  • 免费ZReviewTender 是我制作的开源免费服务、部署在 Github Action 使用免费额度绰绰有余。 您不需要在每个月花钱买 App Review Bot 之类的月费评价机器人服务。

  • 安全 :捞取评价用的凭证、金钥均安全存放在你的 Github Private Repo,除了你之外没有人有权限存取。 您不需要再冒著泄漏风险把重要的凭证、金钥上传给第三方服务使用; ZReviewTender 为开源专案,一切操作经的起大众检视。

  • 可靠ZReviewTender 使用官方最新提供的 API 捞取评价资讯,相较以往其他服务使用 RSS 捞取评价,更准确、稳定可靠。

Buy me coffee ❤️❤️❤️

<https://www.buymeacoffee.com/zhgchgli>{:target="_blank"}

https://www.buymeacoffee.com/zhgchgli

如果这个专案有帮助到您,欢迎赞助我一杯咖啡,谢谢。

Quick Start!🚀

整个设定步骤约需 30 分钟,但只需设定一次,除非凭证金钥有更换,不然可以永久免费稳定的运作。 🚀🚀🚀🚀🚀

Step 1. 建立 Slack App

如果您的组织内已有建立过有 chat:write 之类的发讯息权限 Slack App,可以直接复用,不用建立新的。

前往 Slack Apps 首页:

<https://api.slack.com/apps>{:target="_blank"}

https://api.slack.com/apps

点击右上角「Create New App」。

  1. 选择:From scratch

  2. 输入 App Name: ZReviewTender 或自定义 Slack App 名称

  3. 选择目标安装的 Slack Workspace:请确认你选择的 Workspace,你有新增 Slack App 的权限。

  4. Create App

新增 OAuth & Permissions Scopes: Slack app 建立完成后,先到「OAuth & Permissions」页签设定 Scopes。

  1. 选择「OAuth & Permissions」

  2. 下滑找到 Scopes Section

  3. 依序输入新增 ZReviewTender Slack App 必备的三个 Scopes:

chat:write
chat:write.public
links:write

Install App 回到 Install App 页签安装 Slack App 到 Workspace。

  1. 选择「Install App」

  2. 点击「Install to YOUR_WORKSPACE

  3. 点击「Allow」

安装完成后回到 Install App 页面就会出现 Slack App Bot User OAuth Token ,点击「Copy」复制, 记下来,稍后设定使用

建立预收到评价通知的频道:

  • Sidebar -> Channels -> Create -> Create channel

  • Name: 输入想要的频道名称

Visibility:

  • Public:对所有人公开,无需其他动作。

  • Private:私密频道, ⭐️⭐️⭐️ 需要把刚刚建立的 Slack App 加入:

Slack App 加入频道方式:

  1. 点击上方 #频道名称

  2. 点击「Settings」

  3. 点击「Add an App」

  1. 搜寻你刚建立的 Slack App 名称

  2. 点击「Add」

加入成功频道会有提示字词。 ZReviewTender joined.

⭐️⭐️⭐️这边有发现一个 Slack Bug,Slack App 刚建立完可能会搜寻不到,要等一阵子才会出现;可以先使用 Public Channel,Public Channel 不需要将 Slack App 加入就能使用。

取得 Channel ID: 最后一步,最重要的我们要取得 Channel ID 稍后设定要使用。

  1. 点击上方 #频道名称

  2. About 最下方有一个 Channed ID 资讯

  3. 记下 Channel ID ,稍后设定使用

Slack 步骤完成。

— — —

其他补充:

你可以在「Basic Information」->「Display Information」编辑 Slack App 名称、icon:

修改完成后记得点右下角「Save Changes」才会储存。

如果 OAuth & Permissions Scopes 有新增需要点击「reinstall your app」重新安装才会生效:

Step 2. 产生 Apple App Store Connect API & Google Play Android Developer API 身份凭证

Apple App Store Connect API 身份凭证

iOS 比较容易,我们只需要从 App Store Connect 得到以下四个资讯即可:

Issuer ID:

Private Key ID & Private Key:

点击「+」新增按钮:

  • Name: ZReviewTender

  • Access: App Manager

  • Key ID ,稍后设定使用

  • 点击「Download API Key」保存下载下来的「 AuthKey_XXXXXXXXXX.p8 」档案,稍后设定使用。

App ID : (要捞取评价的目标 App ID)

App ID 可以在 App Store Connect -> App Store -> General -> App Information -> App ID 找到。

  • 记下 App ID ,稍后设定使用

Google Play Android Developer API 身份凭证

Android 较为复杂,需要先从 App 专案所属的 Google Cloud Project 启用 API & 建立 Service Account (服务帐户) & 将服务帐户加入 Google Play Console 并赋予 App 权限。

前往 Google Cloud Project:

选择 App 专案所属的 Google Cloud Project 或建立一个新 Project。

启用「Android Developer API」:

  1. 搜寻「Android Developer API」点击进入

  2. 选择「启用」

[此步骤可选] 您也可以同时启用「Cloud Translation API」:

  • 启用后可以使用同一个 Service Account (服务帐户) 凭证,串接评价自动翻译功能

  • 请注意:Cloud Translation API 并非免费,侦测语言、翻译都会产生费用!

  • 请注意:Cloud Translation API 并非免费,侦测语言、翻译都会产生费用!

  • 请注意:Cloud Translation API 并非免费,侦测语言、翻译都会产生费用!

建立 Service Account (服务帐户):

  1. 搜寻「IAM」

  2. 选择「IAM & Admin」

  1. 选择「服务帐户 (Service Account)」

  2. 选择「建立服务帐户 (Service Account)」

  1. 服务帐户名称:自行输入,可输入「 ZReviewTender 」or「 Google Play Review Bot

  2. 服务帐户 ID:自动带入,没特殊需求不用变更,这同时也会是你的 Service Account Email

  3. 点击「完成」

记下这组服务帐户 Service Account 的信箱地址:

  • 列表页也会显示 Service Account Email 地址

  • 记下 Service Account Email ,稍后设定使用

建立服务帐号 Service Account 金钥凭证:

  1. 重整列表页面,点击进入刚刚创建的 服务帐号 Service Account

  2. 点击「新增金钥」

  3. 点击「建立新的金钥」

  4. 金钥类型选择「JSON」

  5. 点击「建立」

  6. 保存下载下来的「 XXXX-XXXX.json 」档案,稍后设定使用

将服务帐户加入 Google Play Console 并赋予 要捞取评价的目标 App 权限:

进入到 Google Play Console 后台:

  1. 点击「Users and permissions」

  2. 点击右方「Invite new users」

  1. Email address 输入刚刚记下来的 Service Account Email

  2. App permissions -> Add app

  3. 加入 要捞取评价的目标 App

  4. 点击「Invite user」 即可完成邀请,无需验证

取得 Google Play Console Developer ID & App ID & Package Name 资讯:

  1. 点击 要捞取评价的目标 App 进入 Dashboard

  2. 记下 Package Name ,稍后设定使用

复制 Dashboard 网址,从网址中找到:

3.其中 /developers/ XXX 就是你的 Developer ID ,记下这串数字 Developer ID,稍后设定使用

4.其中 /app/ XXX 就是你的 App ID ,记下这串数字 App ID,稍后设定使用

身份凭证设定完成。

Step 3. Github Action 部署、设定档填写

令人振奋的事是,我已经将繁琐的 Github Repo, Github Action 设定流程打包成 Repo Template & Marketplace Github Action,您只要照以下几个步骤就可以完成工作。

前往: ZReviewTender-deploy-with-github-action

<https://github.com/ZhgChgLi/ZReviewTender-deploy-with-github-action>{:target="_blank"}

https://github.com/ZhgChgLi/ZReviewTender-deploy-with-github-action

  • Repository name:输入你想要的 Repo 名称

  • Private :因 Repo 会存放存取金钥, 务必设定为 Private Repo ⭐️⭐️⭐️

  • Private :因 Repo 会存放存取金钥, 务必设定为 Private Repo ⭐️⭐️⭐️

  • Private :因 Repo 会存放存取金钥, 务必设定为 Private Repo ⭐️⭐️⭐️

  • 点击「Create repository」

ZReviewTender 作者、贡献者、ZhgChgLi 并不会因为您使用 ZReviewTender 造成的任何损失负责。

等待 Repository 建立:

再次确认建立的是 Private Repo:

  • Private :因 Repo 会存放存取金钥, 务必设定为 Private Repo ⭐️⭐️⭐️

  • Private :因 Repo 会存放存取金钥, 务必设定为 Private Repo ⭐️⭐️⭐️

  • Private :因 Repo 会存放存取金钥, 务必设定为 Private Repo ⭐️⭐️⭐️

启用 Github Actions 权限: Repo 建立完成后,因 Github 安全设定,要先去 Repo Settings 允许 Github Actions 执行。

  1. Repo -> Settings

  2. 选择「Actions」 -> 「General」

  3. Actions permissions 选择「Allow all actions and reusable workflows」

  4. 点击「Save」

  5. Workflow permissions 选择「Read repository contents and packages permissions」

首次执行,初始化 ZReviewTender:

  1. Repo -> Actions

  2. 选择「Init ZReviewTender」

  3. 选择「Run workflow」

  4. 点击「Run workflow」

  5. 重整页面

等待 init ZReviewTender Action 完成:

如果出现 ❌ Error:请重新检查前面提到的 Github Actions 权限设定是否正确。

初始化成功回到 Repo 首页会出现两个新目录:

上传所需的凭证档案:

  1. 进入 /config 目录

  2. 右上角「Add file」-> 「Upload files」

  1. 将 Step 2. 保存下来的 GCP Service Account XXXX-XXXX.json (for Android)与 App Store Connect 保存下来的 AuthKey_XXXXXXXXXX.p8 (for iOS)一同上传。

  2. 等待上传完成

  3. 选择「Commit directly to the main branch」

  4. 点击「Commit changes」

设定 Apple (iOS):

  • 进入 config/ 目录,点击 apple.yml 档案

  • 点击右上角「🖊️编辑」

编辑 apple.yml ,贴上以下内容并填入前几步记下来的资讯:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
platform: 'apple'
appStoreConnectP8PrivateKeyFilePath: './config/AuthKey_XXXXXXXXXX.p8' # APPLE STORE CONNECT API PRIVATE .p8 KEY File Path
appStoreConnectP8PrivateKeyID: 'Private Key ID' # APPLE STORE CONNECT API PRIVATE KEY ID
appStoreConnectIssueID: 'Issuer ID' # APPLE STORE CONNECT ISSUE ID
appID: 'App ID' # APP ID
processors:
    - SlackProcessor: # Slack Processor, resend App Review to Slack.
        class: "SlackProcessor"
        enable: true # enable
        slackTimeZoneOffset: "+08:00" # Review Created Date TimeZone
        slackAttachmentGroupByNumber: "1" # 1~100, how many review message in 1 slack message.
        slackBotToken: "Slack App Bot User OAuth Token" # Slack Bot Token, send slack message throught Slack Bot.
        slackBotTargetChannel: "Target Channel ID" # Slack Bot Token, send slack message throught Slack Bot. (recommended, first priority)
        slackInCommingWebHookURL: "" # Slack In-Comming WebHook URL, Send slack message throught In-Comming WebHook, not recommended, deprecated.
  • appStoreConnectP8PrivateKeyFilePath : 输入 ./config/AuthKey_XXXXXXXXXX.p8 (Step 2. App Store Connect 保存下来的 AuthKey_XXXXXXXXXX.p8 档案名称)

  • appStoreConnectP8PrivateKeyID : Step 2. App Store Connect 记下来的 Private Key ID

  • appStoreConnectIssueID : Step 2. App Store Connect 记下来的 Issuer ID

  • appID : Step 2. App Store Connect 记下来的目标捞取 App 的 App ID

  • slackBotToken : 输入 Step 1. 记下的 Slack App Bot User OAuth Token

  • slackBotTargetChannel : 输入 Step 1. 记下的 要传送到的 Channel ID

  1. 编辑完成后点击右上角「Commit changes…」

  2. 选择「Commit directly to the main branch」

  3. 点击「Commit changes」

设定 Android:

  • 进入 config/ 目录,点击 android.yml 档案

  • 点击右上角「🖊️编辑」

编辑 android.yml ,贴上以下内容并填入前几步记下来的资讯:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
platform: 'android'
packageName: 'Package Name' # Android App Package Name
keyFilePath: './config/XXXX-XXXX.json' # Google Android Publisher API Service Account Credential .json File Path
playConsoleDeveloperAccountID: 'Developer ID' # Google Console Developer Account ID
playConsoleAppID: 'App ID' # Google Console App ID
processors:
- SlackProcessor: # Slack Processor, resend App Review to Slack.
        class: "SlackProcessor"
        enable: true # enable
        slackTimeZoneOffset: "+08:00" # Review Created Date TimeZone
        slackAttachmentGroupByNumber: "1" # 1~100, how many review message in 1 slack message.
        slackBotToken: "Slack App Bot User OAuth Token" # Slack Bot Token, send slack message throught Slack Bot.
        slackBotTargetChannel: "Target Channel ID" # Slack Bot Token, send slack message throught Slack Bot. (recommended, first priority)
        slackInCommingWebHookURL: "" # Slack In-Comming WebHook URL, Send slack message throught In-Comming WebHook, not recommended, deprecated.
  • packageName : Step 2. Google Play Console 后台记下来的 Package Name

  • keyFilePath : 输入 ./config/XXXX-XXXX.json (Step 2. GCP IAM 保存下来的 XXXX-XXXX.json Service Account 金钥档案名称)

  • playConsoleDeveloperAccountID : Step 2. Google Play Console 后台记下来的 Developer ID

  • playConsoleAppID : Step 2. Google Play Console 后台记下来的 App ID

  • slackBotToken : 输入 Step 1. 记下的 Slack App Bot User OAuth Token

  • slackBotTargetChannel : 输入 Step 1. 记下的 要传送到的 Channel ID

  1. 编辑完成后点击右上角「Commit changes…」

  2. 选择「Commit directly to the main branch」

  3. 点击「Commit changes」

设定完成! 🚀🚀🚀🚀

验证设定是否成功:

我们可以手动执行一次,确认设定无误。

  1. Repo -> Actions

  2. 选择「ZReviewTender」

  3. 选择「Run workflow」

  4. 点击「Run workflow」

  5. 重整页面

等待 ReviewTender Action 完成:

验证成功🎉🎉🎉🎉

如果出现 ❌ Error、Slack Channel 未收到启动讯息:请重新检查前面设定档案内容是否正确。

完成 🎉🎉🎉

现在你可以依靠这个免费可靠的 App 评价机器人时刻关注使用者的最新评价了!

Buy me coffee ❤️❤️❤️

<https://www.buymeacoffee.com/zhgchgli>{:target="_blank"}

https://www.buymeacoffee.com/zhgchgli

如果这个专案有帮助到您,欢迎赞助我一杯咖啡,谢谢。

其他设定

加上过滤功能

只转发符合条件的评价。

1
2
3
4
5
6
    - FilterProcessor:
        class: "FilterProcessor"
        enable: true # enable
        keywordsInclude: [] # keywords you want to filter out
        ratingsInclude: [] # ratings you want to filter out
        territoriesInclude: [] # territories you want to filter out (territory for Apple e.g. TWN)
  • 您只要在 /config/apple.yml/config/android.ymlprocessors 区块加上 FilterProcessor 设定。

加上自动翻译功能

将非您语言的评价自动使用 Google Cloud Translation API 进行翻译 (需消耗费用)。

  • 请先确定 Step 2. 建立的 Service Account 所属 GCP Project 有启用「Cloud Translation API」

  • apple.ymlandroid.yml 设定有一些不同

apple.yml:

1
2
3
4
5
6
    - GoogleTranslateProcessor: # Google Translate Processor, will translate review text to your language, you can remove whole block if you don't needed it.
        class: "GoogleTranslateProcessor"
        enable: true # enable
        googleTranslateAPIKeyFilePath: './config/XXXX-XXXX.json' # Google Translate API Service Account Credential .json File Path
        googleTranslateTargetLang: 'zh-TW' # Translate to what Language
        googleTranslateTerritoriesExclude: ["TWN","CHN"] # Review origin Territory that you don't want to translate. (territory for Apple e.g. TWN)
  • ./config/XXXX-XXXX.json (Step 2. GCP IAM 保存下来的 XXXX-XXXX.json Service Account 金钥档案名称)

android.yml:

1
2
3
4
5
6
    - GoogleTranslateProcessor: # Google Translate Processor, will translate review text to your language, you can remove whole block if you don't needed it.
        class: "GoogleTranslateProcessor"
        enable: true # enable
        googleTranslateAPIKeyFilePath: './config/XXXX-XXXX.json' # Google Translate API Service Account Credential .json File Path
        googleTranslateTargetLang: 'zh-TW' # Translate to what Language
        googleTranslateTerritoriesExclude: ["zh-Hant","zh-Hans"] # Review origin Territory (language) that you don't want to translate. (language for android e.g. zh-Hant, en)
  • ./config/XXXX-XXXX.json (Step 2. GCP IAM 保存下来的 XXXX-XXXX.json Service Account 金钥档案名称)

完整组合范例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
platform: 'android'
packageName: '' # Android App Package Name
keyFilePath: '' # Google Android Publisher API Service Account Credential .json File Path
playConsoleDeveloperAccountID: '' # Google Console Developer Account ID
playConsoleAppID: '' # Google Console App ID
processors:
    - FilterProcessor:
        class: "FilterProcessor"
        enable: true # enable
        keywordsInclude: [] # keywords you want to filter out
        ratingsInclude: [] # ratings you want to filter out
        territoriesInclude: [] # territories you want to filter out (territory for Apple e.g. TWN)
    - GoogleTranslateProcessor: # Google Translate Processor, will translate review text to your language, you can remove whole block if you don't needed it.
        class: "GoogleTranslateProcessor"
        enable: true # enable
        googleTranslateAPIKeyFilePath: '' # Google Translate API Service Account Credential .json File Path
        googleTranslateTargetLang: 'zh-TW' # Translate to what Language
        googleTranslateTerritoriesExclude: ["zh-Hant","zh-Hans"] # Review origin Territory (language) that you don't want to translate. (language for android e.g. zh-Hant, en)
    - SlackProcessor: # Slack Processor, resend App Review to Slack.
        class: "SlackProcessor"
        enable: true # enable
        slackTimeZoneOffset: "+08:00" # Review Created Date TimeZone
        slackAttachmentGroupByNumber: "1" # 1~100, how many review message in 1 slack message.
        slackBotToken: "" # Slack Bot Token, send slack message throught Slack Bot.
        slackBotTargetChannel: "" # Slack Bot Token, send slack message throught Slack Bot. (recommended, first priority)
        slackInCommingWebHookURL: "" # Slack In-Comming WebHook URL, Send slack message throught In-Comming WebHook, not recommended, deprecated.

调整完毕一样照以下步骤储存 .yml

  1. 编辑完成后点击右上角「Commit changes…」

  2. 选择「Commit directly to the main branch」

  3. 点击「Commit changes」

执行参数设定

您可以编辑 ZReviewTender.yml 档案设定执行参数。

  1. Repo -> Actions

  2. 点击「ZReviewTender」

  3. 点击「 ZReviewTender.yml

  4. 点击右上角「🖊️编辑」

1
2
3
4
5
6
7
8
9
10
11
12
13
14
name: ZReviewTender
on:
  workflow_dispatch:
  schedule:
    - cron: "15 */6 * * *" #check new review every 6 hour.

jobs:
  ZReviewTender:
    runs-on: ubuntu-latest
    steps:
    - name: ZReviewTender Automatic Bot
      uses: ZhgChgLi/ZReviewTender@main
      with:
        command: '-r'

调整检查频率 (多久爬取转发一次新评价?)

调整 cron: "15 */6 * * *" 里的设定值。

参数使用 Crontab 表示,您可以使用 以下网站 产生想要的设定参数:

<https://crontab.guru/>{:target="_blank"}

https://crontab.guru/

调整执行脚本

调整 command: "-r" 里的设定值。

  • -r : 同时执行 Android 和 Apple (iOS) 评价检查

  • -a : 纸执行 Apple (iOS) 评价检查

  • -g : 只执行 Android 评价检查

调整完毕:

  1. 编辑完成后点击右上角「Commit changes…」

  2. 选择「Commit directly to the main branch」

  3. 点击「Commit changes」

暂时停止检查

  1. Repo -> Actions

  2. 选择「ZReviewTender」

  3. 点击右方「…」

  4. 选择「Disable workflw」

问题回报及功能建议

如果您有任何功能建议或问题、Bug,请前往以上 Github Repo 建立 Issue 回报,谢谢。

进阶使用及开发故事

有任何问题及指教欢迎 与我联络


Buy me a beer

本文首次发表于 Medium (点击查看原始版本),由 ZMediumToMarkdown 提供自动转换与同步技术。

Improve this page on Github.

This post is licensed under CC BY 4.0 by the author.