如何避免在 Twilio 中进行轮询?

How to avoid polling in Twilio?

我想在 python 中创建一个 Twilio 应用程序,它在我的 mac osx 桌面的后台运行,并在收到新短信时执行操作。我只对处理最近收到的短信感兴趣。

我当前的解决方案是轮询机制,其中我有一个无限循环,在循环中我每次调用 TwilioRestClient(...).messages.list() 并处理返回数组中的第一条消息.我在每次迭代中休眠 1 秒,以避免对处理器造成过多负担。

当前的实现通常有效,但有时会在 TwilioRestClient(...).messages.list() 调用时滞后数秒。我假设这是因为我使用的是 Twilio 的试用版。但是,我们将不胜感激有关如何解决此问题的任何建议。另一个主要问题是实施极其浪费。在 运行 的绝大部分时间里,应用程序确实应该处于休眠状态,并且当新消息到达时应该有 activity 的短暂爆发。

这是当前的实现:

def run(self):
    last_message = self.get_most_recent_message_body().lower()
    self.is_running = True
    while self.is_running:
        message = self.get_most_recent_message_body().lower()
        if (message != last_message):
            last_message = message
            self.commander.execute(message)
            sleep(1);

def get_most_recent_message_body(self):
    messages = TwilioRestClient(self.TWILIO_ACCOUNT_SID, self.TWILIO_AUTH_TOKEN).messages.list()
    most_recent_message = messages[0]
    return most_recent_message.body

我希望应用尽可能地响应。最佳解决方案是某种观察者模式或某种信号使用,每当有新消息到达时,Twilio 都会提醒我的应用 "wake up"。有没有办法实现这个?

谢谢!

这里是 Twilio 开发人员布道者。

你完全可以不用轮询来做到这一点。让我解释一下。

当您使用 Twilio 购买号码时,您可以设置两个指向您构建的应用程序的 URL,一个用于语音,一个用于消息传递。然后,当 Twilio 收到电话或短信时,它会向您使用电话或消息的详细信息设置的 url 发出 HTTP 请求(webhook)。您的应用程序可以响应一些 XML(称为 TwiML)以告诉 Twilio 如何处理消息或呼叫。

我猜你正在编写一个 python 应用程序,因为你用 Python 标记了这个问题。这是 getting started receiving SMS messages with Python.

的快速指南