当用户推特 Tweepy 时,Twilio SMS 消息不发送

问题描述

每当某个用户发推文时,我都会尝试将 SMS 消息从一个 Twilio 电话号码发送到另一个电话号码。代码如下:

import tweepy
from twilio.rest import Client

consumer_key = CONSUMER_KEY
consumer_secret = CONSUMER_SECRET
access_token = ACCESS_TOKEN
access_token_secret = ACCESS_TOKEN_SECRET

auth = tweepy.OAuthHandler(consumer_key,consumer_secret)
auth.set_access_token(access_token,access_token_secret)

api = tweepy.API(auth)

client = Client(TWILIO_ACCOUNT_SID,TWILIO_AUTH_TOKEN)
class MyStreamListener(tweepy.StreamListener):
    def on_status(self,status):
        if status.user.id_str == "14173315":
            message = client.messages \
                .create(
                    body="Success!",from_=TWILIO_PHONE_NUMBER_1,to=TWILIO_PHONE_NUMBER_2
                )

myStreamListener = MyStreamListener()
myStream = tweepy.Stream(auth = api.auth,listener=myStreamListener)
myStream.filter(follow=["14173315"])

这是在 Heroku worker dyno 上托管的,因此当应用程序上线时,Tweepy 侦听器始终在侦听 Twitter ID 14173315 的用户的推文。但是,每当 Twitter ID 14173315 的用户发推文时,就不会收到 SMS消息正在发送。我知道这一点是因为我检查了 Twilio SMS 消息日志并且两个电话号码之间没有显示任何消息。我不知道为什么会这样。有任何想法吗?谢谢

解决方法

这里是 Twilio 开发者布道者。

经过长时间的讨论,结果证明这不是 Twitter 流 API 或 Twilio 的问题。相反,工作进程没有在 Heroku 上运行。

在 Heroku 上运行工作进程时,您需要确保工作进程由 Heroku 启动。默认情况下,Heroku 将启动一个“web”进程,但您需要告诉它专门启动其他进程。

要检查是否有任何进程正在运行,请运行:

heroku ps

如果您在 Procfile 中定义了一个名为“worker”的进程,您可以使用以下命令确保它在一个 dyno 中运行:

heroku ps:scale worker=1

您可以阅读有关 scaling dynos in the Heroku documentation 的更多信息。