如何避免在Twilio中进行投票?

时间:2015-06-29 03:21:17

标签: python macos twilio observer-pattern polling

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

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

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

这是当前的实施:

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警告我的应用程序“醒来”#34;每当有新消息到达时。有没有办法实现这个?

谢谢!

1 个答案:

答案 0 :(得分:1)

Twilio开发者传道者在这里。

没有民意调查你绝对可以做到这一点。让我解释一下。

当您使用Twilio购买号码时,您可以设置两个指向您构建的应用程序的URL,一个用于语音,一个用于消息传递。然后,当Twilio收到呼叫或文本消息时,它将向您设置的URL发出HTTP请求(webhook),其中包含呼叫或消息的详细信息。您的应用程序可以使用某些XML(称为TwiML)进行响应,以告知Twilio如何处理消息或调用。

当你用Python标记这个问题时,我猜你正在写一个python应用程序。这是getting started receiving SMS messages with Python的快速指南。