33-发送短信
18.8.2 发送短信
一旦安装了 twilio
模块,注册了Twilio账号,验证了你的手机号码,登记了Twilio电话号码,获得了账户的SID和auth标志,你就做好通过Python脚本向你自己发短信的准备了。
与所有的注册步骤相比,实际的Python代码很简单。保持计算机连接到因特网,在交互式环境中输入以下代码,用你的真实信息替换 accountSID
、 authToken
、 myTwilioNumber
和 myCellPhone
变量的值:
❶ >>> from twilio.rest import Client
>>> accountSID = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
>>> authToken = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
❷ >>> twilioCli = Client(accountSID, authToken)
>>> myTwilioNumber = '+14955551234'
>>> myCellPhone = '+14955558888'
❸ >>> message = twilioCli.messages.create(body='Mr. Watson - Come here - I want
to see you.', from_=myTwilioNumber, to=myCellPhone)
输入最后一行后不久,你会收到一条短信,内容为:Sent from your Twilio trial account - Mr. Watson - Come here – I want to see you.。
基于 twilio
模块的设计方式,导入它时需要使用 from twilio.rest import Client
,而不仅仅是 import twilio
❶。将账户的SID保存在 accountSID
中,认证标志保存在 authToken
中,然后调用 Client()
,并传入 accountSID
和 authToken
。 Client()
调用返回一个 Client
对象❷。该对象有一个 message
属性,该属性又有一个 create()
方法,可以用来发送短信。这个方法将告诉Twilio的服务器发送短信。将你的Twilio号码和手机号码分别保存在 myTwilioNumber
和 myCellPhone
中,然后调用 create()
,传入关键字参数,指明短信的正文、发件人的号码( myTwilioNumber
),以及收信人的电话号码( myCellPhone
)❸。
create()
方法返回的 Message
对象将包含已发送短信的相关信息。输入以下代码,继续演示交互式环境的例子:
>>> message.to
'+14955558888'
>>> message.from_
'+14955551234'
>>> message.body
'Mr. Watson - Come here - I want to see you.'
to
、 from
和 body
属性应该分别保存了你的手机号码、Twilio号码和消息。请注意,发送手机号码是在 from
属性中,末尾有一个下划线,而不是 from
。这是因为 from
是一个Python关键字(例如,你在 from modulename import *
形式的 import
语句中见过它),因此它不能作为一个属性名。输入以下代码,继续演示交互式环境的例子:
>>> message.status
'queued'
>>> message.date_created
datetime.datetime(2019, 7, 8, 1, 36, 18)
>>> message.date_sent == None
True
status
属性应该包含一个字符串。如果消息被创建和发送, date_created
和 date_sent
属性应该包含一个 datetime
对象。如果已收到短信,而 status
属性却设置为 'queued'
, date_sent
属性设置为 None
,这似乎有点奇怪。这是因为你先将 Message
对象记录在 message
变量中,然后短信才实际发送。你需要重新获取 Message
对象,查看它最新的 status
和 date_sent
。每个Twilio消息都有唯一的字符串ID(SID),可用于获取 Message
对象的最新更新。输入以下代码,继续演示交互式环境的例子:
>>> message.sid
'SM09520de7639ba3af137c6fcb7c5f4b51'
❶ >>> updatedMessage = twilioCli.messages.get(message.sid)
>>> updatedMessage.status
'delivered'
>>> updatedMessage.date_sent
datetime.datetime(2019, 7, 8, 1, 36, 18)
输入 message.sid
将显示这个消息的SID。将这个SID传入Twilio客户端的 get()
方法❶,你可以取得一个新的 Message
对象,它包含最新的消息。在这个新的 Message
对象中, status
和 date_sent
属性是正确的。
status
属性将设置为下列字符串之一: 'queued'
、 'sending'
、 'sent'
、 'delivered'
、 'undelivered'
或 'failed'
。这些状态不言自明,对于更准确的细节,请查看相关资源和图书。
用Python接收短信
遗憾的是,用Twilio接收短信比发送短信更复杂一些。Twilio需要你有一个网站,用于运行自己的Web应用程序。这已超出了本书的范围,但你可以在网上找到更多细节。