Skip to content

Latest commit

 

History

History
59 lines (40 loc) · 2.83 KB

plan.asc

File metadata and controls

59 lines (40 loc) · 2.83 KB

规划

我初步设想的流程是这样:

  1. 用户添加机器人,此时服务器收到客户端发来的 /start 消息,返回 twitter OAuth 授权链接

  2. 用户点击 OAuth 授权链接登录他们的 twitter 账户并完成授权

  3. 授权成功后,数据库中保存用户的 telegram id 及 twitter 的 access token

  4. 用户发送消息给机器人

  5. 服务器收到用户消息,根据用户 id 获取数据库中对应的 access token 然后提交消息给 twitter api

  6. 服务器收到 twitter 响应,视情况决定是否给用户一个反馈

然而在开发真正开始前,我们还需要解决一个问题。

本地开发的问题

我们知道,webhook 必须是线上可访问的 - 不管它是微信公众号的还是 telegram 的。而在开发阶段,Phoenix 服务运行在本地,外网无法访问到。

我能想到的解决办法是,设定一个公开的 webhook,但在它收到 telegram 推送的消息时,转发到本地 Phoenix 开发服务器。

俩种方案:

  1. Reverse ssh tunnel - 因为墙的干扰,这个稳定性很差,连接经常断掉,需要重连,严重影响开发体验

  2. ngrok - 这个虽然被墙,但墙不是问题,而且据我的使用体验,ngrok 十分稳定,另外它还有可视化界面,便于我们查看 http 请求与响应。

权衡后,我选择 ngrok。

安装 ngrok 后执行命令:

$ /Applications/ngrok http 4000
ngrok by @inconshreveable                                                                                                                                       (Ctrl+C to quit)

Session Status                online
Account                       Sam Chen (Plan: Free)
Version                       2.2.8
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://fd80be0a.ngrok.io -> localhost:4000
Forwarding                    https://fd80be0a.ngrok.io -> localhost:4000

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

ngrok 会在本地 4000 端口即我们的 Phoenix 开发服务器与 ngrok 的随机公共网址间形成映射。

接着访问 telegram 设定 webhook 的网址,将 webhook 设置为 ngrok 随机生成的地址 https://fd80be0a.ngrok.io(注意 telegram 要求 webhook 必须是 https,不能是 http):

当然,我们的 /api/twitter 路由目前还没有创建。

之后本地开发服务器就能收到线上 webhook 转发来的 telegram 消息,如下图:

ngrok web interface