【问题标题】:Twilio - Quick question (Unable to update record)Twilio - 快速问题(无法更新记录)
【发布时间】:2021-04-21 20:22:42
【问题描述】:

希望你这些天做得对。

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

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

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

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

感谢您抽出宝贵时间阅读所有内容!

【问题讨论】:

    标签: twilio twilio-api pyngrok


    【解决方案1】:

    自写博客以来似乎发生了一些变化或出现了错误。

    试试下面的:

    • 唯一的区别是将.public_url 添加到url 对象中。还允许 GET 到 /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)
    

    【讨论】:

    • 嗨@Alan,谢谢!仍然得到同样的错误。在我看来,这个请求做得很好,twilio 仍然给我一个空列表(如下所示)。也许我错误地设置了我的电话号码或一些 twilio 配置。对你起作用吗? {"first_page_uri": "/2010-04-01/Accounts/MY_AC/IncomingPhoneNumbers.json?PhoneNumber="MY_PHONE"&PageSize=50&Page=0", "end": 0, "previous_page_uri": null, "incoming_phone_numbers": [], "uri": "/2010-04-01/Accounts/MY_AC/IncomingPhoneNumbers.json?PhoneNumber=MY_PHONE&PageSize=50&Page=0", "page_size": 50 ,“开始”:0,“next_page_uri”:空,“页面”:0}
    • 这个输出是什么(它应该显示您帐户中的电话号码)? (确保使用您的生产帐户 SID 和 Auth Token 替换 '$TWILIO_ACCOUNT_SID' 和 $TWILIO_AUTH_TOKEN):curl -X GET 'https://api.twilio.com/2010-04-01/Accounts/'$TWILIO_ACCOUNT_SID'/IncomingPhoneNumbers.json?PageSize=20' \ -u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
    • 嗨@Alan,这就是我得到的。我使用在 /console 中找到的凭据(我猜这些是生产的,我有一个免费的 Twilio 帐户):{“code”:20003,“detail”:“您的 AccountSid 或 AuthToken 不正确。”,“message”:“身份验证错误- 未提供凭据"、"more_info": "twilio.com/docs/errors/20003"、"status": 401}curl:(3) URL 使用错误/非法格式或缺少 URL curl:(3) URL 使用错误/非法格式或缺少 URL .
    • 听起来命令语法已关闭,请尝试以下用您自己的替换 ACXXX 和 AUTH_TOKEN(在 Twilio 控制台的主页上正确):curl -X GET 'https://api.twilio.com/2010-04-01/Accounts/ACXXX/IncomingPhoneNumbers.json?PageSize=20' -u ACXXX:AUTH_TOKEN
    • 嗨@Alan,感谢您的跟进,我真的很感激。现在它似乎工作了,它是一个类似的消息,因为我在上面显示了几个 cmets: {"first_page_uri": "/2010-04-01/Accounts/AC88148adbefbae8b3e1bbf9980f142926/IncomingPhoneNumbers.json?PageSize=20&Page=0", "end" : 0, "previous_page_uri": null, "incoming_phone_numbers": [], "uri": "/2010-04-01/Accounts/AC88148adbefbae8b3e1bbf9980f142926/IncomingPhoneNumbers.json?PageSize=20&Page=0", "page_size": 20, "开始”:0,“next_page_uri”:空,“页面”:0}%。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多