0

希望这些天你做得对。

总结一下我的问题,我认为这不起作用,因为我使用的是免费的 Twilio 帐户而不是付费帐户。但这只是我的初学者理论。现在,问题:

我已经尝试过官方的 Twilio 教程(https://www.twilio.com/blog/automating-ngrok-python-twilio-applications-pyngrok,我分享了链接以防有人觉得它有趣或需要它),它允许我们使用 Client (twilio) 和 pyngrok (ngrok) 自动配置 SMS webhook (sms_url)。

def start_ngrok():
   from twilio.rest import Client
   from pyngrok import ngrok

   url = ngrok.connect(5000)
   print(' * Tunnel URL:', url)
   client = Client()
   client.incoming_phone_numbers.list(
       phone_number=os.environ.get('TWILIO_PHONE_NUMBER'))[0].update(
           sms_url=url + '/bot')

我无法解释过去 4 天我尝试过的所有事情,但都没有成功。我不断收到同样的错误:

   client.incoming_phone_numbers.list(phone_number=os.environ.get('TWILIO_PHONE_NUMBER'))[0].update(sms_url=url + '/bot')
IndexError: list index out of range

尽管环境变量正常工作,但列表中的某些内容无法正常工作,它为空。我将只使用一个电话号码,因此确实不需要列表,所以我开始更改该行以避免不同的错误并最终得到以下结果:

def start_ngrok():
   from twilio.rest import Client
   from pyngrok import ngrok

   url = ngrok.connect(5000)
   print(' * Tunnel URL:', url)
   client = Client()
   client.incoming_phone_numbers("my_number").update(sms_url=str(url) + '/bot')

然后我得到了我自己无法解决的最后一个错误:

 File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/twilio/rest/api/v2010/account/incoming_phone_number/__init__.py", line 442, in update
   payload = self._version.update(method='POST', uri=self._uri, data=data, )
 File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/twilio/base/version.py", line 106, in update
   raise self.exception(method, uri, response, 'Unable to update record')
twilio.base.exceptions.TwilioRestException: 
HTTP Error Your request was:

POST /Accounts/my_account_SID/IncomingPhoneNumbers/+my_number.json

Twilio returned the following information:

Unable to update record: The requested resource /2010-04-01/Accounts/my_account_SID/IncomingPhoneNumbers/+my_number.json was not found

More information may be available here:

https://www.twilio.com/docs/errors/20404

我尝试了所有不同的电话号码组合/格式:没有任何效果。

感谢您花时间阅读这一切!

4

1 回答 1

0

自从写博客或出现错误后,似乎发生了一些变化。

试试下面的:

  • 唯一的区别是添加.public_url到 url 对象。还允许使用GETto /bot 进行测试。
from dotenv import load_dotenv
from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse

load_dotenv()
app = Flask(__name__)


@app.route('/bot', methods=['POST','GET'])
def bot():
    user = request.values.get('From', '')
    resp = MessagingResponse()
    resp.message(f'Hello, {user}, thank you for your message!')
    return str(resp)


def start_ngrok():
    from twilio.rest import Client
    from pyngrok import ngrok

    url = ngrok.connect(5000)
    print('This is',url)
    print(' * Tunnel URL:', url)
    client = Client()
    client.incoming_phone_numbers.list(
    phone_number=os.environ.get('TWILIO_PHONE_NUMBER'))[0].update(
        sms_url=url.public_url + '/bot')


if __name__ == '__main__':
    if os.environ.get('WERKZEUG_RUN_MAIN') != 'true':
        start_ngrok()
    app.run(debug=True)
于 2021-01-17T15:06:32.580 回答